def test_get_contact_list_counts_jobs( sample_template, admin_request, days_of_email_retention, expected_job_count, ): if days_of_email_retention: create_service_data_retention(sample_template.service, 'email', days_of_email_retention) # This should be ignored because it’s another template type create_service_data_retention(sample_template.service, 'sms', 1) contact_list_1 = create_service_contact_list( service=sample_template.service) contact_list_2 = create_service_contact_list( service=sample_template.service) for i in range(10): create_job(template=sample_template, contact_list_id=contact_list_2.id, created_at=datetime.utcnow() - timedelta(days=i)) response = admin_request.get('service.get_contact_list', service_id=contact_list_1.service_id) assert len(response) == 2 assert response[0]['id'] == str(contact_list_2.id) assert response[0]['recent_job_count'] == expected_job_count assert response[0]['has_jobs'] is True assert response[1]['id'] == str(contact_list_1.id) assert response[1]['recent_job_count'] == 0 assert response[1]['has_jobs'] is False
def test_archive_contact_list_by_id(mocker, admin_request, sample_service): mock_s3 = mocker.patch('app.service.rest.s3.remove_contact_list_from_s3') service_1 = create_service(service_name='Service under test') template_1 = create_template(service=service_1) expected_list = create_service_contact_list(service=service_1) other_list = create_service_contact_list(service=service_1) # Job linked to the contact list we’re deleting job_1 = create_job(template=template_1, contact_list_id=expected_list.id) # Other jobs and lists shouldn’t be affected job_2 = create_job(template=template_1, contact_list_id=other_list.id) job_3 = create_job(template=template_1) admin_request.delete( 'service.delete_contact_list_by_id', service_id=service_1.id, contact_list_id=expected_list.id, ) assert job_1.contact_list_id == expected_list.id assert expected_list.archived is True assert job_2.contact_list_id == other_list.id assert other_list.archived is False assert job_3.contact_list_id is None mock_s3.assert_called_once_with( expected_list.service.id, expected_list.id, )
def test_dao_get_contact_list_by_id(admin_request, sample_service): service_1 = create_service(service_name='Service under test') expected_list_1 = create_service_contact_list(service=service_1) create_service_contact_list(service=service_1) response = admin_request.get('service.get_contact_list_by_id', service_id=service_1.id, contact_list_id=expected_list_1.id) assert response == expected_list_1.serialize()
def test_dao_get_contact_lists(notify_db_session): contact_list = create_service_contact_list() create_service_contact_list( service=contact_list.service, archived=True, ) fetched_list = dao_get_contact_lists(contact_list.service_id) assert len(fetched_list) == 1 assert fetched_list[0] == contact_list
def test_dao_get_contact_list_by_id_does_not_return_if_contact_list_id_for_another_service( admin_request, sample_service): service_1 = create_service(service_name='Service requesting list') service_2 = create_service(service_name='Service that owns the list') create_service_contact_list(service=service_1) list_2 = create_service_contact_list(service=service_2) response = admin_request.get('service.get_contact_list_by_id', service_id=service_1.id, contact_list_id=list_2.id, _expected_status=404) assert response['message'] == "No result found"
def test_create_job_with_contact_list_id( client, mocker, sample_template, fake_uuid, contact_list_archived, ): mocker.patch('app.celery.tasks.process_job.apply_async') mocker.patch('app.job.rest.get_job_metadata_from_s3', return_value={ 'template_id': str(sample_template.id) }) contact_list = create_service_contact_list(archived=contact_list_archived) data = { 'id': fake_uuid, 'valid': 'True', 'original_file_name': contact_list.original_file_name, 'created_by': str(sample_template.service.users[0].id), 'notification_count': 100, 'contact_list_id': str(contact_list.id), } response = client.post( f'/service/{sample_template.service_id}/job', data=json.dumps(data), headers=[('Content-Type', 'application/json'), create_authorization_header()]) resp_json = response.get_json() assert response.status_code == 201 assert resp_json['data']['contact_list_id'] == str(contact_list.id) assert resp_json['data']['original_file_name'] == 'EmergencyContactList.xls'
def test_dao_get_archived_contact_list_by_id(admin_request): contact_list = create_service_contact_list(archived=True) admin_request.get( 'service.get_contact_list_by_id', service_id=contact_list.service.id, contact_list_id=contact_list.id, _expected_status=404, )
def test_get_contact_list(admin_request, notify_db_session): contact_list = create_service_contact_list() response = admin_request.get('service.get_contact_list', service_id=contact_list.service_id) assert len(response) == 1 assert response[0] == contact_list.serialize()
def test_get_jobs_by_contact_list(admin_request, sample_template): contact_list = create_service_contact_list() create_job(template=sample_template) create_job(template=sample_template, contact_list_id=contact_list.id) resp_json = admin_request.get( 'job.get_jobs_by_service', service_id=sample_template.service_id, contact_list_id=contact_list.id, ) assert len(resp_json['data']) == 1
def test_get_jobs_for_service_by_contact_list(sample_template): contact_list = create_service_contact_list() job_1 = create_job(sample_template) job_2 = create_job(sample_template, contact_list_id=contact_list.id) assert dao_get_jobs_by_service_id(sample_template.service.id).items == [ job_2, job_1, ] assert dao_get_jobs_by_service_id( sample_template.service.id, contact_list_id=contact_list.id, ).items == [ job_2, ]
def test_archive_contact_list_by_id_for_different_service(mocker, admin_request, sample_service): mock_s3 = mocker.patch('app.service.rest.s3.remove_contact_list_from_s3') service_1 = create_service(service_name='Service under test') service_2 = create_service(service_name='Other service') contact_list = create_service_contact_list(service=service_1) assert ServiceContactList.query.count() == 1 admin_request.delete( 'service.delete_contact_list_by_id', service_id=service_2.id, contact_list_id=contact_list.id, _expected_status=404, ) assert ServiceContactList.query.count() == 1 assert mock_s3.called is False
def test_archive_contact_list_when_unused(mocker, admin_request, sample_service): mock_s3 = mocker.patch('app.service.rest.s3.remove_contact_list_from_s3') service = create_service(service_name='Service under test') expected_list = create_service_contact_list(service=service) assert ServiceContactList.query.count() == 1 admin_request.delete('service.delete_contact_list_by_id', service_id=service.id, contact_list_id=expected_list.id) assert ServiceContactList.query.count() == 1 assert expected_list.archived is True mock_s3.assert_called_once_with( expected_list.service.id, expected_list.id, )
def test_get_contact_list_returns_for_service(admin_request, notify_db_session): service_1 = create_service(service_name='Service under test') service_2 = create_service(service_name='Service should return results') expected_list_1 = create_service_contact_list(service=service_1) expected_list_2 = create_service_contact_list(service=service_1) # not included in results create_service_contact_list(service=service_2) create_service_contact_list(service=service_1, archived=True) response = admin_request.get('service.get_contact_list', service_id=service_1.id) assert len(response) == 2 assert response[0] == expected_list_2.serialize() assert response[1] == expected_list_1.serialize()
def test_get_uploads_for_service(sample_template): create_service_data_retention(sample_template.service, 'sms', days_of_retention=9) contact_list = create_service_contact_list() # Jobs created from contact lists should be filtered out create_job(sample_template, contact_list_id=contact_list.id) job = create_job(sample_template, processing_started=datetime.utcnow()) letter_template = create_uploaded_template(sample_template.service) letter = create_uploaded_letter(letter_template, sample_template.service) other_service = create_service(service_name="other service") other_template = create_template(service=other_service) other_job = create_job(other_template, processing_started=datetime.utcnow()) other_letter_template = create_uploaded_template(other_service) create_uploaded_letter(other_letter_template, other_service) uploads_from_db = dao_get_uploads_by_service_id(job.service_id).items other_uploads_from_db = dao_get_uploads_by_service_id(other_job.service_id).items assert len(uploads_from_db) == 2 assert uploads_from_db[0] == ( None, 'Uploaded letters', 1, 'letter', None, letter.created_at.replace(hour=17, minute=30, second=0, microsecond=0), None, letter.created_at.replace(hour=17, minute=30, second=0, microsecond=0), None, 'letter_day', None, ) assert uploads_from_db[1] == ( job.id, job.original_file_name, job.notification_count, 'sms', 9, job.created_at, job.scheduled_for, job.processing_started, job.job_status, "job", None, ) assert len(other_uploads_from_db) == 2 assert other_uploads_from_db[0] == ( None, 'Uploaded letters', 1, 'letter', None, letter.created_at.replace(hour=17, minute=30, second=0, microsecond=0), None, letter.created_at.replace(hour=17, minute=30, second=0, microsecond=0), None, "letter_day", None, ) assert other_uploads_from_db[1] == (other_job.id, other_job.original_file_name, other_job.notification_count, other_job.template.template_type, 7, other_job.created_at, other_job.scheduled_for, other_job.processing_started, other_job.job_status, "job", None) assert uploads_from_db[1] != other_uploads_from_db[1]