diff --git a/tests/app/public_contracts/GET_notification_return_email.json b/tests/app/public_contracts/GET_notification_return_email.json index 78318cdaa..949033e6b 100644 --- a/tests/app/public_contracts/GET_notification_return_email.json +++ b/tests/app/public_contracts/GET_notification_return_email.json @@ -1,128 +1,15 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "description": "GET notification return schema - for SMS notifications", + "description": "GET notification return schema - for email notifications", "type" : "object", "properties": { "data": { "type": "object", "properties": { - "notification": { - "type": "object", - "properties": { - "id": {"$ref": "#/definitions/uuid"}, - "to": {"type": "string", "format": "email"}, - "job_row_number": {"oneOf":[ - {"type": "number"}, - {"type": "null"} - ]}, - "template_version": {"type": "number"}, - "billable_units": {"type": "number"}, - "notification_type": { - "type": "string", - "enum": ["email"] - }, - "created_at": {"$ref": "#/definitions/datetime"}, - "sent_at": {"oneOf":[ - {"$ref": "#/definitions/datetime"}, - {"type": "null"} - ]}, - "sent_by": {"oneOf":[ - {"type": "string"}, - {"type": "null"} - ]}, - "updated_at": {"oneOf":[ - {"$ref": "#/definitions/datetime"}, - {"type": "null"} - ]}, - "status": { - "type": "string", - "enum": [ - "created", - "sending", - "delivered", - "pending", - "failed", - "technical-failure", - "temporary-failure", - "permanent-failure" - ] - }, - "reference": {"oneOf":[ - {"type": "string"}, - {"type": "null"} - ]}, - "template": { - "type": "object", - "properties": { - "id": {"$ref": "#/definitions/uuid"}, - "name": {"type": "string"}, - "template_type": { - "type": "string", - "enum": ["email"] - }, - "version": {"type": "number"} - }, - "additionalProperties": false, - "required": ["id", "name", "template_type", "version"] - }, - "service": {"$ref": "#/definitions/uuid"}, - "job": { - "oneOf": [ - { - "type": "object", - "properties": { - "id": {"$ref": "#/definitions/uuid"}, - "original_file_name": {"type": "string"} - }, - "additionalProperties": false, - "required": ["id", "original_file_name"] - }, - {"type": "null"} - ] - }, - "api_key": {"oneOf":[ - {"$ref": "#/definitions/uuid"}, - {"type": "null"} - ]}, - "body": {"type": "string"}, - "content_char_count": {"type": "null"}, - "subject": {"type": "string"} - }, - "additionalProperties": false, - "required": [ - "id", - "to", - "job_row_number", - "template_version", - "billable_units", - "notification_type", - "created_at", - "sent_at", - "sent_by", - "updated_at", - "status", - "reference", - "template", - "service", - "job", - "api_key", - "body", - "content_char_count" - ] - } + "notification": {"$ref": "email_notification.json"} }, "additionalProperties": false } }, - "additionalProperties": false, - "definitions": { - "uuid": { - "type": "string", - "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" - }, - "datetime": { - "type": "string", - "format": "date-time" - } - } + "additionalProperties": false } diff --git a/tests/app/public_contracts/GET_notification_return_sms.json b/tests/app/public_contracts/GET_notification_return_sms.json index 804b91722..356428fde 100644 --- a/tests/app/public_contracts/GET_notification_return_sms.json +++ b/tests/app/public_contracts/GET_notification_return_sms.json @@ -1,127 +1,15 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "description": "GET notification return schema - for SMS notifications", + "description": "GET notification return schema - for sms notifications", "type" : "object", "properties": { "data": { "type": "object", "properties": { - "notification": { - "type": "object", - "properties": { - "id": {"$ref": "#/definitions/uuid"}, - "to": {"type": "string"}, - "job_row_number": {"oneOf":[ - {"type": "number"}, - {"type": "null"} - ]}, - "template_version": {"type": "number"}, - "billable_units": {"type": "number"}, - "notification_type": { - "type": "string", - "enum": ["sms"] - }, - "created_at": {"$ref": "#/definitions/datetime"}, - "sent_at": {"oneOf":[ - {"$ref": "#/definitions/datetime"}, - {"type": "null"} - ]}, - "sent_by": {"oneOf":[ - {"type": "string"}, - {"type": "null"} - ]}, - "updated_at": {"oneOf":[ - {"$ref": "#/definitions/datetime"}, - {"type": "null"} - ]}, - "status": { - "type": "string", - "enum": [ - "created", - "sending", - "delivered", - "pending", - "failed", - "technical-failure", - "temporary-failure", - "permanent-failure" - ] - }, - "reference": {"oneOf":[ - {"type": "string"}, - {"type": "null"} - ]}, - "template": { - "type": "object", - "properties": { - "id": {"$ref": "#/definitions/uuid"}, - "name": {"type": "string"}, - "template_type": { - "type": "string", - "enum": ["sms"] - }, - "version": {"type": "number"} - }, - "additionalProperties": false, - "required": ["id", "name", "template_type", "version"] - }, - "service": {"$ref": "#/definitions/uuid"}, - "job": { - "oneOf": [ - { - "type": "object", - "properties": { - "id": {"$ref": "#/definitions/uuid"}, - "original_file_name": {"type": "string"} - }, - "additionalProperties": false, - "required": ["id", "original_file_name"] - }, - {"type": "null"} - ] - }, - "api_key": {"oneOf":[ - {"$ref": "#/definitions/uuid"}, - {"type": "null"} - ]}, - "body": {"type": "string"}, - "content_char_count": {"type": "number"} - }, - "additionalProperties": false, - "required": [ - "id", - "to", - "job_row_number", - "template_version", - "billable_units", - "notification_type", - "created_at", - "sent_at", - "sent_by", - "updated_at", - "status", - "reference", - "template", - "service", - "job", - "api_key", - "body", - "content_char_count" - ] - } + "notification": {"$ref": "sms_notification.json"} }, "additionalProperties": false } }, - "additionalProperties": false, - "definitions": { - "uuid": { - "type": "string", - "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" - }, - "datetime": { - "type": "string", - "format": "date-time" - } - } + "additionalProperties": false } diff --git a/tests/app/public_contracts/definitions.json b/tests/app/public_contracts/definitions.json new file mode 100644 index 000000000..d8a2ea3ef --- /dev/null +++ b/tests/app/public_contracts/definitions.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "description": "Common definitions - usage example: {'$ref': 'definitions.json#/uuid'} (swap quotes for double quotes)", + "uuid": { + "type": "string", + "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" + }, + "datetime": { + "type": "string", + "format": "date-time" + }, +} diff --git a/tests/app/public_contracts/email_notification.json b/tests/app/public_contracts/email_notification.json new file mode 100644 index 000000000..6de386eea --- /dev/null +++ b/tests/app/public_contracts/email_notification.json @@ -0,0 +1,108 @@ +{ + "email_notification": { + "description": "Single email notification schema - as returned by GET /notification and GET /notification/{}", + "type": "object", + "properties": { + "id": {"$ref": "definitions.json#/uuid"}, + "to": {"type": "string", "format": "email"}, + "job_row_number": {"oneOf":[ + {"type": "number"}, + {"type": "null"} + ]}, + "template_version": {"type": "number"}, + "billable_units": {"type": "number"}, + "notification_type": { + "type": "string", + "enum": ["email"] + }, + "created_at": {"$ref": "definitions.json#/datetime"}, + "sent_at": {"oneOf":[ + {"$ref": "definitions.json#/datetime"}, + {"type": "null"} + ]}, + "sent_by": {"oneOf":[ + {"type": "string"}, + {"type": "null"} + ]}, + "updated_at": {"oneOf":[ + {"$ref": "definitions.json#/datetime"}, + {"type": "null"} + ]}, + "status": { + "type": "string", + "enum": [ + "created", + "sending", + "delivered", + "pending", + "failed", + "technical-failure", + "temporary-failure", + "permanent-failure" + ] + }, + "reference": {"oneOf":[ + {"type": "string"}, + {"type": "null"} + ]}, + "template": { + "type": "object", + "properties": { + "id": {"$ref": "definitions.json#/uuid"}, + "name": {"type": "string"}, + "template_type": { + "type": "string", + "enum": ["email"] + }, + "version": {"type": "number"} + }, + "additionalProperties": false, + "required": ["id", "name", "template_type", "version"] + }, + "service": {"$ref": "definitions.json#/uuid"}, + "job": { + "oneOf": [ + { + "type": "object", + "properties": { + "id": {"$ref": "definitions.json#/uuid"}, + "original_file_name": {"type": "string"} + }, + "additionalProperties": false, + "required": ["id", "original_file_name"] + }, + {"type": "null"} + ] + }, + "api_key": {"oneOf":[ + {"$ref": "definitions.json#/uuid"}, + {"type": "null"} + ]}, + "body": {"type": "string"}, + "content_char_count": {"type": "null"}, + "subject": {"type": "string"} + }, + "additionalProperties": false, + "required": [ + "id", + "to", + "job_row_number", + "template_version", + "billable_units", + "notification_type", + "created_at", + "sent_at", + "sent_by", + "updated_at", + "status", + "reference", + "template", + "service", + "job", + "api_key", + "body", + "content_char_count", + "subject" + ] + } +} diff --git a/tests/app/public_contracts/sms_notification.json b/tests/app/public_contracts/sms_notification.json new file mode 100644 index 000000000..816a2056a --- /dev/null +++ b/tests/app/public_contracts/sms_notification.json @@ -0,0 +1,106 @@ +{ + "sms_notification": { + "description": "Single sms notification schema - as returned by GET /notification and GET /notification/{}", + "type": "object", + "properties": { + "id": {"$ref": "definitions.json#/uuid"}, + "to": {"type": "string"}, + "job_row_number": {"oneOf":[ + {"type": "number"}, + {"type": "null"} + ]}, + "template_version": {"type": "number"}, + "billable_units": {"type": "number"}, + "notification_type": { + "type": "string", + "enum": ["sms"] + }, + "created_at": {"$ref": "definitions.json#/datetime"}, + "sent_at": {"oneOf":[ + {"$ref": "definitions.json#/datetime"}, + {"type": "null"} + ]}, + "sent_by": {"oneOf":[ + {"type": "string"}, + {"type": "null"} + ]}, + "updated_at": {"oneOf":[ + {"$ref": "definitions.json#/datetime"}, + {"type": "null"} + ]}, + "status": { + "type": "string", + "enum": [ + "created", + "sending", + "delivered", + "pending", + "failed", + "technical-failure", + "temporary-failure", + "permanent-failure" + ] + }, + "reference": {"oneOf":[ + {"type": "string"}, + {"type": "null"} + ]}, + "template": { + "type": "object", + "properties": { + "id": {"$ref": "definitions.json#/uuid"}, + "name": {"type": "string"}, + "template_type": { + "type": "string", + "enum": ["sms"] + }, + "version": {"type": "number"} + }, + "additionalProperties": false, + "required": ["id", "name", "template_type", "version"] + }, + "service": {"$ref": "definitions.json#/uuid"}, + "job": { + "oneOf": [ + { + "type": "object", + "properties": { + "id": {"$ref": "definitions.json#/uuid"}, + "original_file_name": {"type": "string"} + }, + "additionalProperties": false, + "required": ["id", "original_file_name"] + }, + {"type": "null"} + ] + }, + "api_key": {"oneOf":[ + {"$ref": "definitions.json#/uuid"}, + {"type": "null"} + ]}, + "body": {"type": "string"}, + "content_char_count": {"type": "null"} + }, + "additionalProperties": false, + "required": [ + "id", + "to", + "job_row_number", + "template_version", + "billable_units", + "notification_type", + "created_at", + "sent_at", + "sent_by", + "updated_at", + "status", + "reference", + "template", + "service", + "job", + "api_key", + "body", + "content_char_count" + ] + } +} diff --git a/tests/app/public_contracts/test_GET_notification.py b/tests/app/public_contracts/test_GET_notification.py index d048e34e2..a9cb0fce4 100644 --- a/tests/app/public_contracts/test_GET_notification.py +++ b/tests/app/public_contracts/test_GET_notification.py @@ -5,26 +5,25 @@ import jsonschema from tests import create_authorization_header +def validate(json_string, schema_filename): + resolver = jsonschema.RefResolver('file://' + os.path.dirname(__file__) + '/', None) + with open(os.path.join(os.path.dirname(__file__), schema_filename)) as schema: + jsonschema.validate( + json.loads(json_string), + json.load(schema), + format_checker=jsonschema.FormatChecker(), + resolver=resolver + ) def test_get_sms_contract(client, sample_notification): auth_header = create_authorization_header(service_id=sample_notification.service_id) response = client.get('/notifications/{}'.format(sample_notification.id), headers=[auth_header]) - with open(os.path.join(os.path.dirname(__file__), './GET_notification_return_sms.json')) as schema: - jsonschema.validate( - json.loads(response.get_data(as_text=True)), - json.load(schema), - format_checker=jsonschema.FormatChecker() - ) + validate(response.get_data(as_text=True), './GET_notification_return_sms.json') def test_get_email_contract(client, sample_email_notification): auth_header = create_authorization_header(service_id=sample_email_notification.service_id) response = client.get('/notifications/{}'.format(sample_email_notification.id), headers=[auth_header]) - with open(os.path.join(os.path.dirname(__file__), './GET_notification_return_email.json')) as schema: - jsonschema.validate( - json.loads(response.get_data(as_text=True)), - json.load(schema), - format_checker=jsonschema.FormatChecker() - ) + validate(response.get_data(as_text=True), './GET_notification_return_email.json')