From f907002435e860be1702b753d45a595aca8dff1c Mon Sep 17 00:00:00 2001 From: agh1467 <7823088+agh1467@users.noreply.github.com> Date: Wed, 21 Dec 2022 08:07:53 -0500 Subject: [PATCH] mvc: TextField tests (#5860) * Verify/validate existing functionality --- .../Base/FieldTypes/TextFieldTest.php | 348 ++++++++++++++++++ 1 file changed, 348 insertions(+) create mode 100644 src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/TextFieldTest.php diff --git a/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/TextFieldTest.php b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/TextFieldTest.php new file mode 100644 index 000000000..3cf34a802 --- /dev/null +++ b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/TextFieldTest.php @@ -0,0 +1,348 @@ +assertInstanceOf('\OPNsense\Base\FieldTypes\TextField', new TextField()); + } + + /** + * type is not a container (TextField default) + */ + public function testIsContainer() + { + $field = new TextField(); + + $this->assertFalse($field->isContainer()); + } + + /** + * field is not an ArrayField (default) + */ + public function testIsArrayType() + { + $field = new TextField(); + + $this->assertFalse($field->isArrayType()); + } + + /** + * field is not virtual (BaseField default) + */ + public function testIsVirtualFalse() + { + $field = new TextField(); + + $this->assertFalse($field->getInternalIsVirtual()); + } + + /** + * field can be set as virtual + */ + public function testIsVirtualTrue() + { + $field = new TextField(); + $field->setInternalIsVirtual(); + + $this->assertTrue($field->getInternalIsVirtual()); + } + + /** + * no value set + * not required (BaseField default) + */ + public function testIsEmptyAndRequiredN() + { + $field = new TextField(); + + $this->assertFalse($field->isEmptyAndRequired()); + } + + /** + * no value set, but required + */ + public function testIsEmptyAndRequiredY() + { + $field = new TextField(); + $field->setRequired("Y"); + + $this->assertTrue($field->isEmptyAndRequired()); + } + + /** + * required, value not empty + */ + public function testRequiredNotEmpty() + { + $field = new TextField(); + $value = "Not empty string value"; + $field->setRequired("Y"); + $field->setValue($value); + + $this->assertEquals($field->getNodeData(), $value); + $this->assertEmpty($this->validate($field)); + } + + /** + * required, but empty value + */ + public function testRequiredEmpty() + { + $this->expectException(\OPNsense\Phalcon\Filter\Validation\Exception::class); + $this->expectExceptionMessage("PresenceOf"); + $field = new TextField(); + $field->setRequired("Y"); + $field->setValue(""); + + $this->validateThrow($field); + } + + /** + * empty value passes validation + * no mask (TextField default) + * not required (BaseField default) + */ + public function testEmptyValue() + { + $field = new TextField(); + $field->setValue(""); + + $this->assertEmpty($this->validate($field)); + } + + /** + * empty value passes validation with regex pattern set (regex validator doesn't apply) + * not required (BaseField default) + */ + public function testEmptyValueWithMask() + { + $field = new TextField(); + $field->setMask('/^regexpattern$/'); + $field->setValue(""); + + $this->assertEmpty($this->validate($field)); + } + + /** + * non-empty value fails validation against regex pattern + * not required (BaseField default) + */ + public function testValueWithMask() + { + $field = new TextField(); + $field->setMask('/^[a-z]{8}$/'); + $field->setValue("4bcd3fgh"); + + $this->assertContains('OPNsense\Phalcon\Filter\Validation\Validator\Regex', $this->validate($field)); + } + + /** + * non-empty value passes validation against regex pattern + * not required (BaseField default) + */ + public function testNonEmptyStringWithNonEmptyMask() + { + $field = new TextField(); + $field->setMask('/^[a-z]{8}$/'); + $field->setValue("abcdefgh"); + + $this->assertEmpty($this->validate($field)); + } + + /** + * integer value passes validation + * not required (BaseField default) + * no mask (TextField default) + */ + public function testIntegerStringValue() + { + $field = new TextField(); + $field->setValue("1234"); + + $this->assertEmpty($this->validate($field)); + } + + /** + * literal integer passes validation, and is retreived as string + * not required (BaseField default) + * no mask (TextField default) + */ + public function testIntegerValue() + { + $field = new TextField(); + $field->setValue(1234); + + $this->assertEquals($field->getNodeData(), "1234"); + $this->assertEmpty($this->validate($field)); + } + + /** + * literal integer passes validation with regex pattern, and is retreived as string + * not required (BaseField default) + * no mask (TextField default) + */ + public function testIntegerValueWithMaskPass() + { + $field = new TextField(); + $field->setMask('/^[0-9]{4}$/'); + $field->setValue(1234); + + $this->assertEquals($field->getNodeData(), "1234"); + $this->assertEmpty($this->validate($field)); + } + + /** + * literal integer fails validation with regex pattern, and is retreived as string + * not required (BaseField default) + * no mask (TextiFled default) + */ + public function testIntegerValueWithMaskFail() + { + $field = new TextField(); + $field->setMask('/^[a-z]{4}$/'); + $field->setValue(1234); + + $this->assertEquals($field->getNodeData(), "1234"); + $this->assertContains('OPNsense\Phalcon\Filter\Validation\Validator\Regex', $this->validate($field)); + } + + /** + * non-empty value changes case UPPER + * not required (BaseField default) + * no mask (TextField default) + */ + public function testValueChangeCaseUpper() + { + $field = new TextField(); + $field->setChangeCase('UPPER'); + $field->setValue("aB cdE fgH"); + + $this->assertEquals($field->getNodeData(), "AB CDE FGH"); + } + + /** + * non-empty value changes case LOWER + * not required (BaseField default) + * no mask (TextField default) + */ + public function testValueChangeCaseLower() + { + $field = new TextField(); + $field->setChangeCase('LOWER'); + $field->setValue("aB cdE fgH"); + + $this->assertEquals($field->getNodeData(), "ab cde fgh"); + } + + /** + * non-empty value changes case UPPER + * not required (BaseField default) + * no mask (TextField default) + */ + public function testIntegerValueChangeCaseUpper() + { + $field = new TextField(); + $field->setChangeCase('UPPER'); + $field->setValue("igb0"); + + $this->assertEquals($field->getNodeData(), "IGB0"); + } + + /** + * non-empty value changes case UPPER + * not required (BaseField default) + * no mask (TextField default) + */ + public function testIntegerValueChangeCaseLower() + { + $field = new TextField(); + $field->setChangeCase('LOWER'); + $field->setValue("1024 Gigabytes"); + + $this->assertEquals($field->getNodeData(), "1024 gigabytes"); + } + + /** + * non-empty value changes case UPPER with regex mask matching after case change. + * not required (BaseField default) + */ + public function testValueChangeCaseUpperWithMaskMatch() + { + $field = new TextField(); + $field->setMask('/^[A-Z ]{10}$/'); + $field->setChangeCase('UPPER'); + $field->setValue("aB cdE fgH"); + + $this->assertEquals($field->getNodeData(), "AB CDE FGH"); + } + + /** + * non-empty value changes case LOWER with regex mask matching after case change. + * not required (BaseField default) + */ + public function testValueChangeCaseLowerWithMaskMatch() + { + $field = new TextField(); + $field->setMask('/^[a-z ]{10}$/'); + $field->setChangeCase('LOWER'); + $field->setValue("aB cdE fgH"); + + $this->assertEquals($field->getNodeData(), "ab cde fgh"); + } + + /** + * non-empty value changes case UPPER with regex mask failing after case change. + * not required (BaseField default) + */ + public function testValueChangeCaseUpperWithMaskFail() + { + $field = new TextField(); + $field->setMask('/^[a-z ]{10}$/'); + $field->setChangeCase('UPPER'); + $field->setValue("ab cde fgh"); + + $this->assertContains('OPNsense\Phalcon\Filter\Validation\Validator\Regex', $this->validate($field)); + } + + +}