From e40bfb6b31a33a2034c9a339f764f65b016d109f Mon Sep 17 00:00:00 2001 From: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com> Date: Fri, 15 Dec 2023 18:14:22 +0300 Subject: [PATCH] Add property based testing to invitations API using schemathesis Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com> --- .github/workflows/api-tests.yml | 11 +++++++++++ Makefile | 1 + api/openapi/invitations.yml | 15 +++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml index e7bf1584633..82c257a835b 100644 --- a/.github/workflows/api-tests.yml +++ b/.github/workflows/api-tests.yml @@ -48,6 +48,7 @@ env: DOMAIN_NAME: demo-test USERS_URL: http://localhost:9002 THINGS_URL: http://localhost:9000 + INVITATIONS_URL: http://localhost:9020 jobs: api-test: @@ -155,6 +156,16 @@ jobs: report: false args: '--header "Authorization: Bearer ${{ env.USER_TOKEN }}" --contrib-unique-data --contrib-openapi-formats-uuid --hypothesis-suppress-health-check=filter_too_much --stateful=links' + - name: Run Invitations API tests + if: steps.changes.outputs.invitations == 'true' + uses: schemathesis/action@v1 + with: + schema: api/openapi/invitations.yml + base-url: ${{ env.INVITATIONS_URL }} + checks: all + report: false + args: '--header "Authorization: Bearer ${{ env.USER_TOKEN }}" --contrib-unique-data --contrib-openapi-formats-uuid --hypothesis-suppress-health-check=filter_too_much --stateful=links' + - name: Stop containers if: always() run: make run down args="-v" diff --git a/Makefile b/Makefile index d225443d3ab..455506a9a57 100644 --- a/Makefile +++ b/Makefile @@ -152,6 +152,7 @@ endef test_api_users: TEST_API_URL := http://localhost:9002 test_api_things: TEST_API_URL := http://localhost:9000 +test_api_invitations: TEST_API_URL := http://localhost:9020 $(TEST_API): $(call test_api_service,$(@),$(TEST_API_URL)) diff --git a/api/openapi/invitations.yml b/api/openapi/invitations.yml index 0dd3c3fc8d9..372fd6c9f30 100644 --- a/api/openapi/invitations.yml +++ b/api/openapi/invitations.yml @@ -29,6 +29,7 @@ tags: paths: /invitations: post: + operationId: sendInvitation tags: - Invitations summary: Send invitation @@ -45,6 +46,8 @@ paths: description: Failed due to malformed JSON. "401": description: Missing or invalid access token provided. + "404": + description: A non-existent entity request. "409": description: Failed due to using an existing identity. "415": @@ -53,6 +56,7 @@ paths: $ref: "#/components/responses/ServiceError" get: + operationId: listInvitations tags: - Invitations summary: List invitations @@ -89,6 +93,7 @@ paths: /invitations/accept: post: + operationId: acceptInvitation summary: Accept invitation description: | Current logged in user accepts invitation to join domain. @@ -105,11 +110,14 @@ paths: description: Failed due to malformed query parameters. "401": description: Missing or invalid access token provided. + "404": + description: A non-existent entity request. "500": $ref: "#/components/responses/ServiceError" /invitations/{user_id}/{domain_id}: get: + operationId: getInvitation summary: Retrieves a specific invitation description: | Retrieves a specific invitation that is identifier by the user ID and domain ID. @@ -135,6 +143,7 @@ paths: $ref: "#/components/responses/ServiceError" delete: + operationId: deleteInvitation summary: Deletes a specific invitation description: | Deletes a specific invitation that is identifier by the user ID and domain ID. @@ -452,6 +461,12 @@ components: application/json: schema: $ref: "#/components/schemas/Invitation" + links: + delete: + operationId: deleteInvitation + parameters: + user_id: $response.body#/user_id + domain_id: $response.body#/domain_id InvitationPageRes: description: Data retrieved.