Skip to content

Commit 3ec6031

Browse files
committed
feat: 315502 Add more tests to fill the gap
1 parent d40b5e1 commit 3ec6031

2 files changed

Lines changed: 54 additions & 0 deletions

File tree

tests/notifications/test_bitcaster_notifications.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import requests
55

66
from country_workspace.notifications.bitcaster_client import BitcasterClient, RetryableBitcasterError
7+
from country_workspace.notifications.notifier import send_notification_event
78
from country_workspace.notifications.tasks import send_bitcaster_event_task
89

910

@@ -59,6 +60,17 @@ def test_trigger_event_raises_retryable_error_for_http_5xx(settings, mocker) ->
5960
BitcasterClient().trigger_event("data_imported", {"program_id": 42})
6061

6162

63+
def test_trigger_event_reraises_http_error(settings, mocker) -> None:
64+
_configure_bitcaster_settings(settings)
65+
post_mock = mocker.patch("country_workspace.notifications.bitcaster_client.requests.post")
66+
response = Mock(status_code=400)
67+
response.raise_for_status.side_effect = requests.exceptions.HTTPError("bad request")
68+
post_mock.return_value = response
69+
70+
with pytest.raises(requests.exceptions.HTTPError, match="bad request"):
71+
BitcasterClient().trigger_event("data_imported", {"program_id": 42})
72+
73+
6274
def test_trigger_event_returns_false_when_client_not_configured(settings) -> None:
6375
settings.BITCASTER_API_URL = ""
6476
settings.BITCASTER_API_KEY = ""
@@ -69,6 +81,21 @@ def test_trigger_event_returns_false_when_client_not_configured(settings) -> Non
6981
assert BitcasterClient().trigger_event("data_imported", {"program_id": 12}) is False
7082

7183

84+
def test_send_notification_event_delegates_to_backend(mocker) -> None:
85+
backend = Mock()
86+
backend.trigger_event.return_value = True
87+
get_backend = mocker.patch(
88+
"country_workspace.notifications.notifier.get_notification_backend",
89+
return_value=backend,
90+
)
91+
92+
result = send_notification_event("rdi_pushed", {"program_id": 7})
93+
94+
assert result is True
95+
get_backend.assert_called_once_with()
96+
backend.trigger_event.assert_called_once_with("rdi_pushed", {"program_id": 7})
97+
98+
7299
def test_send_bitcaster_event_task_retries_on_retryable_client_error(mocker) -> None:
73100
backend = Mock(is_configured=True)
74101
retry_mock = mocker.patch.object(send_bitcaster_event_task, "retry", side_effect=RuntimeError("retry"))
@@ -96,6 +123,17 @@ def test_send_bitcaster_event_task_does_not_retry_on_http_400(mocker) -> None:
96123
retry_mock.assert_not_called()
97124

98125

126+
def test_send_bitcaster_event_task_logs_warning_when_backend_returns_false(mocker) -> None:
127+
backend = Mock(is_configured=True)
128+
warning = mocker.patch("country_workspace.notifications.tasks.logger.warning")
129+
mocker.patch("country_workspace.notifications.tasks.get_notification_backend", return_value=backend)
130+
mocker.patch("country_workspace.notifications.tasks.send_notification_event", return_value=False)
131+
132+
send_bitcaster_event_task.run("data_imported", {"program_id": 12})
133+
134+
warning.assert_any_call("Bitcaster client returned false for event '%s'", "data_imported")
135+
136+
99137
def test_send_bitcaster_event_task_skips_when_backend_not_configured(mocker) -> None:
100138
backend = Mock(is_configured=False)
101139
send_event = mocker.patch("country_workspace.notifications.tasks.send_notification_event")

tests/workspace/actions/test_ws_validate.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,19 @@ def test_create_validation_jobs_sets_context_and_validation_metadata(program, fo
201201
assert create_mock.call_args.kwargs["config"]["kwargs"]["validation_total_chunks"] == 1
202202
assert create_mock.call_args.kwargs["config"]["kwargs"]["validation_run_id"]
203203
job_mock.queue.assert_called_once()
204+
205+
206+
@pytest.mark.django_db
207+
def test_create_validation_jobs_returns_none_for_empty_queryset(program, force_migrated_records, mocker):
208+
create_mock = mocker.patch("country_workspace.workspaces.admin.cleaners.validate.AsyncJob.objects.create")
209+
210+
result = create_validation_jobs(
211+
description="Validate records",
212+
owner=mocker.Mock(),
213+
program=program,
214+
queryset=Individual.objects.none(),
215+
context="total",
216+
)
217+
218+
assert result is None
219+
create_mock.assert_not_called()

0 commit comments

Comments
 (0)