def test_fetch_returned_letters_from_notifications_and_notification_history(sample_letter_template): today = datetime.now() last_month = datetime.now() - timedelta(days=30) letter_1 = create_notification(template=sample_letter_template, client_reference='letter_1', status=NOTIFICATION_RETURNED_LETTER, created_at=datetime.utcnow() - timedelta(days=1)) returned_letter_1 = create_returned_letter(service=sample_letter_template.service, reported_at=today, notification_id=letter_1.id) letter_2 = create_notification_history(template=sample_letter_template, client_reference='letter_2', status=NOTIFICATION_RETURNED_LETTER, created_at=datetime.utcnow()) returned_letter_2 = create_returned_letter(service=sample_letter_template.service, reported_at=today, notification_id=letter_2.id) letter_3 = create_notification_history(template=sample_letter_template, client_reference='letter_3', status=NOTIFICATION_RETURNED_LETTER) create_returned_letter(service=sample_letter_template.service, reported_at=last_month, notification_id=letter_3.id) results = fetch_returned_letters(service_id=sample_letter_template.service_id, report_date=today.date()) assert len(results) == 2 assert results[0] == (letter_2.id, returned_letter_2.reported_at, letter_2.client_reference, letter_2.created_at, sample_letter_template.name, letter_2.template_id, letter_2.template_version, False, None, None, None, None, None, None) assert results[1] == (letter_1.id, returned_letter_1.reported_at, letter_1.client_reference, letter_1.created_at, sample_letter_template.name, letter_1.template_id, letter_1.template_version, False, letter_1.api_key_id, None, None, None, None, None)
def test_fetch_returned_letters_with_jobs(sample_letter_job): today = datetime.now() letter_1 = create_notification_history(template=sample_letter_job.template, client_reference='letter_1', status=NOTIFICATION_RETURNED_LETTER, job=sample_letter_job, job_row_number=20, created_at=datetime.utcnow() - timedelta(minutes=1)) returned_letter_1 = create_returned_letter(service=sample_letter_job.service, reported_at=today, notification_id=letter_1.id) results = fetch_returned_letters(service_id=sample_letter_job.service_id, report_date=today.date()) assert len(results) == 1 assert results[0] == (letter_1.id, returned_letter_1.reported_at, letter_1.client_reference, letter_1.created_at, sample_letter_job.template.name, letter_1.template_id, letter_1.template_version, False, None, None, None, None, sample_letter_job.original_file_name, 21)
def test_fetch_returned_letters_with_create_by_user(sample_letter_template): today = datetime.now() letter_1 = create_notification_history(template=sample_letter_template, client_reference='letter_1', status=NOTIFICATION_RETURNED_LETTER, created_at=datetime.utcnow() - timedelta(minutes=1), created_by_id=sample_letter_template.service.users[0].id) returned_letter_1 = create_returned_letter(service=sample_letter_template.service, reported_at=today, notification_id=letter_1.id) results = fetch_returned_letters(service_id=sample_letter_template.service_id, report_date=today.date()) assert len(results) == 1 assert results[0] == (letter_1.id, returned_letter_1.reported_at, letter_1.client_reference, letter_1.created_at, sample_letter_template.name, letter_1.template_id, letter_1.template_version, False, None, letter_1.created_by_id, sample_letter_template.service.users[0].name, sample_letter_template.service.users[0].email_address, None, None)
def get_returned_letters(service_id): results = fetch_returned_letters(service_id=service_id, report_date=request.args.get('reported_at')) json_results = [ {'notification_id': x.notification_id, # client reference can only be added on API letters 'client_reference': x.client_reference if x.api_key_id else None, 'reported_at': x.reported_at.strftime(DATE_FORMAT), 'created_at': x.created_at.strftime(DATETIME_FORMAT_NO_TIMEZONE), # it doesn't make sense to show hidden/precompiled templates 'template_name': x.template_name if not x.hidden else None, 'template_id': x.template_id if not x.hidden else None, 'template_version': x.template_version if not x.hidden else None, 'user_name': x.user_name or 'API', 'email_address': x.email_address or 'API', 'original_file_name': x.original_file_name, 'job_row_number': x.job_row_number, # the file name for a letter uploaded via the UI 'uploaded_letter_file_name': x.client_reference if x.hidden and not x.api_key_id else None } for x in results] return jsonify(sorted(json_results, key=lambda i: i['created_at'], reverse=True))