mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-21 07:51:13 -05:00
Added new endpoints to get service data retention for a service.
This commit is contained in:
@@ -5,11 +5,21 @@ from app.dao.dao_utils import transactional
|
|||||||
from app.models import ServiceDataRetention
|
from app.models import ServiceDataRetention
|
||||||
|
|
||||||
|
|
||||||
def get_service_data_retention(service_id):
|
def fetch_service_data_retention_by_id(service_id, data_retention_id):
|
||||||
data_retention = ServiceDataRetention.query.filter_by(service_id=service_id).all()
|
data_retention = ServiceDataRetention.query.filter_by(service_id=service_id, id=data_retention_id).first()
|
||||||
return data_retention
|
return data_retention
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_service_data_retention(service_id):
|
||||||
|
data_retention_list = ServiceDataRetention.query.filter_by(
|
||||||
|
service_id=service_id
|
||||||
|
).order_by(
|
||||||
|
# in the order that models.notification_types are created (email, sms, letter)
|
||||||
|
ServiceDataRetention.notification_type
|
||||||
|
).all()
|
||||||
|
return data_retention_list
|
||||||
|
|
||||||
|
|
||||||
@transactional
|
@transactional
|
||||||
def insert_service_data_retention(service_id, notification_type, days_of_retention):
|
def insert_service_data_retention(service_id, notification_type, days_of_retention):
|
||||||
new_data_retention = ServiceDataRetention(service_id=service_id,
|
new_data_retention = ServiceDataRetention(service_id=service_id,
|
||||||
|
|||||||
@@ -24,7 +24,12 @@ from app.dao.fact_notification_status_dao import (
|
|||||||
)
|
)
|
||||||
from app.dao.inbound_numbers_dao import dao_allocate_number_for_service
|
from app.dao.inbound_numbers_dao import dao_allocate_number_for_service
|
||||||
from app.dao.organisation_dao import dao_get_organisation_by_service_id
|
from app.dao.organisation_dao import dao_get_organisation_by_service_id
|
||||||
from app.dao.service_data_retention_dao import insert_service_data_retention, update_service_data_retention
|
from app.dao.service_data_retention_dao import (
|
||||||
|
fetch_service_data_retention,
|
||||||
|
fetch_service_data_retention_by_id,
|
||||||
|
insert_service_data_retention,
|
||||||
|
update_service_data_retention,
|
||||||
|
)
|
||||||
from app.dao.service_sms_sender_dao import (
|
from app.dao.service_sms_sender_dao import (
|
||||||
archive_sms_sender,
|
archive_sms_sender,
|
||||||
dao_add_sms_sender_for_service,
|
dao_add_sms_sender_for_service,
|
||||||
@@ -759,6 +764,18 @@ def is_service_name_unique():
|
|||||||
return jsonify(result=result), 200
|
return jsonify(result=result), 200
|
||||||
|
|
||||||
|
|
||||||
|
@service_blueprint.route('/<uuid:service_id>/data-retention', methods=['GET'])
|
||||||
|
def get_data_retention_for_service(service_id):
|
||||||
|
data_retention_list = fetch_service_data_retention(service_id)
|
||||||
|
return jsonify([data_retention.serialize() for data_retention in data_retention_list]), 200
|
||||||
|
|
||||||
|
|
||||||
|
@service_blueprint.route('/<uuid:service_id>/data-retention/<uuid:data_retention_id>', methods=['GET'])
|
||||||
|
def get_data_retention_for_service_by_id(service_id, data_retention_id):
|
||||||
|
data_retention = fetch_service_data_retention_by_id(service_id, data_retention_id)
|
||||||
|
return jsonify(data_retention.serialize() if data_retention else {}), 200
|
||||||
|
|
||||||
|
|
||||||
@service_blueprint.route('/<uuid:service_id>/data-retention', methods=['POST'])
|
@service_blueprint.route('/<uuid:service_id>/data-retention', methods=['POST'])
|
||||||
def create_service_data_retention(service_id):
|
def create_service_data_retention(service_id):
|
||||||
form = validate(request.get_json(), add_service_data_retention_request)
|
form = validate(request.get_json(), add_service_data_retention_request)
|
||||||
|
|||||||
@@ -4,8 +4,63 @@ from datetime import datetime
|
|||||||
import pytest
|
import pytest
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from app.dao.service_data_retention_dao import insert_service_data_retention, update_service_data_retention
|
from app.dao.service_data_retention_dao import (
|
||||||
|
fetch_service_data_retention,
|
||||||
|
insert_service_data_retention,
|
||||||
|
update_service_data_retention,
|
||||||
|
fetch_service_data_retention_by_id
|
||||||
|
)
|
||||||
from app.models import ServiceDataRetention
|
from app.models import ServiceDataRetention
|
||||||
|
from tests.app.db import create_service
|
||||||
|
|
||||||
|
|
||||||
|
def test_fetch_service_data_retention(sample_service):
|
||||||
|
email_data_retention = insert_service_data_retention(sample_service.id, 'email', 3)
|
||||||
|
letter_data_retention = insert_service_data_retention(sample_service.id, 'letter', 30)
|
||||||
|
sms_data_retention = insert_service_data_retention(sample_service.id, 'sms', 5)
|
||||||
|
|
||||||
|
list_of_data_retention = fetch_service_data_retention(sample_service.id)
|
||||||
|
|
||||||
|
assert len(list_of_data_retention) == 3
|
||||||
|
assert list_of_data_retention[0] == email_data_retention
|
||||||
|
assert list_of_data_retention[1] == sms_data_retention
|
||||||
|
assert list_of_data_retention[2] == letter_data_retention
|
||||||
|
|
||||||
|
|
||||||
|
def test_fetch_service_data_retention_only_returns_row_for_service(sample_service):
|
||||||
|
another_service = create_service(service_name="Another service")
|
||||||
|
email_data_retention = insert_service_data_retention(sample_service.id, 'email', 3)
|
||||||
|
letter_data_retention = insert_service_data_retention(sample_service.id, 'letter', 30)
|
||||||
|
insert_service_data_retention(another_service.id, 'sms', 5)
|
||||||
|
|
||||||
|
list_of_data_retention = fetch_service_data_retention(sample_service.id)
|
||||||
|
assert len(list_of_data_retention) == 2
|
||||||
|
assert list_of_data_retention[0] == email_data_retention
|
||||||
|
assert list_of_data_retention[1] == letter_data_retention
|
||||||
|
|
||||||
|
|
||||||
|
def test_fetch_service_data_retention_returns_empty_list_when_no_rows_for_service(sample_service):
|
||||||
|
empty_list = fetch_service_data_retention(sample_service.id)
|
||||||
|
assert not empty_list
|
||||||
|
|
||||||
|
|
||||||
|
def test_fetch_service_data_retention_by_id(sample_service):
|
||||||
|
email_data_retention = insert_service_data_retention(sample_service.id, 'email', 3)
|
||||||
|
insert_service_data_retention(sample_service.id, 'sms', 13)
|
||||||
|
result = fetch_service_data_retention_by_id(sample_service.id, email_data_retention.id)
|
||||||
|
assert result == email_data_retention
|
||||||
|
|
||||||
|
|
||||||
|
def test_fetch_service_data_retention_by_id_returns_none_if_not_found(sample_service):
|
||||||
|
result = fetch_service_data_retention_by_id(sample_service.id, uuid.uuid4())
|
||||||
|
assert not result
|
||||||
|
|
||||||
|
|
||||||
|
def test_fetch_service_data_retention_by_id_returns_none_if_id_not_for_service(sample_service):
|
||||||
|
another_service = create_service(service_name="Another service")
|
||||||
|
email_data_retention = insert_service_data_retention(sample_service.id, 'email', 3)
|
||||||
|
result = fetch_service_data_retention_by_id(another_service.id, email_data_retention.id)
|
||||||
|
assert not result
|
||||||
|
|
||||||
|
|
||||||
def test_insert_service_data_retention(sample_service):
|
def test_insert_service_data_retention(sample_service):
|
||||||
|
|||||||
@@ -6,6 +6,58 @@ from tests import create_authorization_header
|
|||||||
from tests.app.db import create_service_data_retention
|
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_id=sample_service.id)
|
||||||
|
email_data_retention = create_service_data_retention(service_id=sample_service.id, notification_type='email',
|
||||||
|
days_of_retention=10)
|
||||||
|
letter_data_retention = create_service_data_retention(service_id=sample_service.id, notification_type='letter',
|
||||||
|
days_of_retention=30)
|
||||||
|
|
||||||
|
response = client.get(
|
||||||
|
'/service/{}/data-retention'.format(str(sample_service.id)),
|
||||||
|
headers=[('Content-Type', 'application/json'), create_authorization_header()],
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
json_response = json.loads(response.get_data(as_text=True))
|
||||||
|
assert len(json_response) == 3
|
||||||
|
assert json_response[0] == email_data_retention.serialize()
|
||||||
|
assert json_response[1] == sms_data_retention.serialize()
|
||||||
|
assert json_response[2] == letter_data_retention.serialize()
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_service_data_retention_returns_empty_list(client, sample_service):
|
||||||
|
response = client.get(
|
||||||
|
'/service/{}/data-retention'.format(str(sample_service.id)),
|
||||||
|
headers=[('Content-Type', 'application/json'), create_authorization_header()],
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert len(json.loads(response.get_data(as_text=True))) == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_service_data_retention_by_id(client, sample_service):
|
||||||
|
sms_data_retention = create_service_data_retention(service_id=sample_service.id)
|
||||||
|
create_service_data_retention(service_id=sample_service.id, notification_type='email',
|
||||||
|
days_of_retention=10)
|
||||||
|
create_service_data_retention(service_id=sample_service.id, notification_type='letter',
|
||||||
|
days_of_retention=30)
|
||||||
|
response = client.get(
|
||||||
|
'/service/{}/data-retention/{}'.format(str(sample_service.id), sms_data_retention.id),
|
||||||
|
headers=[('Content-Type', 'application/json'), create_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(
|
||||||
|
'/service/{}/data-retention/{}'.format(str(sample_service.id), uuid.uuid4()),
|
||||||
|
headers=[('Content-Type', 'application/json'), create_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):
|
def test_create_service_data_retention(client, sample_service):
|
||||||
data = {
|
data = {
|
||||||
"notification_type": 'sms',
|
"notification_type": 'sms',
|
||||||
|
|||||||
Reference in New Issue
Block a user