mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-23 08:51:30 -05:00
201 lines
6.8 KiB
Python
201 lines
6.8 KiB
Python
import json
|
|
import uuid
|
|
|
|
from app.enums import NotificationType
|
|
from app.models import ServiceDataRetention
|
|
from tests import create_admin_authorization_header
|
|
from tests.app.db import create_service_data_retention
|
|
|
|
|
|
def test_get_service_data_retention(client, sample_service):
|
|
sms_data_retention = create_service_data_retention(service=sample_service)
|
|
email_data_retention = create_service_data_retention(
|
|
service=sample_service,
|
|
notification_type=NotificationType.EMAIL,
|
|
days_of_retention=10,
|
|
)
|
|
|
|
response = client.get(
|
|
f"/service/{sample_service.id!s}/data-retention",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
json_response = json.loads(response.get_data(as_text=True))
|
|
assert len(json_response) == 2
|
|
assert json_response[0] == sms_data_retention.serialize()
|
|
assert json_response[1] == email_data_retention.serialize()
|
|
|
|
|
|
def test_get_service_data_retention_returns_empty_list(client, sample_service):
|
|
response = client.get(
|
|
f"/service/{sample_service.id!s}/data-retention",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
)
|
|
assert response.status_code == 200
|
|
assert len(json.loads(response.get_data(as_text=True))) == 0
|
|
|
|
|
|
def test_get_data_retention_for_service_notification_type(client, sample_service):
|
|
data_retention = create_service_data_retention(service=sample_service)
|
|
response = client.get(
|
|
f"/service/{sample_service.id}/data-retention/"
|
|
f"notification-type/{NotificationType.SMS}",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
)
|
|
assert response.status_code == 200
|
|
assert json.loads(response.get_data(as_text=True)) == data_retention.serialize()
|
|
|
|
|
|
def test_get_service_data_retention_by_id(client, sample_service):
|
|
sms_data_retention = create_service_data_retention(service=sample_service)
|
|
create_service_data_retention(
|
|
service=sample_service,
|
|
notification_type=NotificationType.EMAIL,
|
|
days_of_retention=10,
|
|
)
|
|
create_service_data_retention(
|
|
service=sample_service,
|
|
notification_type=NotificationType.LETTER,
|
|
days_of_retention=30,
|
|
)
|
|
response = client.get(
|
|
f"/service/{sample_service.id!s}/data-retention/{sms_data_retention.id}",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
)
|
|
assert response.status_code == 200
|
|
assert json.loads(response.get_data(as_text=True)) == sms_data_retention.serialize()
|
|
|
|
|
|
def test_get_service_data_retention_by_id_returns_none_when_no_data_retention_exists(
|
|
client, sample_service
|
|
):
|
|
response = client.get(
|
|
f"/service/{sample_service.id!s}/data-retention/{uuid.uuid4()}",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
)
|
|
assert response.status_code == 200
|
|
assert json.loads(response.get_data(as_text=True)) == {}
|
|
|
|
|
|
def test_create_service_data_retention(client, sample_service):
|
|
data = {"notification_type": NotificationType.SMS, "days_of_retention": 3}
|
|
response = client.post(
|
|
f"/service/{sample_service.id!s}/data-retention",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
data=json.dumps(data),
|
|
)
|
|
|
|
assert response.status_code == 201
|
|
json_resp = json.loads(response.get_data(as_text=True))["result"]
|
|
results = ServiceDataRetention.query.all()
|
|
assert len(results) == 1
|
|
data_retention = results[0]
|
|
assert json_resp == data_retention.serialize()
|
|
|
|
|
|
def test_create_service_data_retention_returns_400_when_notification_type_is_invalid(
|
|
client,
|
|
):
|
|
data = {"notification_type": "unknown", "days_of_retention": 3}
|
|
response = client.post(
|
|
f"/service/{uuid.uuid4()!s}/data-retention",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
data=json.dumps(data),
|
|
)
|
|
json_resp = json.loads(response.get_data(as_text=True))
|
|
assert response.status_code == 400
|
|
assert json_resp["errors"][0]["error"] == "ValidationError"
|
|
assert (
|
|
json_resp["errors"][0]["message"]
|
|
== f"notification_type unknown is not one of [{', '.join([f'<{type(e).__name__}.{e.name}: {e.value}>'for e in (NotificationType.SMS, NotificationType.EMAIL)])}]"
|
|
)
|
|
|
|
|
|
def test_create_service_data_retention_returns_400_when_data_retention_for_notification_type_already_exists(
|
|
client, sample_service
|
|
):
|
|
create_service_data_retention(service=sample_service)
|
|
data = {"notification_type": NotificationType.SMS, "days_of_retention": 3}
|
|
response = client.post(
|
|
f"/service/{uuid.uuid4()!s}/data-retention",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
data=json.dumps(data),
|
|
)
|
|
|
|
assert response.status_code == 400
|
|
json_resp = json.loads(response.get_data(as_text=True))
|
|
assert json_resp["result"] == "error"
|
|
assert (
|
|
json_resp["message"]
|
|
== "Service already has data retention for sms notification type"
|
|
)
|
|
|
|
|
|
def test_modify_service_data_retention(client, sample_service):
|
|
data_retention = create_service_data_retention(service=sample_service)
|
|
data = {"days_of_retention": 3}
|
|
response = client.post(
|
|
f"/service/{sample_service.id}/data-retention/{data_retention.id}",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
data=json.dumps(data),
|
|
)
|
|
assert response.status_code == 204
|
|
assert response.get_data(as_text=True) == ""
|
|
|
|
|
|
def test_modify_service_data_retention_returns_400_when_data_retention_does_not_exist(
|
|
client, sample_service
|
|
):
|
|
data = {"days_of_retention": 3}
|
|
response = client.post(
|
|
f"/service/{sample_service.id}/data-retention/{uuid.uuid4()}",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
data=json.dumps(data),
|
|
)
|
|
|
|
assert response.status_code == 404
|
|
|
|
|
|
def test_modify_service_data_retention_returns_400_when_data_is_invalid(client):
|
|
data = {"bad_key": 3}
|
|
response = client.post(
|
|
f"/service/{uuid.uuid4()}/data-retention/{uuid.uuid4()}",
|
|
headers=[
|
|
("Content-Type", "application/json"),
|
|
create_admin_authorization_header(),
|
|
],
|
|
data=json.dumps(data),
|
|
)
|
|
assert response.status_code == 400
|