diff --git a/app/utils.py b/app/utils.py index 58ccc6117..aa104e15a 100644 --- a/app/utils.py +++ b/app/utils.py @@ -164,8 +164,15 @@ def generate_notifications_csv(**kwargs): def format_notification_for_csv(notification): from app import format_datetime_24h, format_notification_status + # row_number can be 0 so we need to check for it + row_num = notification.get('job_row_number') + if row_num is not None and row_num >= 0: + row_num += 1 + else: + row_num = '' + return { - 'Row number': int(notification['job_row_number']) + 2 if notification.get('job_row_number') else '', + 'Row number': row_num, 'Recipient': notification['to'], 'Template': notification['template']['name'], 'Type': notification['template']['template_type'], diff --git a/tests/app/test_utils.py b/tests/app/test_utils.py index d944e786d..2c8ad1d83 100644 --- a/tests/app/test_utils.py +++ b/tests/app/test_utils.py @@ -124,3 +124,27 @@ def test_generate_notifications_csv_calls_twice_if_next_link(mocker): # mock_calls[0][2] is the kwargs from first call assert mock_get_notifications.mock_calls[0][2]['page'] == 1 assert mock_get_notifications.mock_calls[1][2]['page'] == 2 + + +@pytest.mark.parametrize('row_number, expected_result', [ + (None, ''), + (0, '1'), + (1, '2'), + (300, '301') +]) +def test_generate_notifications_csv_formats_row_number_correctly(mocker, row_number, expected_result): + service_id = '1234' + response_with_job_row_zero = notification_json(service_id, rows=1, with_links=True, job_row_number=row_number) + mocker.patch( + 'app.notification_api_client.get_notifications_for_service', + side_effect=[ + response_with_job_row_zero + ] + ) + + csv_content = generate_notifications_csv(service_id=service_id) + csv = DictReader(StringIO('\n'.join(csv_content))) + csv_rows = list(csv) + + assert len(csv_rows) == 1 + assert csv_rows[0].get('Row number') == expected_result