Skip to content

Commit

Permalink
NOISSUE - Add property based testing to notifiers API (#2175)
Browse files Browse the repository at this point in the history
Signed-off-by: Rodney Osodo <[email protected]>
  • Loading branch information
rodneyosodo authored Apr 29, 2024
1 parent 2040d2b commit 19c1261
Show file tree
Hide file tree
Showing 14 changed files with 93 additions and 94 deletions.
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
directory: "./.github/workflows"
schedule:
interval: "weekly"

Expand Down
26 changes: 24 additions & 2 deletions .github/workflows/api-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ env:
MONGO_READER_URL: http://localhost:9007
POSTGRES_READER_URL: http://localhost:9009
TIMESCALE_READER_URL: http://localhost:9011
SMPP_NOTIFIER_URL: http://localhost:9014
SMTP_NOTIFIER_URL: http://localhost:9015

jobs:
api-test:
Expand Down Expand Up @@ -206,7 +208,7 @@ jobs:
base-url: ${{ env.PROVISION_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'
args: '--header "Authorization: Bearer ${{ env.USER_TOKEN }}" --contrib-openapi-formats-uuid --hypothesis-suppress-health-check=filter_too_much --stateful=links'

- name: Seed Messages
if: steps.changes.outputs.readers == 'true'
Expand Down Expand Up @@ -264,6 +266,26 @@ jobs:
report: false
args: '--header "Authorization: Bearer ${{ env.USER_TOKEN }}" --contrib-openapi-formats-uuid --hypothesis-suppress-health-check=filter_too_much --stateful=links'

- name: Run SMPP Notifier API tests
if: steps.changes.outputs.notifiers == 'true'
uses: schemathesis/action@v1
with:
schema: api/openapi/notifiers.yml
base-url: ${{ env.SMPP_NOTIFIER_URL }}
checks: all
report: false
args: '--header "Authorization: Bearer ${{ env.USER_TOKEN }}" --contrib-openapi-formats-uuid --hypothesis-suppress-health-check=filter_too_much --stateful=links'

- name: Run SMTP Notifier API tests
if: steps.changes.outputs.notifiers == 'true'
uses: schemathesis/action@v1
with:
schema: api/openapi/notifiers.yml
base-url: ${{ env.SMTP_NOTIFIER_URL }}
checks: all
report: false
args: '--header "Authorization: Bearer ${{ env.USER_TOKEN }}" --contrib-openapi-formats-uuid --hypothesis-suppress-health-check=filter_too_much --stateful=links'

- name: Stop containers
if: always()
run: make run down args="-v"
run: make run down args="-v" && make run_addons down args="-v"
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ test_api_certs: TEST_API_URL := http://localhost:9019
test_api_twins: TEST_API_URL := http://localhost:9018
test_api_provision: TEST_API_URL := http://localhost:9016
test_api_readers: TEST_API_URL := http://localhost:9009 # This can be the URL of any reader service.
test_api_notifiers: TEST_API_URL := http://localhost:9014 # This can be the URL of any notifier service.

$(TEST_API):
$(call test_api_service,$(@),$(TEST_API_URL))
Expand Down
10 changes: 5 additions & 5 deletions api/openapi/http.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ tags:
externalDocs:
description: Find out more about messages
url: https://docs.magistrala.abstractmachines.fr/

paths:
/channels/{id}/messages:
post:
Expand All @@ -50,17 +50,17 @@ paths:
description: Message discarded due to invalid channel id.
"415":
description: Message discarded due to invalid or missing content type.
'500':
"500":
$ref: "#/components/responses/ServiceError"
/health:
get:
summary: Retrieves service health check info.
tags:
- health
responses:
'200':
"200":
$ref: "#/components/responses/HealthRes"
'500':
"500":
$ref: "#/components/responses/ServiceError"

components:
Expand Down Expand Up @@ -154,7 +154,7 @@ components:
responses:
ServiceError:
description: Unexpected server-side error occurred.

HealthRes:
description: Service Health Check.
content:
Expand Down
4 changes: 2 additions & 2 deletions api/openapi/invitations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ paths:
"401":
description: Missing or invalid access token provided.
"404":
description: A non-existent entity request.
description: A non-existent entity request.
"409":
description: Failed due to using an existing identity.
"415":
Expand Down Expand Up @@ -111,7 +111,7 @@ paths:
"401":
description: Missing or invalid access token provided.
"404":
description: A non-existent entity request.
description: A non-existent entity request.
"500":
$ref: "#/components/responses/ServiceError"

Expand Down
43 changes: 37 additions & 6 deletions api/openapi/notifiers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,18 @@ servers:
- url: https://localhost:9014
- url: http://localhost:9015
- url: https://localhost:9015

tags:
- name: notifiers
description: Everything about your Notifiers
externalDocs:
description: Find out more about notifiers
url: https://docs.magistrala.abstractmachines.fr/

paths:
/subscriptions:
post:
operationId: createSubscription
summary: Create subscription
description: Creates a new subscription give a topic and contact.
tags:
Expand All @@ -42,13 +43,18 @@ paths:
$ref: "#/components/responses/Create"
"400":
description: Failed due to malformed JSON.
"403":
description: Failed to perform authorization over the entity.
"409":
description: Failed due to using an existing topic and contact.
"415":
description: Missing or invalid content type.
"422":
description: Database can't process request.
"500":
$ref: "#/components/responses/ServiceError"
get:
operationId: listSubscriptions
summary: List subscriptions
description: List subscriptions given list parameters.
tags:
Expand All @@ -65,10 +71,17 @@ paths:
description: Failed due to malformed query parameters.
"401":
description: Missing or invalid access token provided.
"403":
description: Failed to perform authorization over the entity.
"404":
description: A non-existent entity request.
"422":
description: Database can't process request.
"500":
$ref: "#/components/responses/ServiceError"
/subscriptions/{id}:
get:
operationId: viewSubscription
summary: Get subscription with the provided id
description: Retrieves a subscription with the provided id.
tags:
Expand All @@ -80,9 +93,16 @@ paths:
$ref: "#/components/responses/View"
"401":
description: Missing or invalid access token provided.
"403":
description: Failed to perform authorization over the entity.
"404":
description: A non-existent entity request.
"422":
description: Database can't process request.
"500":
$ref: "#/components/responses/ServiceError"
delete:
operationId: removeSubscription
summary: Delete subscription with the provided id
description: Removes a subscription with the provided id.
tags:
Expand All @@ -94,6 +114,12 @@ paths:
description: Subscription removed
"401":
description: Missing or invalid access token provided.
"403":
description: Failed to perform authorization over the entity.
"404":
description: A non-existent entity request.
"422":
description: Database can't process request.
"500":
$ref: "#/components/responses/ServiceError"
/health:
Expand All @@ -102,9 +128,9 @@ paths:
tags:
- health
responses:
'200':
"200":
$ref: "#/components/responses/HealthRes"
'500':
"500":
$ref: "#/components/responses/ServiceError"

components:
Expand Down Expand Up @@ -140,7 +166,7 @@ components:
contact:
type: string
example: [email protected]
description: The contact of the user to which the notification will be sent.
description: The contact of the user to which the notification will be sent.
Page:
type: object
properties:
Expand Down Expand Up @@ -229,6 +255,11 @@ components:
application/json:
schema:
$ref: "#/components/schemas/Subscription"
links:
delete:
operationId: removeSubscription
parameters:
id: $response.body#/id
Page:
description: Data retrieved.
content:
Expand All @@ -240,7 +271,7 @@ components:
HealthRes:
description: Service Health Check.
content:
application/json:
application/health+json:
schema:
$ref: "./schemas/HealthInfo.yml"

Expand Down
12 changes: 6 additions & 6 deletions api/openapi/things.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ paths:
description: |
Missing or invalid access token provided.
"403":
description: Failed to perform authorization over the entity.
description: Failed to perform authorization over the entity.
"404":
description: A non-existent entity request.
"422":
Expand Down Expand Up @@ -182,7 +182,7 @@ paths:
"404":
description: Failed due to non existing thing.
"409":
description: Failed due to using an existing identity.
description: Failed due to using an existing identity.
"415":
description: Missing or invalid content type.
"422":
Expand Down Expand Up @@ -299,7 +299,7 @@ paths:
"404":
description: A non-existent entity request.
"409":
description: Failed due to already disabled thing.
description: Failed due to already disabled thing.
"422":
description: Database can't process request.
"500":
Expand Down Expand Up @@ -329,7 +329,7 @@ paths:
"404":
description: A non-existent entity request.
"409":
description: Failed due to already enabled thing.
description: Failed due to already enabled thing.
"422":
description: Database can't process request.
"500":
Expand Down Expand Up @@ -595,7 +595,7 @@ paths:
"404":
description: A non-existent entity request.
"409":
description: Failed due to already enabled channel.
description: Failed due to already enabled channel.
"422":
description: Database can't process request.
"500":
Expand Down Expand Up @@ -625,7 +625,7 @@ paths:
"404":
description: A non-existent entity request.
"409":
description: Failed due to already disabled channel.
description: Failed due to already disabled channel.
"422":
description: Database can't process request.
"500":
Expand Down
1 change: 0 additions & 1 deletion api/openapi/twins.yml
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,6 @@ components:
twins:
type: array
minItems: 0
uniqueItems: true
items:
$ref: "#/components/schemas/TwinResObj"
total:
Expand Down
6 changes: 5 additions & 1 deletion api/openapi/users.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ paths:
"415":
description: Missing or invalid content type.
"422":
description: Database can't process request.
description: Database can't process request.
"500":
$ref: "#/components/responses/ServiceError"

Expand Down Expand Up @@ -572,6 +572,8 @@ paths:
description: Missing or invalid access token provided.
"403":
description: Failed to perform authorization over the entity.
"404":
description: A non-existent entity request.
"409":
description: Failed due to using an existing identity.
"415":
Expand Down Expand Up @@ -695,6 +697,8 @@ paths:
description: Missing or invalid access token provided.
"403":
description: Unauthorized access to group id.
"404":
description: A non-existent entity request.
"500":
$ref: "#/components/responses/ServiceError"

Expand Down
2 changes: 2 additions & 0 deletions cmd/smpp-notifier/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ func main() {
db, err := pgclient.Setup(dbConfig, *notifierpg.Migration())
if err != nil {
logger.Error(err.Error())
exitCode = 1
return
}
defer db.Close()

Expand Down
Loading

0 comments on commit 19c1261

Please sign in to comment.