From 73dc4ea0f7eb702acea45c5e5bd193334f0ac501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20M=C3=B6ller?= Date: Sat, 4 Nov 2023 18:20:53 +0100 Subject: [PATCH] test.model: add `AssetInformation` tests and improve `Entity` tests --- test/model/test_aas.py | 86 +++++++++++++++++++++ test/model/test_submodel.py | 147 ++++++++++++++++++++++++++++++------ 2 files changed, 209 insertions(+), 24 deletions(-) create mode 100644 test/model/test_aas.py diff --git a/test/model/test_aas.py b/test/model/test_aas.py new file mode 100644 index 000000000..27ce13b4d --- /dev/null +++ b/test/model/test_aas.py @@ -0,0 +1,86 @@ +# Copyright (c) 2023 the Eclipse BaSyx Authors +# +# This program and the accompanying materials are made available under the terms of the MIT License, available in +# the LICENSE file of this project. +# +# SPDX-License-Identifier: MIT + +import unittest + +from basyx.aas import model + + +class AssetInformationTest(unittest.TestCase): + def test_aasd_131_init(self) -> None: + with self.assertRaises(model.AASConstraintViolation) as cm: + model.AssetInformation(model.AssetKind.INSTANCE) + self.assertEqual("An AssetInformation has to have a globalAssetId or a specificAssetId (Constraint AASd-131)", + str(cm.exception)) + model.AssetInformation(model.AssetKind.INSTANCE, global_asset_id="https://acplt.org/TestAsset") + model.AssetInformation(model.AssetKind.INSTANCE, specific_asset_id=(model.SpecificAssetId("test", "test"),)) + model.AssetInformation(model.AssetKind.INSTANCE, global_asset_id="https://acplt.org/TestAsset", + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + + def test_aasd_131_set(self) -> None: + asset_information = model.AssetInformation(model.AssetKind.INSTANCE, + global_asset_id="https://acplt.org/TestAsset", + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + asset_information.global_asset_id = None + with self.assertRaises(model.AASConstraintViolation) as cm: + asset_information.specific_asset_id = model.ConstrainedList(()) + self.assertEqual("An AssetInformation has to have a globalAssetId or a specificAssetId (Constraint AASd-131)", + str(cm.exception)) + + asset_information = model.AssetInformation(model.AssetKind.INSTANCE, + global_asset_id="https://acplt.org/TestAsset", + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + asset_information.specific_asset_id = model.ConstrainedList(()) + with self.assertRaises(model.AASConstraintViolation) as cm: + asset_information.global_asset_id = None + self.assertEqual("An AssetInformation has to have a globalAssetId or a specificAssetId (Constraint AASd-131)", + str(cm.exception)) + + def test_aasd_131_specific_asset_id_add(self) -> None: + asset_information = model.AssetInformation(model.AssetKind.INSTANCE, + global_asset_id="https://acplt.org/TestAsset") + specific_asset_id1 = model.SpecificAssetId("test", "test") + specific_asset_id2 = model.SpecificAssetId("test", "test") + asset_information.specific_asset_id.append(specific_asset_id1) + asset_information.specific_asset_id.extend((specific_asset_id2,)) + self.assertIs(asset_information.specific_asset_id[0], specific_asset_id1) + self.assertIs(asset_information.specific_asset_id[1], specific_asset_id2) + + def test_aasd_131_specific_asset_id_set(self) -> None: + asset_information = model.AssetInformation(model.AssetKind.INSTANCE, + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + with self.assertRaises(model.AASConstraintViolation) as cm: + asset_information.specific_asset_id[:] = () + self.assertEqual("An AssetInformation has to have a globalAssetId or a specificAssetId (Constraint AASd-131)", + str(cm.exception)) + specific_asset_id = model.SpecificAssetId("test", "test") + self.assertIsNot(asset_information.specific_asset_id[0], specific_asset_id) + asset_information.specific_asset_id[:] = (specific_asset_id,) + self.assertIs(asset_information.specific_asset_id[0], specific_asset_id) + asset_information.specific_asset_id[0] = model.SpecificAssetId("test", "test") + self.assertIsNot(asset_information.specific_asset_id[0], specific_asset_id) + + def test_aasd_131_specific_asset_id_del(self) -> None: + specific_asset_id = model.SpecificAssetId("test", "test") + asset_information = model.AssetInformation(model.AssetKind.INSTANCE, + specific_asset_id=(model.SpecificAssetId("test1", "test1"), + specific_asset_id)) + with self.assertRaises(model.AASConstraintViolation) as cm: + del asset_information.specific_asset_id[:] + self.assertEqual("An AssetInformation has to have a globalAssetId or a specificAssetId (Constraint AASd-131)", + str(cm.exception)) + with self.assertRaises(model.AASConstraintViolation) as cm: + asset_information.specific_asset_id.clear() + self.assertEqual("An AssetInformation has to have a globalAssetId or a specificAssetId (Constraint AASd-131)", + str(cm.exception)) + self.assertIsNot(asset_information.specific_asset_id[0], specific_asset_id) + del asset_information.specific_asset_id[0] + self.assertIs(asset_information.specific_asset_id[0], specific_asset_id) + with self.assertRaises(model.AASConstraintViolation) as cm: + del asset_information.specific_asset_id[0] + self.assertEqual("An AssetInformation has to have a globalAssetId or a specificAssetId (Constraint AASd-131)", + str(cm.exception)) diff --git a/test/model/test_submodel.py b/test/model/test_submodel.py index bbd672257..74c12328d 100644 --- a/test/model/test_submodel.py +++ b/test/model/test_submodel.py @@ -12,34 +12,133 @@ class EntityTest(unittest.TestCase): + def test_aasd_014_init_self_managed(self) -> None: + with self.assertRaises(model.AASConstraintViolation) as cm: + model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY) + self.assertEqual("A self-managed entity has to have a globalAssetId or a specificAssetId (Constraint AASd-014)", + str(cm.exception)) + model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY, global_asset_id="https://acplt.org/TestAsset") + model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY, + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY, global_asset_id="https://acplt.org/TestAsset", + specific_asset_id=(model.SpecificAssetId("test", "test"),)) - def test_set_entity(self): + def test_aasd_014_init_co_managed(self) -> None: + model.Entity("TestEntity", model.EntityType.CO_MANAGED_ENTITY) with self.assertRaises(model.AASConstraintViolation) as cm: - obj = model.Entity(id_short='Test', entity_type=model.EntityType.SELF_MANAGED_ENTITY, statement=()) - self.assertIn( - 'A self-managed entity has to have a globalAssetId or a specificAssetId', - str(cm.exception) - ) + model.Entity("TestEntity", model.EntityType.CO_MANAGED_ENTITY, + global_asset_id="https://acplt.org/TestAsset") + self.assertEqual("A co-managed entity has to have neither a globalAssetId nor a specificAssetId " + "(Constraint AASd-014)", str(cm.exception)) with self.assertRaises(model.AASConstraintViolation) as cm: - obj2 = model.Entity(id_short='Test', entity_type=model.EntityType.CO_MANAGED_ENTITY, - global_asset_id='http://acplt.org/TestAsset/', - statement=()) - self.assertIn( - 'A co-managed entity has to have neither a globalAssetId nor a specificAssetId', - str(cm.exception) - ) + model.Entity("TestEntity", model.EntityType.CO_MANAGED_ENTITY, + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + self.assertEqual("A co-managed entity has to have neither a globalAssetId nor a specificAssetId " + "(Constraint AASd-014)", str(cm.exception)) + with self.assertRaises(model.AASConstraintViolation) as cm: + model.Entity("TestEntity", model.EntityType.CO_MANAGED_ENTITY, + global_asset_id="https://acplt.org/TestAsset", + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + self.assertEqual("A co-managed entity has to have neither a globalAssetId nor a specificAssetId " + "(Constraint AASd-014)", str(cm.exception)) + + def test_aasd_014_set_self_managed(self) -> None: + entity = model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY, + global_asset_id="https://acplt.org/TestAsset", + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + entity.global_asset_id = None + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.specific_asset_id = model.ConstrainedList(()) + self.assertEqual("A self-managed entity has to have a globalAssetId or a specificAssetId (Constraint AASd-014)", + str(cm.exception)) + + entity = model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY, + global_asset_id="https://acplt.org/TestAsset", + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + entity.specific_asset_id = model.ConstrainedList(()) + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.global_asset_id = None + self.assertEqual("A self-managed entity has to have a globalAssetId or a specificAssetId (Constraint AASd-014)", + str(cm.exception)) + + def test_aasd_014_set_co_managed(self) -> None: + entity = model.Entity("TestEntity", model.EntityType.CO_MANAGED_ENTITY) + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.global_asset_id = "https://acplt.org/TestAsset" + self.assertEqual("A co-managed entity has to have neither a globalAssetId nor a specificAssetId " + "(Constraint AASd-014)", str(cm.exception)) + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.specific_asset_id = model.ConstrainedList((model.SpecificAssetId("test", "test"),)) + self.assertEqual("A co-managed entity has to have neither a globalAssetId nor a specificAssetId " + "(Constraint AASd-014)", str(cm.exception)) + + def test_aasd_014_specific_asset_id_add_self_managed(self) -> None: + entity = model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY, + global_asset_id="https://acplt.org/TestAsset") + specific_asset_id1 = model.SpecificAssetId("test", "test") + specific_asset_id2 = model.SpecificAssetId("test", "test") + entity.specific_asset_id.append(specific_asset_id1) + entity.specific_asset_id.extend((specific_asset_id2,)) + self.assertIs(entity.specific_asset_id[0], specific_asset_id1) + self.assertIs(entity.specific_asset_id[1], specific_asset_id2) + + def test_aasd_014_specific_asset_id_add_co_managed(self) -> None: + entity = model.Entity("TestEntity", model.EntityType.CO_MANAGED_ENTITY) + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.specific_asset_id.append(model.SpecificAssetId("test", "test")) + self.assertEqual("A co-managed entity has to have neither a globalAssetId nor a specificAssetId " + "(Constraint AASd-014)", str(cm.exception)) + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.specific_asset_id.extend((model.SpecificAssetId("test", "test"),)) + self.assertEqual("A co-managed entity has to have neither a globalAssetId nor a specificAssetId " + "(Constraint AASd-014)", str(cm.exception)) + + def test_assd_014_specific_asset_id_set_self_managed(self) -> None: + entity = model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY, + specific_asset_id=(model.SpecificAssetId("test", "test"),)) + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.specific_asset_id[:] = () + self.assertEqual("A self-managed entity has to have a globalAssetId or a specificAssetId (Constraint AASd-014)", + str(cm.exception)) + specific_asset_id = model.SpecificAssetId("test", "test") + self.assertIsNot(entity.specific_asset_id[0], specific_asset_id) + entity.specific_asset_id[:] = (specific_asset_id,) + self.assertIs(entity.specific_asset_id[0], specific_asset_id) + entity.specific_asset_id[0] = model.SpecificAssetId("test", "test") + self.assertIsNot(entity.specific_asset_id[0], specific_asset_id) + + def test_assd_014_specific_asset_id_set_co_managed(self) -> None: + entity = model.Entity("TestEntity", model.EntityType.CO_MANAGED_ENTITY) + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.specific_asset_id[:] = (model.SpecificAssetId("test", "test"),) + self.assertEqual("A co-managed entity has to have neither a globalAssetId nor a specificAssetId " + "(Constraint AASd-014)", str(cm.exception)) + entity.specific_asset_id[:] = () + + def test_aasd_014_specific_asset_id_del_self_managed(self) -> None: + specific_asset_id = model.SpecificAssetId("test", "test") + entity = model.Entity("TestEntity", model.EntityType.SELF_MANAGED_ENTITY, + specific_asset_id=(model.SpecificAssetId("test", "test"), + specific_asset_id)) + with self.assertRaises(model.AASConstraintViolation) as cm: + del entity.specific_asset_id[:] + self.assertEqual("A self-managed entity has to have a globalAssetId or a specificAssetId (Constraint AASd-014)", + str(cm.exception)) + with self.assertRaises(model.AASConstraintViolation) as cm: + entity.specific_asset_id.clear() + self.assertEqual("A self-managed entity has to have a globalAssetId or a specificAssetId (Constraint AASd-014)", + str(cm.exception)) + self.assertIsNot(entity.specific_asset_id[0], specific_asset_id) + del entity.specific_asset_id[0] + self.assertIs(entity.specific_asset_id[0], specific_asset_id) + with self.assertRaises(model.AASConstraintViolation) as cm: + del entity.specific_asset_id[0] + self.assertEqual("A self-managed entity has to have a globalAssetId or a specificAssetId (Constraint AASd-014)", + str(cm.exception)) - specific_asset_id = {model.SpecificAssetId(name="TestKey", - value="TestValue", - external_subject_id=model.ExternalReference((model.Key( - type_=model.KeyTypes.GLOBAL_REFERENCE, - value='http://acplt.org/SpecificAssetId/'),)))} - with self.assertRaises(model.AASConstraintViolation) as cm: - obj3 = model.Entity(id_short='Test', entity_type=model.EntityType.CO_MANAGED_ENTITY, - specific_asset_id=specific_asset_id, statement=()) - self.assertIn( - 'A co-managed entity has to have neither a globalAssetId nor a specificAssetId', - str(cm.exception)) + def test_aasd_014_specific_asset_id_del_co_managed(self) -> None: + entity = model.Entity("TestEntity", model.EntityType.CO_MANAGED_ENTITY) + del entity.specific_asset_id[:] class PropertyTest(unittest.TestCase):