diff --git a/src/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModel/TestModel.xml b/src/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModel/TestModel.xml
index 1dadcea08..3d9d821e5 100644
--- a/src/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModel/TestModel.xml
+++ b/src/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModel/TestModel.xml
@@ -12,5 +12,15 @@
Y
+
+ -
+
+ 1
+ 65535
+ not a valid number
+ Y
+
+
+
diff --git a/src/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModelTest.php b/src/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModelTest.php
index b8d1d6370..9f5f2bb1f 100644
--- a/src/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModelTest.php
+++ b/src/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModelTest.php
@@ -29,6 +29,8 @@
namespace tests\OPNsense\Base;
+use \OPNsense\Core\Config;
+
require_once 'BaseModel/TestModel.php';
class BaseModelTest extends \PHPUnit_Framework_TestCase
@@ -67,4 +69,145 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
{
BaseModelTest::$model->general->FromEmailXXX = "test@test.nl";
}
+
+ /**
+ * @depends testGeneralAvailable
+ */
+ public function testCanAssignArrayType()
+ {
+ // purge test items (if any)
+ foreach (BaseModelTest::$model->arraytypes->item->__items as $nodeid => $node) {
+ BaseModelTest::$model->arraytypes->item->Del($nodeid);
+ }
+ // generate new items
+ for ($i = 1; $i <= 10 ; $i++) {
+ $node = BaseModelTest::$model->arraytypes->item->Add();
+ $node->number = $i;
+ }
+ // flush to disk
+ BaseModelTest::$model->serializeToConfig();
+ Config::getInstance()->save();
+
+ // load from disk
+ Config::getInstance()->forceReload();
+ BaseModelTest::$model = new BaseModel\TestModel();
+
+ // read items, logically the sequence should be the same as the generated items
+ $i = 1;
+ foreach (BaseModelTest::$model->arraytypes->item->__items as $node) {
+ $this->assertEquals($i, (string)$node->number);
+ $i++;
+ }
+ }
+
+ /**
+ * @depends testCanAssignArrayType
+ */
+ public function testCanDeleteSpecificItem()
+ {
+ foreach (BaseModelTest::$model->arraytypes->item->__items as $nodeid => $node) {
+ if ((string)$node->number == 5) {
+ BaseModelTest::$model->arraytypes->item->Del($nodeid);
+ }
+ }
+ // item with number 5 should be deleted
+ foreach (BaseModelTest::$model->arraytypes->item->__items as $nodeid => $node) {
+ $this->assertNotEquals((string)$node->number, 5);
+ }
+ // 9 items left
+ $this->assertEquals(count(BaseModelTest::$model->arraytypes->item->__items), 9);
+ }
+
+ /**
+ * @depends testCanAssignArrayType
+ */
+ public function testArrayIsKeydByUUID()
+ {
+ foreach (BaseModelTest::$model->arraytypes->item->__items as $nodeid => $node) {
+ $this->assertCount(5, explode('-', $nodeid));
+ }
+ }
+
+ /**
+ * @depends testCanAssignArrayType
+ */
+ public function testValidationOk()
+ {
+ // nothing changed, valid config
+ BaseModelTest::$model->serializeToConfig();
+ }
+
+ /**
+ * @depends testCanAssignArrayType
+ * @expectedException \Phalcon\Validation\Exception
+ * @expectedExceptionMessage not a valid number
+ */
+ public function testValidationNOK()
+ {
+ // replace all numbers
+ foreach (BaseModelTest::$model->arraytypes->item->__items as $nodeid => $node) {
+ $node->number = "XXX";
+ }
+ BaseModelTest::$model->serializeToConfig();
+ }
+
+ /**
+ * @depends testGeneralAvailable
+ */
+ public function testsetNodeByReferenceFound()
+ {
+ $this->assertEquals(BaseModelTest::$model->setNodeByReference('general.FromEmail', 'test@test.com'), true);
+ }
+
+ /**
+ * @depends testGeneralAvailable
+ */
+ public function testsetNodeByReferenceNotFound()
+ {
+ $this->assertEquals(BaseModelTest::$model->setNodeByReference('general.FromEmailxx', 'test@test.com'), false);
+ }
+
+ /**
+ * @depends testCanDeleteSpecificItem
+ */
+ public function testGenerateXML()
+ {
+ $xml = BaseModelTest::$model->toXML();
+ $this->assertInstanceOf(\SimpleXMLElement::class, $xml);
+ $this->assertNotEquals(count($xml->OPNsense), 0);
+ $this->assertNotEquals(count($xml->OPNsense->TestModel), 0);
+ $this->assertNotEquals(count($xml->OPNsense->TestModel->general), 0);
+ // expect 9 detail items at this point
+ $this->assertEquals(count($xml->OPNsense->TestModel->arraytypes->item), 9);
+ }
+
+ /**
+ * @depends testCanDeleteSpecificItem
+ */
+ public function testSetNode()
+ {
+ $data = array();
+ $i = 100;
+ foreach (BaseModelTest::$model->arraytypes->item->__items as $nodeid => $node) {
+ $data[$node->__reference] = $i;
+ $i++;
+ }
+ foreach ($data as $key => $value) {
+ $node = BaseModelTest::$model->getNodeByReference($key);
+ $node->setNodes(array('number' => $value));
+ }
+
+ foreach (BaseModelTest::$model->arraytypes->item->__items as $nodeid => $node) {
+ $this->assertGreaterThan(99, (string)$node->number);
+ }
+ }
+
+ /**
+ * @depends testCanDeleteSpecificItem
+ */
+ public function testGetNodes()
+ {
+ $data = BaseModelTest::$model->arraytypes->item->getNodes();
+ $this->assertEquals(count($data), 9);
+ }
}