mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-20 14:29:51 -04:00
Move stats to the model
The API clients should just deal with calling the API and returning the data from it. Inferring things from the data is more logically done at the model layer. But we couldn’t do that before, because we didn’t have a model layer for jobs.
This commit is contained in:
@@ -3,6 +3,7 @@ from unittest.mock import ANY
|
||||
|
||||
import pytest
|
||||
|
||||
from app.models.job import Job, PaginatedJobs
|
||||
from app.notify_client.job_api_client import JobApiClient
|
||||
|
||||
|
||||
@@ -113,16 +114,15 @@ def test_client_parses_job_stats(mocker):
|
||||
|
||||
expected_url = '/service/{}/job/{}'.format(service_id, job_id)
|
||||
|
||||
client = JobApiClient()
|
||||
mock_get = mocker.patch('app.notify_client.job_api_client.JobApiClient.get', return_value=expected_data)
|
||||
|
||||
result = client.get_job(service_id, job_id)
|
||||
result = Job.from_id(job_id, service_id=service_id)
|
||||
|
||||
mock_get.assert_called_once_with(url=expected_url, params={})
|
||||
assert result['data']['notifications_requested'] == 80
|
||||
assert result['data']['notifications_sent'] == 50
|
||||
assert result['data']['notification_count'] == 80
|
||||
assert result['data']['notifications_failed'] == 40
|
||||
assert result.notifications_requested == 80
|
||||
assert result.notifications_sent == 50
|
||||
assert result.notification_count == 80
|
||||
assert result.notifications_failed == 40
|
||||
|
||||
|
||||
def test_client_parses_empty_job_stats(mocker):
|
||||
@@ -149,16 +149,15 @@ def test_client_parses_empty_job_stats(mocker):
|
||||
|
||||
expected_url = '/service/{}/job/{}'.format(service_id, job_id)
|
||||
|
||||
client = JobApiClient()
|
||||
mock_get = mocker.patch('app.notify_client.job_api_client.JobApiClient.get', return_value=expected_data)
|
||||
|
||||
result = client.get_job(service_id, job_id)
|
||||
result = Job.from_id(job_id, service_id=service_id)
|
||||
|
||||
mock_get.assert_called_once_with(url=expected_url, params={})
|
||||
assert result['data']['notifications_requested'] == 0
|
||||
assert result['data']['notifications_sent'] == 0
|
||||
assert result['data']['notification_count'] == 80
|
||||
assert result['data']['notifications_failed'] == 0
|
||||
assert result.notifications_requested == 0
|
||||
assert result.notifications_sent == 0
|
||||
assert result.notification_count == 80
|
||||
assert result.notifications_failed == 0
|
||||
|
||||
|
||||
def test_client_parses_job_stats_for_service(mocker):
|
||||
@@ -221,22 +220,21 @@ def test_client_parses_job_stats_for_service(mocker):
|
||||
|
||||
expected_url = '/service/{}/job'.format(service_id)
|
||||
|
||||
client = JobApiClient()
|
||||
mock_get = mocker.patch('app.notify_client.job_api_client.JobApiClient.get', return_value=expected_data)
|
||||
|
||||
result = client.get_jobs(service_id)
|
||||
result = PaginatedJobs(service_id)
|
||||
|
||||
mock_get.assert_called_once_with(url=expected_url, params={'page': 1})
|
||||
assert result['data'][0]['id'] == job_1_id
|
||||
assert result['data'][0]['notifications_requested'] == 80
|
||||
assert result['data'][0]['notifications_sent'] == 50
|
||||
assert result['data'][0]['notification_count'] == 80
|
||||
assert result['data'][0]['notifications_failed'] == 40
|
||||
assert result['data'][1]['id'] == job_2_id
|
||||
assert result['data'][1]['notifications_requested'] == 40
|
||||
assert result['data'][1]['notifications_sent'] == 25
|
||||
assert result['data'][1]['notification_count'] == 40
|
||||
assert result['data'][1]['notifications_failed'] == 20
|
||||
mock_get.assert_called_once_with(url=expected_url, params={'page': 1, 'statuses': ANY})
|
||||
assert result[0].id == job_1_id
|
||||
assert result[0].notifications_requested == 80
|
||||
assert result[0].notifications_sent == 50
|
||||
assert result[0].notification_count == 80
|
||||
assert result[0].notifications_failed == 40
|
||||
assert result[1].id == job_2_id
|
||||
assert result[1].notifications_requested == 40
|
||||
assert result[1].notifications_sent == 25
|
||||
assert result[1].notification_count == 40
|
||||
assert result[1].notifications_failed == 20
|
||||
|
||||
|
||||
def test_client_parses_empty_job_stats_for_service(mocker):
|
||||
@@ -281,22 +279,21 @@ def test_client_parses_empty_job_stats_for_service(mocker):
|
||||
|
||||
expected_url = '/service/{}/job'.format(service_id)
|
||||
|
||||
client = JobApiClient()
|
||||
mock_get = mocker.patch('app.notify_client.job_api_client.JobApiClient.get', return_value=expected_data)
|
||||
|
||||
result = client.get_jobs(service_id)
|
||||
result = PaginatedJobs(service_id)
|
||||
|
||||
mock_get.assert_called_once_with(url=expected_url, params={'page': 1})
|
||||
assert result['data'][0]['id'] == job_1_id
|
||||
assert result['data'][0]['notifications_requested'] == 0
|
||||
assert result['data'][0]['notifications_sent'] == 0
|
||||
assert result['data'][0]['notification_count'] == 80
|
||||
assert result['data'][0]['notifications_failed'] == 0
|
||||
assert result['data'][1]['id'] == job_2_id
|
||||
assert result['data'][1]['notifications_requested'] == 0
|
||||
assert result['data'][1]['notifications_sent'] == 0
|
||||
assert result['data'][1]['notification_count'] == 40
|
||||
assert result['data'][1]['notifications_failed'] == 0
|
||||
mock_get.assert_called_once_with(url=expected_url, params={'page': 1, 'statuses': ANY})
|
||||
assert result[0].id == job_1_id
|
||||
assert result[0].notifications_requested == 0
|
||||
assert result[0].notifications_sent == 0
|
||||
assert result[0].notification_count == 80
|
||||
assert result[0].notifications_failed == 0
|
||||
assert result[1].id == job_2_id
|
||||
assert result[1].notifications_requested == 0
|
||||
assert result[1].notifications_sent == 0
|
||||
assert result[1].notification_count == 40
|
||||
assert result[1].notifications_failed == 0
|
||||
|
||||
|
||||
def test_cancel_job(mocker):
|
||||
|
||||
@@ -128,25 +128,25 @@ def test_service_statistics_by_state():
|
||||
(1, 4, 20)
|
||||
])
|
||||
def test_add_rate_to_job_calculates_rate(failed, delivered, expected_failure_rate):
|
||||
resp = Job(
|
||||
{
|
||||
'notifications_failed': failed,
|
||||
'notifications_delivered': delivered,
|
||||
'id': 'foo'
|
||||
}
|
||||
)
|
||||
resp = Job({
|
||||
'statistics': [
|
||||
{'status': 'failed', 'count': failed},
|
||||
{'status': 'delivered', 'count': delivered},
|
||||
],
|
||||
'id': 'foo',
|
||||
})
|
||||
|
||||
assert resp.failure_rate == expected_failure_rate
|
||||
|
||||
|
||||
def test_add_rate_to_job_preserves_initial_fields():
|
||||
resp = Job(
|
||||
{
|
||||
'notifications_failed': 0,
|
||||
'notifications_delivered': 0,
|
||||
'id': 'foo'
|
||||
}
|
||||
)
|
||||
resp = Job({
|
||||
'statistics': [
|
||||
{'status': 'failed', 'count': 0},
|
||||
{'status': 'delivered', 'count': 0},
|
||||
],
|
||||
'id': 'foo',
|
||||
})
|
||||
|
||||
assert resp.notifications_failed == resp.notifications_delivered == resp.failure_rate == 0
|
||||
assert resp.id == 'foo'
|
||||
|
||||
Reference in New Issue
Block a user