Files
notifications-api/tests/notifications-python-client/test_base.py
Kenneth Kehl 7ef5612308 more tests
2025-07-01 10:27:44 -07:00

76 lines
2.6 KiB
Python

import json
from unittest.mock import MagicMock, patch
import pytest
from notifications_python_client.base import BaseAPIClient
from notifications_python_client.errors import HTTPError
def get_api_key():
fake_service_id = "12345678-1234-1234-1234-123456789abc"
fake_key_part = "abcdef12-3456-7890-abcd-ef1234567890"
api_key = "x" + fake_service_id + fake_key_part
return api_key
@pytest.fixture
def client():
return BaseAPIClient(api_key=get_api_key())
def test_init_sets_values_correctly():
api_key = get_api_key()
client = BaseAPIClient(api_key=api_key)
assert client.base_url == "https://api.notifications.service.gov.uk"
assert client.api_key == api_key[-36:]
assert client.service_id == api_key[-73:-37]
assert client.timeout == 30
@patch("notifications_python_client.base.create_jwt_token")
@patch("notifications_python_client.base.requests.Session.request")
def test_get_request_success(mock_request, mock_jwt, client):
mock_jwt.return_value = "jwt-token"
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.json.return_value = {"foo": "bar"}
mock_request.return_value = mock_response
result = client.get("/test")
assert result == {"foo": "bar"}
mock_jwt.assert_called_once_with(client.api_key, client.service_id)
mock_request.assert_called_once()
assert mock_request.call_args[1]["headers"]["Authorization"] == "Bearer jwt-token"
@patch("notifications_python_client.base.create_jwt_token")
@patch("notifications_python_client.base.requests.Session.request")
def test_post_request_with_data(mock_request, mock_jwt, client):
mock_jwt.return_value = "jwt-token"
mock_response = MagicMock()
mock_response.status_code = 201
mock_response.json.return_value = {"id": "123"}
mock_request.return_value = mock_response
result = client.post("/send", data={"message": "hello"})
assert result == {"id": "123"}
args, kwargs = mock_request.call_args
assert kwargs["data"] == json.dumps({"message": "hello"})
assert "Authorization" in kwargs["headers"]
@patch("notifications_python_client.base.create_jwt_token")
@patch("notifications_python_client.base.requests.Session.request")
def test_request_raises_http_error(mock_request, mock_jwt, client):
from requests.exceptions import HTTPError as RequestsHTTPError
mock_jwt.return_value = "jwt-token"
error_response = MagicMock
error_response.status_code = 400
mock_exception = RequestsHTTPError("bad", response=error_response)
mock_request.side_effect = mock_exception
with pytest.raises(HTTPError):
client.get("/fail")