diff --git a/src/Model/Common/JsonObject.php b/src/Model/Common/JsonObject.php index 11f4aeb9e7..5cf4d5d824 100644 --- a/src/Model/Common/JsonObject.php +++ b/src/Model/Common/JsonObject.php @@ -50,7 +50,7 @@ public function __call($method, $arguments) $action = substr($method, 0, 3); $field = lcfirst(substr($method, 3)); - if (!$this->hasField($field)) { + if (!$this->isValidField($field)) { if ($action == 'get' || $action == 'set') { throw new \BadMethodCallException( sprintf(Message::UNKNOWN_FIELD, $field, $method, implode(', ', $arguments)) @@ -72,7 +72,7 @@ public function __call($method, $arguments) public function __get($field) { - if (!$this->hasField($field)) { + if (!$this->isValidField($field)) { throw new \BadMethodCallException( sprintf(Message::UNKNOWN_FIELD, $field, 'get', $field) ); @@ -80,12 +80,21 @@ public function __get($field) return $this->get($field); } + /** + * @param $field + * @return bool + */ + public function hasField($field) + { + return isset($this->typeData[$field]); + } + /** * @param string $field * @return bool * @internal */ - protected function hasField($field) + protected function isValidField($field) { if (isset($this->fieldDefinitions()[$field])) { return true; diff --git a/src/Model/CustomField/FieldContainer.php b/src/Model/CustomField/FieldContainer.php index ed0ecb7f38..e730cb25d7 100644 --- a/src/Model/CustomField/FieldContainer.php +++ b/src/Model/CustomField/FieldContainer.php @@ -57,7 +57,7 @@ public function set($field, $value) return parent::set($field, $value); } - public function hasField($field) + protected function isValidField($field) { return true; } diff --git a/tests/unit/Model/Common/JsonObjectTest.php b/tests/unit/Model/Common/JsonObjectTest.php index 01652a17a5..e3dd2c04ad 100644 --- a/tests/unit/Model/Common/JsonObjectTest.php +++ b/tests/unit/Model/Common/JsonObjectTest.php @@ -251,4 +251,18 @@ public function testOptional() $this->assertTrue($obj->isOptional('optional')); $this->assertFalse($obj->isOptional('required')); } + + public function testHasField() + { + $obj = JsonObject::fromArray(['test' => 1234]); + + $this->assertTrue($obj->hasField('test')); + } + + public function testNotHasField() + { + $obj = JsonObject::fromArray([]); + + $this->assertFalse($obj->hasField('test')); + } } diff --git a/tests/unit/Model/CustomField/CustomFieldObjectTest.php b/tests/unit/Model/CustomField/CustomFieldObjectTest.php index 9e2d12e0bf..ff6ca6e4ba 100644 --- a/tests/unit/Model/CustomField/CustomFieldObjectTest.php +++ b/tests/unit/Model/CustomField/CustomFieldObjectTest.php @@ -159,4 +159,14 @@ public function testData($dataArray, $type, $elementType = null) } $this->assertJsonStringEqualsJsonString(json_encode($value), json_encode($field)); } + + + public function testHasField() + { + $container = FieldContainer::of(); + $this->assertFalse($container->hasField('test')); + + $container->set('test', 1234); + $this->assertTrue($container->hasField('test')); + } }