diff --git a/src/common/tree/tree_node.py b/src/common/tree/tree_node.py index 942062a4a..21d7f4e63 100644 --- a/src/common/tree/tree_node.py +++ b/src/common/tree/tree_node.py @@ -46,6 +46,14 @@ def type(self): def type(self, value): # Type can be changed after initiation. e.g Multiple valid specialised types self._type = value + @property + def is_optional(self): + if not self.parent: + return True + if self.parent.is_array(): + return True + return self.attribute.is_optional + @property def blueprint(self) -> Blueprint: if self.type == BuiltinDataTypes.OBJECT.value: diff --git a/src/home/system/SIMOS/Package.json b/src/home/system/SIMOS/Package.json index 3dd91a234..95e2fcaa5 100644 --- a/src/home/system/SIMOS/Package.json +++ b/src/home/system/SIMOS/Package.json @@ -17,7 +17,7 @@ "attributeType": "object", "contained": true, "dimensions": "*", - "optional": true + "optional": false } ] } diff --git a/src/services/document_service.py b/src/services/document_service.py index dcb9eb4fc..7f289f0ee 100644 --- a/src/services/document_service.py +++ b/src/services/document_service.py @@ -227,7 +227,7 @@ def get_document(self, address: Address, depth: int = 0) -> Node | ListNode: def remove(self, address: Address) -> None: node = self.get_document(address) - if node.parent and not node.attribute.is_optional: + if node.parent and not node.is_optional: raise ValidationException("Tried to remove a required attribute") data_source = self.repository_provider(address.data_source, self.user) diff --git a/src/tests/bdd/document/remove_2.feature b/src/tests/bdd/document/remove_2.feature index 5909f4a56..46f99312d 100644 --- a/src/tests/bdd/document/remove_2.feature +++ b/src/tests/bdd/document/remove_2.feature @@ -98,6 +98,14 @@ Feature: Explorer - Remove by path } """ + Scenario: Remove item from list + Given i access the resource url "/api/documents/data-source-name/blueprints.content[1]" + When i make a "DELETE" request + Then the response status should be "OK" + Given I access the resource url "/api/documents/data-source-name/$4" + When I make a "GET" request + Then the response status should be "Not Found" + Scenario: Remove file with children Given i access the resource url "/api/documents/data-source-name/blueprints/sub_package_1" When i make a "DELETE" request diff --git a/src/tests/unit/common/utils/test_create_default_array.py b/src/tests/unit/common/utils/test_create_default_array.py index 2e5003bbc..b4a37d496 100644 --- a/src/tests/unit/common/utils/test_create_default_array.py +++ b/src/tests/unit/common/utils/test_create_default_array.py @@ -107,7 +107,7 @@ def test_creation_of_default_array_complex_type(self): empty_string_blueprint_attribute, ) - assert default_array == [[{"name": "", "type": "dmss://system/SIMOS/Package", "isRoot": False}]] + assert default_array == [[{"name": "", "type": "dmss://system/SIMOS/Package", "isRoot": False, "content": []}]] def test_creation_of_default_array_unfixed_rank2(self): default_array = create_default_array(Dimension("*,*", "integer"), blueprint_provider, CreateEntity) diff --git a/src/tests/unit/use_cases/test_reference.py b/src/tests/unit/use_cases/test_reference.py index 08bb307e0..c21a47aaa 100644 --- a/src/tests/unit/use_cases/test_reference.py +++ b/src/tests/unit/use_cases/test_reference.py @@ -276,9 +276,6 @@ def mock_update(entity: dict, *args, **kwargs): repository.get = lambda x: doc_storage[str(x)] repository.update = mock_update self.document_service.repository_provider = lambda x, y: repository - self.assertRaises( - ValidationException, self.document_service.remove, Address("$1.uncontained_in_every_way[0]", "testing") - ) def test_add_reference_in_list(self): repository = mock.Mock()