/** * @return ChoiceInterface[] */ public function getChoices() { /** @var ChoiceInterface[] $choices */ $choices = []; foreach ($this as $object) { $choices[] = ChoiceBuilder::begin()->setValue($object)->addData('primary-key-for', $object->getPrimaryKey())->build(); } return $choices; }
/** * If a value is not provided to ChoiceBuilder, ChoiceBuilder * shall throw an exception. * * @expectedException Exception * @expectedExceptionMessageRegExp #Must use ::setValue.*# */ public function testValueIsRequired() { ChoiceBuilder::begin()->setAlias((string) rand())->build(); }
public function testValidate() { $keys = ["key1", "key2"]; $values = ["value1", "value2"]; $choices = [ChoiceBuilder::begin()->setAlias($keys[0])->setValue($values[0])->build(), ChoiceBuilder::begin()->setAlias($keys[1])->setValue($values[1])->build()]; // Field not required, but provided foreach ($this->testedFields() as $field) { $data = (string) rand(); $field->setRequired(false); $_POST[$field->getSlug()] = $data; $field->validate(); $this->assertTrue($field->isValid(), "Failure on class: " . get_class($field)); $this->assertEmpty($field->getErrors(), "Failure on class: " . get_class($field)); $this->assertEquals($data, $field->getValidatedData(), "Failure on class: " . get_class($field)); } // Field not required, not provided foreach ($this->testedFields() as $field) { $data = (string) rand(); $field->setRequired(false); unset($_POST[$field->getSlug()]); $field->validate(); $this->assertTrue($field->isValid(), "Failure on class: " . get_class($field)); $this->assertEmpty($field->getErrors(), "Failure on class: " . get_class($field)); $this->assertEquals(null, $field->getValidatedData(), "Failure on class: " . get_class($field)); } // Field required, and provided foreach ($this->testedFields() as $field) { $data = (string) rand(); $field->setRequired(true); $_POST[$field->getSlug()] = $data; $field->validate(); $this->assertTrue($field->isValid(), "Failure on class: " . get_class($field)); $this->assertEmpty($field->getErrors(), "Failure on class: " . get_class($field)); $this->assertEquals($data, $field->getValidatedData(), "Failure on class: " . get_class($field)); } // Field required, but not provided foreach ($this->testedFields() as $field) { $data = (string) rand(); $field->setRequired(true); unset($_POST[$field->getSlug()]); $field->validate(); $this->assertFalse($field->isValid(), "Failure on class: " . get_class($field)); $this->assertNotEmpty($field->getErrors(), "Failure on class: " . get_class($field)); $this->assertEquals(null, $field->getValidatedData(), "Failure on class: " . get_class($field)); } /* Choice Field */ // Field has specified choices, submission does not match available choices foreach ($this->testedFields() as $field) { $field->setChoices($choices); $field->setType(FieldBuilder::TYPE_CHOICE); $data = (string) rand(); $_POST[$field->getSlug()] = $data; $field->validate(); $this->assertFalse($field->isValid(), "Failure on class: " . get_class($field)); $this->assertNotEmpty($field->getErrors(), "Failure on class: " . get_class($field)); $this->assertEquals(null, $field->getValidatedData(), "Failure on class: " . get_class($field)); } // Field has specified choices, submission does match available choices foreach ($this->testedFields() as $field) { $field->setChoices($choices); $field->setType(FieldBuilder::TYPE_CHOICE); $choice = array_values($field->getChoices())[0]; $slug = array_keys($field->getChoices())[0]; $_POST[$field->getSlug()] = $slug; $field->validate(); $this->assertTrue($field->isValid(), "Failure on class: " . get_class($field)); $this->assertEmpty($field->getErrors(), "Failure on class: " . get_class($field)); $this->assertEquals($choice->getValue(), $field->getValidatedData(), "Failure on class: " . get_class($field)); } /* Multiple-Choice Field */ // Field has specified choices, submission does not match available choices foreach ($this->testedFields() as $field) { $field->setChoices($choices); $field->setType(FieldBuilder::TYPE_MULTIPLE_CHOICE); $data = (string) rand(); $_POST[$field->getSlug()] = [$data]; $field->validate(); $this->assertFalse($field->isValid(), "Failure on class: " . get_class($field)); $this->assertNotEmpty($field->getErrors(), "Failure on class: " . get_class($field)); $this->assertEquals(null, $field->getValidatedData(), "Failure on class: " . get_class($field)); } // Field has specified choices, submission does match available choices foreach ($this->testedFields() as $field) { $field->setChoices($choices); $field->setType(FieldBuilder::TYPE_MULTIPLE_CHOICE); $choice = array_values($field->getChoices())[0]; $slug = array_keys($field->getChoices())[0]; $_POST[$field->getSlug()] = [$slug]; $field->validate(); $this->assertTrue($field->isValid(), "Failure on class: " . get_class($field)); $this->assertEmpty($field->getErrors(), "Failure on class: " . get_class($field)); $this->assertContains($choice->getValue(), $field->getValidatedData(), "Failure on class: " . get_class($field)); } }
public function testSetFieldAttributes() { $choices = [ChoiceBuilder::begin()->setValue('choice value')->build()]; $form = FormBuilder::begin()->setId("f-" . (string) rand())->addWritable(new Field([], [], Field::TYPE_TEXT, 'A text field', []), "field")->setFieldType("field", Field::TYPE_CHOICE)->setFieldChoices("field", $choices)->setInitialFieldValue("field", "new initial field value")->setFieldLabel("field", "new field label")->build(); /** @var FieldInterface $field */ $field = $form->getWritableBearer()->getWritableByHandle("field"); $this->assertEquals(Field::TYPE_CHOICE, $field->getType()); $this->assertEquals(array_values($choices), array_values($field->getChoices())); $this->assertEquals('new initial field value', $field->getInitial()); $this->assertEquals('new field label', $field->getLabel()); }
public function testVisitField() { $writer = new HTMLWriter(); /* A literal field */ $field = new Field(["field-class"], [], "literal", "A literal field", "initial", true, [], 200); // Get result and strip quotes, for easier analysis $result = $this->stripQuotes($writer->visitField($field)); // Assert that the field contains the given elements $this->assertContains("initial", $writer->visitField($field)); $this->assertContains("field-class", $writer->visitField($field)); /* A section-label field */ $field = new Field([], [], "section-label", "A section-label field", "initial"); $this->assertContains("A section-label field", $writer->visitField($field)); $this->assertNotContains("initial", $writer->visitField($field)); /* An html field */ $field = new Field([], [], FieldBuilder::TYPE_HTML, "An HTML Field", "initial"); $this->assertContains('textarea class=html', $this->stripQuotes($writer->visitField($field))); /* A choice field */ $aliases = ["alias1", "alias2"]; $values = ["value1", "value2"]; $choices = [ChoiceBuilder::begin()->setAlias($aliases[0])->setValue($values[0])->build(), ChoiceBuilder::begin()->setAlias($aliases[1])->setValue($values[1])->build()]; $field = new Field([], [], "choice", "A literal field", $values[0], true, $choices, 200); $keys = array_keys($field->getChoices()); // Get result and strip quotes, for easier analysis $result = $this->stripQuotes($writer->visitField($field)); // Assert that the field contains our choices $this->assertContains($values[0], $result); $this->assertContains($values[1], $result); $this->assertContains("value=" . $keys[0], $result); $this->assertContains("value=" . $keys[1], $result); // Assert that the "initial" choice is selected $this->assertContains("value={$keys[0]} checked", $result); /* A multiple choice field */ $field = new Field([], [], "multiple-choice", "A multiple-choice field", [$values[1]], true, $choices, 200); // Get result and strip quotes, for easier analysis $result = $this->stripQuotes($writer->visitField($field)); // Assert that the field contains our choices $this->assertContains($values[0], $result); $this->assertContains($values[1], $result); $this->assertContains("value={$keys[0]}", $result); $this->assertContains("value={$keys[1]}", $result); // Assert that the "initial" choice is selected $this->assertContains("value={$keys[1]} selected", $result); /* A text field */ $field = new Field([], [], "text", "A text field", "5", true, [], 200, "helptext", "placeholder for a text field"); // Get result and strip quotes, for easier analysis $result = $this->stripQuotes($writer->visitField($field)); $this->assertContains('value=5', $result); $this->assertContains('<input type=text', $result); $this->assertContains('placeholder for a text field', $result); /* A textarea field */ $field = new Field([], [], "textarea", "A textarea field", "initial value", true, [], 1000, "helptext", "placeholder for a textarea field"); // Get result and strip quotes, for easier analysis $result = $this->stripQuotes($writer->visitField($field)); // By our current method of calculation, should have size of 100 means 10 rows // If change calculation, change this test $this->assertContains('rows=10', $result); $this->assertContains('<textarea', $result); $this->assertContains('initial value', $result); $this->assertContains('placeholder for a textarea field', $result); /* A textarea field without an initial value*/ $field = new Field([], [], "textarea", "A textarea field", "", true, [], 1000); // Get result and strip quotes, for easier analysis $result = $this->stripQuotes($writer->visitField($field)); // Assert that the text area contains no initial text $this->assertContains('></textarea>', $result); }