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 cb40f3b47..c064137a5 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
@@ -107,5 +107,10 @@
+
+
+
+
+
diff --git a/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/ModelRelationFieldTest.php b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/ModelRelationFieldTest.php
new file mode 100644
index 000000000..13b8c52fa
--- /dev/null
+++ b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/ModelRelationFieldTest.php
@@ -0,0 +1,136 @@
+get('config')->globals->config_path = __DIR__ .'/ModelRelationFieldTest/';
+ Config::getInstance()->forceReload();
+ $model = new \tests\OPNsense\Base\BaseModel\TestModel();
+ foreach ($model->simpleList->items->iterateItems() as $nodeid => $node) {
+ echo $nodeid . " " .$node->number ."\n";
+ }
+// $item = $model->simpleList->items->Add();
+// $item->number = "1";
+// $model->serializeToConfig();
+// Config::getInstance()->save();
+ }
+
+ /**
+ * test construct
+ */
+ public function testCanBeCreated()
+ {
+ $this->assertInstanceOf('\OPNsense\Base\FieldTypes\ModelRelationField', new ModelRelationField());
+ }
+
+ public function testSetSingleOk()
+ {
+ $field = new ModelRelationField();
+ $field->setModel(array(
+ "item" => array(
+ "source" => "tests.OPNsense.Base.BaseModel.TestModel",
+ "items" => "simpleList.items",
+ "display" => "number"
+ )
+ ));
+ $field->eventPostLoading();
+ $field->setValue("5ea2a35c-b02b-485a-912b-d077e639bf9f");
+ $this->assertEmpty($this->validate($field));
+ }
+
+ public function testSetSingleNok()
+ {
+ $field = new ModelRelationField();
+ $field->setModel(array(
+ "item" => array(
+ "source" => "tests.OPNsense.Base.BaseModel.TestModel",
+ "items" => "simpleList.items",
+ "display" => "number"
+ )
+ ));
+ $field->eventPostLoading();
+ $field->setValue("XX5ea2a35c-b02b-485a-912b-d077e639bf9f");
+ $this->assertEquals($this->validate($field), ['InclusionIn']);
+ }
+
+ public function testSetMultiOk()
+ {
+ $field = new ModelRelationField();
+ $field->setMultiple("Y");
+ $field->setModel(array(
+ "item" => array(
+ "source" => "tests.OPNsense.Base.BaseModel.TestModel",
+ "items" => "simpleList.items",
+ "display" => "number"
+ )
+ ));
+ $field->eventPostLoading();
+ $field->setValue("4d0e2835-7a19-4a19-8c23-e12383827594,5ea2a35c-b02b-485a-912b-d077e639bf9f");
+ $this->assertEmpty($this->validate($field));
+ }
+
+ public function testSetMultiNok()
+ {
+ $field = new ModelRelationField();
+ $field->setMultiple("Y");
+ $field->setModel(array(
+ "item" => array(
+ "source" => "tests.OPNsense.Base.BaseModel.TestModel",
+ "items" => "simpleList.items",
+ "display" => "number"
+ )
+ ));
+ $field->eventPostLoading();
+ $field->setValue("x4d0e2835-7a19-4a19-8c23-e12383827594,5ea2a35c-b02b-485a-912b-d077e639bf9f");
+ $this->assertEquals($this->validate($field), ['CsvListValidator']);
+ }
+
+
+ /**
+ * type is not a container
+ */
+ public function testIsContainer()
+ {
+ $field = new ModelRelationField();
+ $this->assertFalse($field->isContainer());
+ }
+}
diff --git a/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/ModelRelationFieldTest/config.xml b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/ModelRelationFieldTest/config.xml
new file mode 100644
index 000000000..f770f319d
--- /dev/null
+++ b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/ModelRelationFieldTest/config.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+ sample@example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ 4
+
+
+ 5
+
+
+ 6
+
+
+
+
+
+