From 6d0b078145af5b8a497e245bb6f9e28561d207f1 Mon Sep 17 00:00:00 2001 From: Houcem Kacem Date: Thu, 4 Feb 2021 12:14:35 +0100 Subject: [PATCH] feat: add tps for query context source registration subscription --- .../035_01.robot | 42 +++++++++++++++ .../035_02.robot | 54 +++++++++++++++++++ .../035_03.robot | 54 +++++++++++++++++++ .../035_04.robot | 25 +++++++++ .../subscriptions-035-01-expectation.json | 40 ++++++++++++++ resources/ApiUtils.resource | 15 ++++++ resources/AssertionUtils.resource | 34 ++++++++++++ 7 files changed, 264 insertions(+) create mode 100644 TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_01.robot create mode 100644 TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_02.robot create mode 100644 TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_03.robot create mode 100644 TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_04.robot create mode 100644 data/csourceSubscriptions/expectations/subscriptions-035-01-expectation.json diff --git a/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_01.robot b/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_01.robot new file mode 100644 index 00000000..2c2d24c3 --- /dev/null +++ b/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_01.robot @@ -0,0 +1,42 @@ +*** Settings *** +Documentation Check that you can query context source registration subscriptions +Resource ${EXECDIR}/resources/ApiUtils.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/JsonUtils.resource + +Suite Setup Setup Initial Context Source Registration Subscriptions +Suite Teardown Delete Created Context Source Registration Subscriptions + +*** Variable *** +${subscription_id_prefix}= urn:ngsi-ld:Subscription: +${first_subscription_payload_file_path}= csourceSubscriptions/subscription-sample.jsonld +${second_subscription_payload_file_path}= csourceSubscriptions/subscription-watchedAttributes-sample.jsonld +${expectation_file_path}= csourceSubscriptions/expectations/subscriptions-035-01-expectation.json + +*** Test Case *** +Query Context Source Registration Subscriptions + [Documentation] Check that you can query context source registration subscriptions + [Tags] mandatory + + Query Context Source Registration Subscriptions context=${ngsild_test_suite_context} + + @{subscription_ids}= Create List ${first_subscription_id} ${second_subscription_id} + Check Response Status Code Set To 200 + Check Response Body Containing List Containing Subscription elements ${expectation_file_path} ${subscription_ids} + +*** Keywords *** +Setup Initial Context Source Registration Subscriptions + ${first_subscription_id}= Generate Random Entity Id ${subscription_id_prefix} + ${second_subscription_id}= Generate Random Entity Id ${subscription_id_prefix} + ${first_subscription_payload}= Load Test Sample ${first_subscription_payload_file_path} ${first_subscription_id} + ${second_subscription_payload}= Load Test Sample ${second_subscription_payload_file_path} ${second_subscription_id} + + Create Context Source Registration Subscription ${first_subscription_payload} + Create Context Source Registration Subscription ${second_subscription_payload} + + Set Suite Variable ${first_subscription_id} + Set Suite Variable ${second_subscription_id} + +Delete Created Context Source Registration Subscriptions + Delete Context Source Registration Subscription ${first_subscription_id} + Delete Context Source Registration Subscription ${second_subscription_id} diff --git a/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_02.robot b/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_02.robot new file mode 100644 index 00000000..2a250414 --- /dev/null +++ b/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_02.robot @@ -0,0 +1,54 @@ +*** Settings *** +Documentation Check that you can query context source registration subscriptions with a limit parameter and it will be the maximum number of subscriptions to be retrieved +Resource ${EXECDIR}/resources/ApiUtils.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/JsonUtils.resource + +Test Template Query Context Source Registration Subscriptions With Limit Parameter +Suite Setup Setup Initial Context Source Registration Subscriptions +Suite Teardown Delete Created Context Source Registration Subscriptions + +*** Variable *** +${subscription_id_prefix}= urn:ngsi-ld:Subscription: +${first_subscription_payload_file_path}= csourceSubscriptions/subscription-sample.jsonld +${second_subscription_payload_file_path}= csourceSubscriptions/subscription-watchedAttributes-sample.jsonld +${third_subscription_payload_file_path}= csourceSubscriptions/subscription-geoQ-sample.jsonld +${expectation_file_path}= csourceSubscriptions/expectations/subscriptions-035-01-expectation.json + +*** Test Cases *** LIMIT EXPECTED_SUBSCRIPTION_NUMBER +Query One Subscription ${1} ${1} +Query Two Subscription ${2} ${2} +Query All Subscriptions ${15} ${3} + +*** Keywords *** +Query Context Source Registration Subscriptions With Limit Parameter + [Arguments] ${limit} ${expectation_subscription_number} + + [Documentation] Check that you can query context source registration subscriptions with a limit parameter and it will be the maximum number of subscriptions to be retrieved + [Tags] mandatory + + Query Context Source Registration Subscriptions context=${ngsild_test_suite_context} limit=${limit} + + Check Response Status Code Set To 200 + Check Response Body Containing Number Of Entities Subscription ${expectation_subscription_number} + +Setup Initial Context Source Registration Subscriptions + ${first_subscription_id}= Generate Random Entity Id ${subscription_id_prefix} + ${second_subscription_id}= Generate Random Entity Id ${subscription_id_prefix} + ${third_subscription_id}= Generate Random Entity Id ${subscription_id_prefix} + ${first_subscription_payload}= Load Test Sample ${first_subscription_payload_file_path} ${first_subscription_id} + ${second_subscription_payload}= Load Test Sample ${second_subscription_payload_file_path} ${second_subscription_id} + ${third_subscription_payload}= Load Test Sample ${third_subscription_payload_file_path} ${third_subscription_id} + + Create Context Source Registration Subscription ${first_subscription_payload} + Create Context Source Registration Subscription ${second_subscription_payload} + Create Context Source Registration Subscription ${third_subscription_payload} + + Set Suite Variable ${first_subscription_id} + Set Suite Variable ${second_subscription_id} + Set Suite Variable ${third_subscription_id} + +Delete Created Context Source Registration Subscriptions + Delete Context Source Registration Subscription ${first_subscription_id} + Delete Context Source Registration Subscription ${second_subscription_id} + Delete Context Source Registration Subscription ${third_subscription_id} diff --git a/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_03.robot b/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_03.robot new file mode 100644 index 00000000..86147fd5 --- /dev/null +++ b/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_03.robot @@ -0,0 +1,54 @@ +*** Settings *** +Documentation Check that you can query context source registration subscriptions with providing page and limit parameters for pagination +Resource ${EXECDIR}/resources/ApiUtils.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/JsonUtils.resource + +Test Template Query Context Source Registration Subscriptions With Limit And Page Parameters +Suite Setup Setup Initial Context Source Registration Subscriptions +Suite Teardown Delete Created Context Source Registration Subscriptions + +*** Variable *** +${subscription_id_prefix}= urn:ngsi-ld:Subscription: +${first_subscription_payload_file_path}= csourceSubscriptions/subscription-sample.jsonld +${second_subscription_payload_file_path}= csourceSubscriptions/subscription-watchedAttributes-sample.jsonld +${third_subscription_payload_file_path}= csourceSubscriptions/subscription-geoQ-sample.jsonld + +*** Test Cases *** LIMIT PAGE EXPECTED_SUBSCRIPTION_NUMBER PREV_LINK NEXT_LINK +Query Second Subscription ${1} ${2} ${1} ;rel="prev";type="application/ld+json" ;rel="next";type="application/ld+json" +Query Last Subscription ${2} ${2} ${1} ;rel="prev";type="application/ld+json" ${EMPTY} +Query All Subscriptions ${15} ${1} ${3} ${EMPTY} ${EMPTY} + +*** Keywords *** +Query Context Source Registration Subscriptions With Limit And Page Parameters + [Arguments] ${limit} ${page} ${expectation_subscription_number} ${prev_link} ${next_link} + + [Documentation] Check that you can query context source registration subscriptions with providing page and limit parameters for pagination + [Tags] mandatory + + Query Context Source Registration Subscriptions context=${ngsild_test_suite_context} limit=${limit} page=${page} + + Check Response Status Code Set To 200 + Check Response Body Containing Number Of Entities Subscription ${expectation_subscription_number} + Check Pagination Prev And Next Headers ${prev_link} ${next_link} + +Setup Initial Context Source Registration Subscriptions + ${first_subscription_id}= Generate Random Entity Id ${subscription_id_prefix} + ${second_subscription_id}= Generate Random Entity Id ${subscription_id_prefix} + ${third_subscription_id}= Generate Random Entity Id ${subscription_id_prefix} + ${first_subscription_payload}= Load Test Sample ${first_subscription_payload_file_path} ${first_subscription_id} + ${second_subscription_payload}= Load Test Sample ${second_subscription_payload_file_path} ${second_subscription_id} + ${third_subscription_payload}= Load Test Sample ${third_subscription_payload_file_path} ${third_subscription_id} + + Create Context Source Registration Subscription ${first_subscription_payload} + Create Context Source Registration Subscription ${second_subscription_payload} + Create Context Source Registration Subscription ${third_subscription_payload} + + Set Suite Variable ${first_subscription_id} + Set Suite Variable ${second_subscription_id} + Set Suite Variable ${third_subscription_id} + +Delete Created Context Source Registration Subscriptions + Delete Context Source Registration Subscription ${first_subscription_id} + Delete Context Source Registration Subscription ${second_subscription_id} + Delete Context Source Registration Subscription ${third_subscription_id} diff --git a/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_04.robot b/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_04.robot new file mode 100644 index 00000000..136ff6fd --- /dev/null +++ b/TP/NGSI-LD/ContextSource/RegistrationSubscription/QueryContextSourceRegistrationSubscriptions/035_04.robot @@ -0,0 +1,25 @@ +*** Settings *** +Documentation Check that you cannot query context source registration subscriptions with invalid page and limit parameters +Resource ${EXECDIR}/resources/ApiUtils.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/JsonUtils.resource + +Test Template Query Context Source Registration Subscriptions With Invalid Limit And Page Parameters + +*** Test Cases *** LIMIT PAGE +Invalid Limit ${-5} ${2} +Invalid Page ${2} ${-3} +Invalid Limit And Page ${0} ${0} + +*** Keywords *** +Query Context Source Registration Subscriptions With Invalid Limit And Page Parameters + [Arguments] ${limit} ${page} + + [Documentation] Check that you cannot query context source registration subscriptions with invalid page and limit parameters + [Tags] mandatory + + Query Context Source Registration Subscriptions limit=${limit} page=${page} + + Check Response Status Code Set To 400 + Check Response Body Containing ProblemDetails Element Containing Type Element set to ${response} ${ERROR_TYPE_BAD_REQUEST_DATA} + Check Response Body Containing ProblemDetails Element Containing Title Element ${response} diff --git a/data/csourceSubscriptions/expectations/subscriptions-035-01-expectation.json b/data/csourceSubscriptions/expectations/subscriptions-035-01-expectation.json new file mode 100644 index 00000000..731b679f --- /dev/null +++ b/data/csourceSubscriptions/expectations/subscriptions-035-01-expectation.json @@ -0,0 +1,40 @@ +[ + { + "id":"urn:ngsi-ld:Subscription:randomUUID", + "type":"Subscription", + "entities":[ + { + "type":"Building" + } + ], + "notification":{ + "format":"keyValues", + "endpoint":{ + "uri":"http://my.endpoint.org/notify", + "accept":"application/json" + } + }, + "status": "active" + }, + { + "id":"urn:ngsi-ld:Subscription:randomUUID", + "type":"Subscription", + "watchedAttributes":[ + "name", + "subCategory" + ], + "entities":[ + { + "type":"Building" + } + ], + "notification":{ + "format":"keyValues", + "endpoint":{ + "uri":"http://my.endpoint.org/notify", + "accept":"application/json" + } + }, + "status": "active" + } +] diff --git a/resources/ApiUtils.resource b/resources/ApiUtils.resource index 9925f19f..5a5c0ad7 100755 --- a/resources/ApiUtils.resource +++ b/resources/ApiUtils.resource @@ -420,6 +420,21 @@ Retrieve Context Source Registration Subscription Set Test Variable ${response} +Query Context Source Registration Subscriptions + [Arguments] ${context}=${EMPTY} ${limit}=${EMPTY} ${page}=${EMPTY} + + &{headers}= Create Dictionary + &{params}= Create Dictionary + Run Keyword If '${context}'!='' Set To Dictionary ${headers} Link=<${context}>; rel="http://www.w3.org/ns/json-ld#context";type="application/ld+json" + Run Keyword If '${limit}'!='' Set To Dictionary ${params} limit=${limit} + Run Keyword If '${page}'!='' Set To Dictionary ${params} page=${page} + + ${response}= GET ${CONTEXT_SOURCE_REGISTRATION_SUBSCRIPTION_ENDPOINT_PATH} headers=${headers} query=${params} + Output request + Output response + + Set Test Variable ${response} + Delete Context Source Registration Subscription [Arguments] ${subscription_id} diff --git a/resources/AssertionUtils.resource b/resources/AssertionUtils.resource index 25c5f6fc..c4a8c7a9 100755 --- a/resources/AssertionUtils.resource +++ b/resources/AssertionUtils.resource @@ -122,6 +122,33 @@ Check Response Body Containing Subscription element ${comparaison_result}= Compare Dictionaries Ignoring Keys ${response['body']} ${subscription} ${ignored_keys} Should Be True ${comparaison_result} msg=Subscription Comparaison Failed +Check Response Body Containing List Containing Subscription elements + [Arguments] ${expectation_file_path} ${subscription_ids} + ${subscription_payload}= Load Json From File ${EXECDIR}/data/${expectation_file_path} + ${index}= Set Variable 0 + FOR ${subscription_id} IN @{subscription_ids} + ${subscription_payload}= Update Value To Json ${subscription_payload} $.[${index}]..id ${subscription_id} + ${index}= Evaluate ${index} + 1 + END + ${comparaison_result}= Compare Dictionaries Ignoring Keys ${response['body']} ${subscription_payload} ${EMPTY} + Should Be True ${comparaison_result} msg=Subscription Comparaison Failed + +# Since response body can be a json object if it contains one subscription +# A check on the response body type is needed +Check Response Body Containing Number Of Entities + [Arguments] ${expected_entity_type} ${expected_length} + + ${response_body_length}= Get Length ${response['body']} + ${is_list}= Run Keyword Evaluate type(${response['body']})==list + + Run Keyword If ${is_list} Should Be Equal ${response_body_length} ${expected_length} + Run Keyword Unless ${is_list} Should Be Equal ${1} ${expected_length} + + FOR ${index} IN RANGE ${expected_length} + Run Keyword If ${is_list} Should Be Equal ${response['body'][${index}]['type']} ${expected_entity_type} + END + Run Keyword Unless ${is_list} Should Be Equal ${response['body']['type']} ${expected_entity_type} + Check Response Body Type When Using Session Request [Arguments] ${response} ${type} Should Be Equal ${response['type']} ${type} @@ -189,3 +216,10 @@ Check NotificationParams FOR ${expected_additional_member} IN @{expected_additional_members} Should Not Be Empty ${response['body']['notification']['${expected_additional_member}']} END + +Check Pagination Prev And Next Headers + [Arguments] ${prev_link} ${next_link} + ${expected_links}= Create List ${prev_link} ${next_link} + Run Keyword If '${prev_link}'!='' and '${next_link}'!='' Lists Should Be Equal ${response['headers']['Link']} ${expected_links} ignore_order=True + Run Keyword If '${prev_link}'!='' and '${next_link}'=='' Should Be Equal ${response['headers']['Link']} ${prev_link} + Run Keyword If '${prev_link}'=='' and '${next_link}'!='' Should Be Equal ${response['headers']['Link']} ${next_link} -- GitLab