mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-06 11:23:48 -05:00
148 lines
4.7 KiB
Python
148 lines
4.7 KiB
Python
from datetime import date
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
import werkzeug
|
|
|
|
from app.models.service import Service
|
|
from app.notify_client import NotifyAdminAPIClient
|
|
from app.notify_client.notification_api_client import notification_api_client
|
|
from tests import service_json
|
|
from tests.conftest import (
|
|
create_api_user_active,
|
|
create_platform_admin_user,
|
|
set_config,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize("method", ["put", "post", "delete"])
|
|
@pytest.mark.parametrize(
|
|
"user",
|
|
[
|
|
create_api_user_active(),
|
|
create_platform_admin_user(),
|
|
],
|
|
ids=["api_user", "platform_admin"],
|
|
)
|
|
@pytest.mark.parametrize(
|
|
"service", [service_json(active=True), None], ids=["active_service", "no_service"]
|
|
)
|
|
def test_active_service_can_be_modified(notify_admin, method, user, service):
|
|
api_client = NotifyAdminAPIClient()
|
|
|
|
with notify_admin.test_request_context() as request_context, notify_admin.test_client() as client:
|
|
client.login(user)
|
|
request_context.service = Service(service)
|
|
|
|
with patch.object(api_client, "request") as request:
|
|
ret = getattr(api_client, method)("url", "data")
|
|
|
|
assert request.called
|
|
assert ret == request.return_value
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("arg", "expected_result"),
|
|
[
|
|
(
|
|
"('/user/c5f8a5c9-56d5-4fa9-8c30-3449ae10c072/verify/code',)",
|
|
True,
|
|
),
|
|
("('/user/get-login-gov-user',)", True),
|
|
(
|
|
"('/service/blahblahblah',)",
|
|
False,
|
|
),
|
|
],
|
|
)
|
|
def test_is_calling_signin_url(arg, expected_result):
|
|
api_client = NotifyAdminAPIClient()
|
|
result = api_client.is_calling_signin_url(arg)
|
|
assert result == expected_result
|
|
|
|
|
|
@pytest.mark.parametrize("method", ["put", "post", "delete"])
|
|
def test_inactive_service_cannot_be_modified_by_normal_user(
|
|
notify_admin, api_user_active, method
|
|
):
|
|
api_client = NotifyAdminAPIClient()
|
|
|
|
with notify_admin.test_request_context() as request_context, notify_admin.test_client() as client:
|
|
client.login(api_user_active)
|
|
request_context.service = Service(service_json(active=False))
|
|
|
|
with patch.object(api_client, "request") as request:
|
|
with pytest.raises(werkzeug.exceptions.Forbidden):
|
|
getattr(api_client, method)("url", "data")
|
|
|
|
assert not request.called
|
|
|
|
|
|
@pytest.mark.parametrize("method", ["put", "post", "delete"])
|
|
def test_inactive_service_can_be_modified_by_platform_admin(
|
|
notify_admin, platform_admin_user, method
|
|
):
|
|
api_client = NotifyAdminAPIClient()
|
|
|
|
with notify_admin.test_request_context() as request_context, notify_admin.test_client() as client:
|
|
client.login(platform_admin_user)
|
|
request_context.service = Service(service_json(active=False))
|
|
|
|
with patch.object(api_client, "request") as request:
|
|
ret = getattr(api_client, method)("url", "data")
|
|
|
|
assert request.called
|
|
assert ret == request.return_value
|
|
|
|
|
|
def test_generate_headers_sets_standard_headers(notify_admin):
|
|
api_client = NotifyAdminAPIClient()
|
|
with set_config(notify_admin, "ROUTE_SECRET_KEY_1", "proxy-secret"):
|
|
api_client.init_app(notify_admin)
|
|
|
|
# with patch('app.notify_client.has_request_context', return_value=False):
|
|
headers = api_client.generate_headers("api_token")
|
|
|
|
assert set(headers.keys()) == {
|
|
"Authorization",
|
|
"Content-type",
|
|
"User-agent",
|
|
"X-Custom-Forwarder",
|
|
}
|
|
assert headers["Authorization"] == "Bearer api_token"
|
|
assert headers["Content-type"] == "application/json"
|
|
assert headers["User-agent"].startswith("NOTIFY-API-PYTHON-CLIENT")
|
|
assert headers["X-Custom-Forwarder"] == "proxy-secret"
|
|
|
|
|
|
def test_generate_headers_sets_request_id_if_in_request_context(notify_admin):
|
|
api_client = NotifyAdminAPIClient()
|
|
api_client.init_app(notify_admin)
|
|
|
|
with notify_admin.test_request_context() as request_context:
|
|
headers = api_client.generate_headers("api_token")
|
|
|
|
assert set(headers.keys()) == {
|
|
"Authorization",
|
|
"Content-type",
|
|
"User-agent",
|
|
"X-Custom-Forwarder",
|
|
"X-B3-TraceId",
|
|
"X-B3-SpanId",
|
|
}
|
|
assert headers["X-B3-TraceId"] == request_context.request.request_id
|
|
assert headers["X-B3-SpanId"] == request_context.request.span_id
|
|
|
|
|
|
def test_get_notification_status_by_service(mocker):
|
|
mock_get = mocker.patch.object(notification_api_client, "get")
|
|
start_date = date(2019, 4, 1)
|
|
end_date = date(2019, 4, 30)
|
|
|
|
notification_api_client.get_notification_status_by_service(start_date, end_date)
|
|
|
|
mock_get.assert_called_once_with(
|
|
url="service/monthly-data-by-service",
|
|
params={"start_date": "2019-04-01", "end_date": "2019-04-30"},
|
|
)
|