Files
notifications-api/tests/app/dao/test_service_callback_api_dao.py

183 lines
7.0 KiB
Python
Raw Normal View History

2017-11-29 15:58:11 +00:00
import uuid
import pytest
from sqlalchemy.exc import SQLAlchemyError
from app import encryption
from app.dao.service_callback_api_dao import (
get_service_callback_api,
2021-03-10 13:55:06 +00:00
get_service_delivery_status_callback_api_for_service,
reset_service_callback_api,
save_service_callback_api,
)
2017-11-29 15:58:11 +00:00
from app.models import ServiceCallbackApi
from tests.app.db import create_service_callback_api
def test_save_service_callback_api(sample_service):
service_callback_api = ServiceCallbackApi(
service_id=sample_service.id,
url="https://some_service/callback_endpoint",
bearer_token="some_unique_string",
2023-08-29 14:54:30 -07:00
updated_by_id=sample_service.users[0].id,
2017-11-29 15:58:11 +00:00
)
save_service_callback_api(service_callback_api)
results = ServiceCallbackApi.query.all()
assert len(results) == 1
callback_api = results[0]
assert callback_api.id is not None
assert callback_api.service_id == sample_service.id
assert callback_api.updated_by_id == sample_service.users[0].id
assert callback_api.url == "https://some_service/callback_endpoint"
assert callback_api.bearer_token == "some_unique_string"
assert callback_api._bearer_token != "some_unique_string"
assert callback_api.updated_at is None
2023-08-29 14:54:30 -07:00
versioned = (
ServiceCallbackApi.get_history_model().query.filter_by(id=callback_api.id).one()
)
2017-11-29 15:58:11 +00:00
assert versioned.id == callback_api.id
assert versioned.service_id == sample_service.id
assert versioned.updated_by_id == sample_service.users[0].id
assert versioned.url == "https://some_service/callback_endpoint"
assert encryption.decrypt(versioned._bearer_token) == "some_unique_string"
assert versioned.updated_at is None
assert versioned.version == 1
def test_save_service_callback_api_fails_if_service_does_not_exist(notify_db_session):
2017-11-29 15:58:11 +00:00
service_callback_api = ServiceCallbackApi(
service_id=uuid.uuid4(),
url="https://some_service/callback_endpoint",
bearer_token="some_unique_string",
2023-08-29 14:54:30 -07:00
updated_by_id=uuid.uuid4(),
2017-11-29 15:58:11 +00:00
)
with pytest.raises(SQLAlchemyError):
save_service_callback_api(service_callback_api)
def test_update_service_callback_api_unique_constraint(sample_service):
service_callback_api = ServiceCallbackApi(
service_id=sample_service.id,
url="https://some_service/callback_endpoint",
bearer_token="some_unique_string",
updated_by_id=sample_service.users[0].id,
2023-08-29 14:54:30 -07:00
callback_type="delivery_status",
)
save_service_callback_api(service_callback_api)
another = ServiceCallbackApi(
service_id=sample_service.id,
url="https://some_service/another_callback_endpoint",
bearer_token="different_string",
updated_by_id=sample_service.users[0].id,
2023-08-29 14:54:30 -07:00
callback_type="delivery_status",
)
with pytest.raises(expected_exception=SQLAlchemyError):
save_service_callback_api(another)
def test_update_service_callback_can_add_two_api_of_different_types(sample_service):
delivery_status = ServiceCallbackApi(
service_id=sample_service.id,
url="https://some_service/callback_endpoint",
bearer_token="some_unique_string",
updated_by_id=sample_service.users[0].id,
2023-08-29 14:54:30 -07:00
callback_type="delivery_status",
)
save_service_callback_api(delivery_status)
complaint = ServiceCallbackApi(
service_id=sample_service.id,
url="https://some_service/another_callback_endpoint",
bearer_token="different_string",
updated_by_id=sample_service.users[0].id,
2023-08-29 14:54:30 -07:00
callback_type="complaint",
)
save_service_callback_api(complaint)
results = ServiceCallbackApi.query.order_by(ServiceCallbackApi.callback_type).all()
assert len(results) == 2
assert results[0].serialize() == complaint.serialize()
assert results[1].serialize() == delivery_status.serialize()
2017-11-29 15:58:11 +00:00
def test_update_service_callback_api(sample_service):
service_callback_api = ServiceCallbackApi(
service_id=sample_service.id,
url="https://some_service/callback_endpoint",
bearer_token="some_unique_string",
2023-08-29 14:54:30 -07:00
updated_by_id=sample_service.users[0].id,
2017-11-29 15:58:11 +00:00
)
save_service_callback_api(service_callback_api)
results = ServiceCallbackApi.query.all()
assert len(results) == 1
saved_callback_api = results[0]
2023-08-29 14:54:30 -07:00
reset_service_callback_api(
saved_callback_api,
updated_by_id=sample_service.users[0].id,
url="https://some_service/changed_url",
)
2017-11-29 15:58:11 +00:00
updated_results = ServiceCallbackApi.query.all()
assert len(updated_results) == 1
updated = updated_results[0]
assert updated.id is not None
assert updated.service_id == sample_service.id
assert updated.updated_by_id == sample_service.users[0].id
assert updated.url == "https://some_service/changed_url"
assert updated.bearer_token == "some_unique_string"
assert updated._bearer_token != "some_unique_string"
assert updated.updated_at is not None
2023-08-29 14:54:30 -07:00
versioned_results = (
ServiceCallbackApi.get_history_model()
.query.filter_by(id=saved_callback_api.id)
.all()
)
2017-11-29 15:58:11 +00:00
assert len(versioned_results) == 2
for x in versioned_results:
if x.version == 1:
assert x.url == "https://some_service/callback_endpoint"
assert not x.updated_at
elif x.version == 2:
assert x.url == "https://some_service/changed_url"
assert x.updated_at
else:
pytest.fail("version should not exist")
assert x.id is not None
assert x.service_id == sample_service.id
assert x.updated_by_id == sample_service.users[0].id
assert encryption.decrypt(x._bearer_token) == "some_unique_string"
def test_get_service_callback_api(sample_service):
service_callback_api = ServiceCallbackApi(
service_id=sample_service.id,
url="https://some_service/callback_endpoint",
bearer_token="some_unique_string",
2023-08-29 14:54:30 -07:00
updated_by_id=sample_service.users[0].id,
2017-11-29 15:58:11 +00:00
)
save_service_callback_api(service_callback_api)
callback_api = get_service_callback_api(service_callback_api.id, sample_service.id)
assert callback_api.id is not None
assert callback_api.service_id == sample_service.id
assert callback_api.updated_by_id == sample_service.users[0].id
assert callback_api.url == "https://some_service/callback_endpoint"
assert callback_api.bearer_token == "some_unique_string"
assert callback_api._bearer_token != "some_unique_string"
assert callback_api.updated_at is None
def test_get_service_delivery_status_callback_api_for_service(sample_service):
2017-11-29 15:58:11 +00:00
service_callback_api = create_service_callback_api(service=sample_service)
result = get_service_delivery_status_callback_api_for_service(sample_service.id)
2017-11-29 15:58:11 +00:00
assert result.id == service_callback_api.id
assert result.url == service_callback_api.url
assert result.bearer_token == service_callback_api.bearer_token
assert result.created_at == service_callback_api.created_at
assert result.updated_at == service_callback_api.updated_at
assert result.updated_by_id == service_callback_api.updated_by_id