From 521e25d41f49373ecb2d21c82d85c7ae520fc47b Mon Sep 17 00:00:00 2001 From: Benoit Orihuela Date: Mon, 13 Oct 2025 09:04:06 +0200 Subject: [PATCH] feat(pick-omit): add TCs for Subscriptions --- .../Entity/QueryEntities/019_17.robot | 3 +- .../021_21.robot | 2 +- .../CreateSubscription/028_08.robot | 38 ++++++++++++++++ .../046_42.robot | 43 +++++++++++++++++++ .../046_43.robot | 43 +++++++++++++++++++ ...fferent-attributes-types-omit-members.json | 26 +++++++++++ ...fferent-attributes-types-pick-members.json | 9 ++++ ...tion-building-entities-omit-members.jsonld | 22 ++++++++++ ...tion-building-entities-pick-members.jsonld | 22 ++++++++++ ...scription-invalid-omit-and-attributes.json | 17 ++++++++ ...scription-invalid-pick-and-attributes.json | 17 ++++++++ ...ription-invalid-same-member-pick-omit.json | 17 ++++++++ .../test_ContextInformation_Subscription.py | 21 +++++++++ 13 files changed, 278 insertions(+), 2 deletions(-) create mode 100644 TP/NGSI-LD/ContextInformation/Subscription/CreateSubscription/028_08.robot create mode 100644 TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_42.robot create mode 100644 TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_43.robot create mode 100644 data/subscriptions/expectations/pick-omit/entity-different-attributes-types-omit-members.json create mode 100644 data/subscriptions/expectations/pick-omit/entity-different-attributes-types-pick-members.json create mode 100644 data/subscriptions/subscription-building-entities-omit-members.jsonld create mode 100644 data/subscriptions/subscription-building-entities-pick-members.jsonld create mode 100644 data/subscriptions/subscription-invalid-omit-and-attributes.json create mode 100644 data/subscriptions/subscription-invalid-pick-and-attributes.json create mode 100644 data/subscriptions/subscription-invalid-same-member-pick-omit.json diff --git a/TP/NGSI-LD/ContextInformation/Consumption/Entity/QueryEntities/019_17.robot b/TP/NGSI-LD/ContextInformation/Consumption/Entity/QueryEntities/019_17.robot index c4f4ef1c..daf9cc93 100644 --- a/TP/NGSI-LD/ContextInformation/Consumption/Entity/QueryEntities/019_17.robot +++ b/TP/NGSI-LD/ContextInformation/Consumption/Entity/QueryEntities/019_17.robot @@ -51,7 +51,8 @@ Query Entities With Pick Or Omit Query Params ... context=${ngsild_test_suite_context} Check Response Status Code 200 ${response.status_code} - Check Response Body Content ${expectation_filename} ${response.json()} + # ignore order since responses do not all have an id member + Check Response Body Content ${expectation_filename} ${response.json()} ignore_order=True Setup Initial Entities ${first_entity_id}= Catenate ${BUILDING_ID_PREFIX}019-17-1 diff --git a/TP/NGSI-LD/ContextInformation/Consumption/TemporalEntity/QueryTemporalEvolutionOfEntities/021_21.robot b/TP/NGSI-LD/ContextInformation/Consumption/TemporalEntity/QueryTemporalEvolutionOfEntities/021_21.robot index 4f846b0a..f6de5898 100644 --- a/TP/NGSI-LD/ContextInformation/Consumption/TemporalEntity/QueryTemporalEvolutionOfEntities/021_21.robot +++ b/TP/NGSI-LD/ContextInformation/Consumption/TemporalEntity/QueryTemporalEvolutionOfEntities/021_21.robot @@ -51,7 +51,7 @@ Query Temporal Evolution Of Entities With Pick Or Omit Query Params [Arguments] ${pick} ${omit} ${expected_filename} ${group_by}=id ${response}= Query Temporal Representation Of Entities - ... entity_types=Building,Vehicle + ... entity_types=Bus,Vehicle ... timerel=after ... timeAt=1970-01-01T00:00:00Z ... pick=${pick} diff --git a/TP/NGSI-LD/ContextInformation/Subscription/CreateSubscription/028_08.robot b/TP/NGSI-LD/ContextInformation/Subscription/CreateSubscription/028_08.robot new file mode 100644 index 00000000..509ee67c --- /dev/null +++ b/TP/NGSI-LD/ContextInformation/Subscription/CreateSubscription/028_08.robot @@ -0,0 +1,38 @@ +*** Settings *** +Documentation Check that one cannot create a subscription with invalid pick / omit / attrs parameters + +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationSubscription.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/JsonUtils.resource + +Test Template Create Subscription With Invalid Pick Omit Attrs Parameters + + +*** Test Cases *** FILE_NAME +028_08_01 Subscription With Same Entity Member In Pick And Omit + [Tags] sub-create 5_8_1 4_21 since_v1.8.1 + subscriptions/subscription-invalid-same-member-pick-omit.json +028_08_02 Subscription With Pick And Attrs + [Tags] sub-create 5_8_1 4_21 since_v1.8.1 + subscriptions/subscription-invalid-pick-and-attributes.json +028_08_03 Subscription With Omit And Attrs + [Tags] sub-create 5_8_1 4_21 since_v1.8.1 + subscriptions/subscription-invalid-omit-and-attributes.json + + +*** Keywords *** +Create Subscription With Invalid Pick Omit Attrs Parameters + [Documentation] Check that one cannot create a subscription with with invalid pick / omit / attrs parameters + [Arguments] ${file_name} + ${subscription_id}= Generate Random Subscription Id + Set Suite Variable ${subscription_id} + ${response}= Create Subscription + ... ${subscription_id} + ... ${file_name} + ... ${CONTENT_TYPE_JSON} + ... context=${ngsild_test_suite_context} + Check Response Status Code 400 ${response.status_code} + Check Response Body Containing ProblemDetails Element Containing Type Element set to + ... ${response.json()} + ... ${ERROR_TYPE_BAD_REQUEST_DATA} + Check Response Body Containing ProblemDetails Element Containing Title Element ${response.json()} diff --git a/TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_42.robot b/TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_42.robot new file mode 100644 index 00000000..fcf74922 --- /dev/null +++ b/TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_42.robot @@ -0,0 +1,43 @@ +*** Settings *** +Documentation Check that the notification contains only the entity members specified in the pick parameter + +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationSubscription.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationProvision.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/NotificationUtils.resource +Resource ${EXECDIR}/resources/SubscriptionUtils.resource + +Test Setup Create Initial Subscription And Entity +Test Teardown Delete Initial Subscription And Entity + + +*** Variables *** +${subscription_payload_file_path}= subscriptions/subscription-building-entities-pick-members.jsonld +${building_filename}= building-different-attributes-types.jsonld + + +*** Test Cases *** +046_42_01 Update Attribute And Check Entity Members In Notification + [Documentation] Update an attribute and check the notification contains entity members specified in the pick parameter + [Tags] sub-notification 5_8_6 4_21 since_v1.8.1 + + ${response}= Update Entity Attributes ${entity_id} name-fragment.jsonld ${CONTENT_TYPE_LD_JSON} + Check Response Status Code 204 ${response.status_code} + + ${notification} ${headers}= Wait for notification timeout=${10} + + Should be Equal ${subscription_id} ${notification}[subscriptionId] + Check Notification Containing Entities Elements + ... pick-omit/entity-different-attributes-types-pick-members.json + ... ${notification} + + +*** Keywords *** +Create Initial Subscription And Entity + Create Subscription And Entity ${subscription_payload_file_path} ${building_filename} 046_42 + Start Local Server ${notification_server_host} ${notification_server_port} + +Delete Initial Subscription And Entity + Delete Subscription ${subscription_id} + Delete Entity ${entity_id} + Stop Local Server diff --git a/TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_43.robot b/TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_43.robot new file mode 100644 index 00000000..51073d5e --- /dev/null +++ b/TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_43.robot @@ -0,0 +1,43 @@ +*** Settings *** +Documentation Check that the notification does not contain the entity members specified in the omit parameter + +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationSubscription.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationProvision.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/NotificationUtils.resource +Resource ${EXECDIR}/resources/SubscriptionUtils.resource + +Test Setup Create Initial Subscription And Entity +Test Teardown Delete Initial Subscription And Entity + + +*** Variables *** +${subscription_payload_file_path}= subscriptions/subscription-building-entities-omit-members.jsonld +${building_filename}= building-different-attributes-types.jsonld + + +*** Test Cases *** +046_43_01 Update Attribute And Check Entity Members In Notification + [Documentation] Update an attribute and check the notification does not contain entity members specified in the omit parameter + [Tags] sub-notification 5_8_6 4_21 since_v1.8.1 + + ${response}= Update Entity Attributes ${entity_id} name-fragment.jsonld ${CONTENT_TYPE_LD_JSON} + Check Response Status Code 204 ${response.status_code} + + ${notification} ${headers}= Wait for notification timeout=${10} + + Should be Equal ${subscription_id} ${notification}[subscriptionId] + Check Notification Containing Entities Elements + ... pick-omit/entity-different-attributes-types-omit-members.json + ... ${notification} + + +*** Keywords *** +Create Initial Subscription And Entity + Create Subscription And Entity ${subscription_payload_file_path} ${building_filename} 046_43 + Start Local Server ${notification_server_host} ${notification_server_port} + +Delete Initial Subscription And Entity + Delete Subscription ${subscription_id} + Delete Entity ${entity_id} + Stop Local Server diff --git a/data/subscriptions/expectations/pick-omit/entity-different-attributes-types-omit-members.json b/data/subscriptions/expectations/pick-omit/entity-different-attributes-types-omit-members.json new file mode 100644 index 00000000..118d7156 --- /dev/null +++ b/data/subscriptions/expectations/pick-omit/entity-different-attributes-types-omit-members.json @@ -0,0 +1,26 @@ +[ + { + "id": "urn:ngsi-ld:Building:046_43", + "locatedAt": { + "type": "Relationship", + "object": "urn:ngsi-ld:City:Paris" + }, + "location": { + "type": "GeoProperty", + "value": { + "type": "Point", + "coordinates": [ + -8.5, + 41.2 + ] + } + }, + "street": { + "type": "LanguageProperty", + "languageMap": { + "fr": "Grand Place", + "nl": "Grote Markt" + } + } + } +] \ No newline at end of file diff --git a/data/subscriptions/expectations/pick-omit/entity-different-attributes-types-pick-members.json b/data/subscriptions/expectations/pick-omit/entity-different-attributes-types-pick-members.json new file mode 100644 index 00000000..bd20011f --- /dev/null +++ b/data/subscriptions/expectations/pick-omit/entity-different-attributes-types-pick-members.json @@ -0,0 +1,9 @@ +[ + { + "id": "urn:ngsi-ld:Building:046_42", + "name": { + "type": "Property", + "value": "Tour Eiffel" + } + } +] \ No newline at end of file diff --git a/data/subscriptions/subscription-building-entities-omit-members.jsonld b/data/subscriptions/subscription-building-entities-omit-members.jsonld new file mode 100644 index 00000000..295351d5 --- /dev/null +++ b/data/subscriptions/subscription-building-entities-omit-members.jsonld @@ -0,0 +1,22 @@ +{ + "id": "urn:ngsi-ld:Subscription:randomUUID", + "type": "Subscription", + "entities": [ + { + "type": "Building" + } + ], + "notification": { + "endpoint": { + "uri": "http://my.endpoint.org/notify", + "accept": "application/json" + }, + "omit": [ + "type", + "name" + ] + }, + "@context": [ + "https://easy-global-market.github.io/ngsild-api-data-models/ngsildTestSuite/ngsildTestSuiteV1.8-compound.jsonld" + ] +} \ No newline at end of file diff --git a/data/subscriptions/subscription-building-entities-pick-members.jsonld b/data/subscriptions/subscription-building-entities-pick-members.jsonld new file mode 100644 index 00000000..adcb3f10 --- /dev/null +++ b/data/subscriptions/subscription-building-entities-pick-members.jsonld @@ -0,0 +1,22 @@ +{ + "id": "urn:ngsi-ld:Subscription:randomUUID", + "type": "Subscription", + "entities": [ + { + "type": "Building" + } + ], + "notification": { + "endpoint": { + "uri": "http://my.endpoint.org/notify", + "accept": "application/json" + }, + "pick": [ + "id", + "name" + ] + }, + "@context": [ + "https://easy-global-market.github.io/ngsild-api-data-models/ngsildTestSuite/ngsildTestSuiteV1.8-compound.jsonld" + ] +} \ No newline at end of file diff --git a/data/subscriptions/subscription-invalid-omit-and-attributes.json b/data/subscriptions/subscription-invalid-omit-and-attributes.json new file mode 100644 index 00000000..aa968a9e --- /dev/null +++ b/data/subscriptions/subscription-invalid-omit-and-attributes.json @@ -0,0 +1,17 @@ +{ + "id": "urn:ngsi-ld:Subscription:randomUUID", + "type": "Subscription", + "entities": [ + { + "type": "Building" + } + ], + "notification": { + "endpoint": { + "uri": "http://my.endpoint.org/notify", + "accept": "application/json" + }, + "omit": ["id"], + "attributes": ["id"] + } +} \ No newline at end of file diff --git a/data/subscriptions/subscription-invalid-pick-and-attributes.json b/data/subscriptions/subscription-invalid-pick-and-attributes.json new file mode 100644 index 00000000..d25ca830 --- /dev/null +++ b/data/subscriptions/subscription-invalid-pick-and-attributes.json @@ -0,0 +1,17 @@ +{ + "id": "urn:ngsi-ld:Subscription:randomUUID", + "type": "Subscription", + "entities": [ + { + "type": "Building" + } + ], + "notification": { + "endpoint": { + "uri": "http://my.endpoint.org/notify", + "accept": "application/json" + }, + "pick": ["id"], + "attributes": ["id"] + } +} \ No newline at end of file diff --git a/data/subscriptions/subscription-invalid-same-member-pick-omit.json b/data/subscriptions/subscription-invalid-same-member-pick-omit.json new file mode 100644 index 00000000..64bbdad5 --- /dev/null +++ b/data/subscriptions/subscription-invalid-same-member-pick-omit.json @@ -0,0 +1,17 @@ +{ + "id": "urn:ngsi-ld:Subscription:randomUUID", + "type": "Subscription", + "entities": [ + { + "type": "Building" + } + ], + "notification": { + "endpoint": { + "uri": "http://my.endpoint.org/notify", + "accept": "application/json" + }, + "pick": ["id"], + "omit": ["id"] + } +} \ No newline at end of file diff --git a/doc/tests/test_ContextInformation_Subscription.py b/doc/tests/test_ContextInformation_Subscription.py index d16a9f9b..16a647d7 100644 --- a/doc/tests/test_ContextInformation_Subscription.py +++ b/doc/tests/test_ContextInformation_Subscription.py @@ -91,6 +91,13 @@ class TestCISubscription(TestCase): self.common_function(robot_file=robot_file, expected_value=expected_value, difference_file=difference_file) + def test_028_08(self): + robot_file = f'{self.folder_test_suites}/TP/NGSI-LD/ContextInformation/Subscription/CreateSubscription/028_08.robot' + expected_value = f'{self.folder_test_suites}/doc/files/ContextInformation/Subscription/028_08.json' + difference_file = f'{self.folder_test_suites}/doc/results/out_028_08.json' + + self.common_function(robot_file=robot_file, expected_value=expected_value, difference_file=difference_file) + def test_032_01(self): robot_file = f'{self.folder_test_suites}/TP/NGSI-LD/ContextInformation/Subscription/DeleteSubscription/032_01.robot' expected_value = f'{self.folder_test_suites}/doc/files/ContextInformation/Subscription/032_01.json' @@ -495,6 +502,20 @@ class TestCISubscription(TestCase): self.common_function(robot_file=robot_file, expected_value=expected_value, difference_file=difference_file) + def test_046_42(self): + robot_file = f'{self.folder_test_suites}/TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_42.robot' + expected_value = f'{self.folder_test_suites}/doc/files/ContextInformation/Subscription/046_42.json' + difference_file = f'{self.folder_test_suites}/doc/results/out_046_42.json' + + self.common_function(robot_file=robot_file, expected_value=expected_value, difference_file=difference_file) + + def test_046_43(self): + robot_file = f'{self.folder_test_suites}/TP/NGSI-LD/ContextInformation/Subscription/SubscriptionNotificationBehaviour/046_43.robot' + expected_value = f'{self.folder_test_suites}/doc/files/ContextInformation/Subscription/046_43.json' + difference_file = f'{self.folder_test_suites}/doc/results/out_046_43.json' + + self.common_function(robot_file=robot_file, expected_value=expected_value, difference_file=difference_file) + def test_031_01(self): robot_file = f'{self.folder_test_suites}/TP/NGSI-LD/ContextInformation/Subscription/QuerySubscriptions/031_01.robot' expected_value = f'{self.folder_test_suites}/doc/files/ContextInformation/Subscription/031_01.json' -- GitLab