def test_should_return_notifications_only_for_this_service(sample_notification_with_job): other_service = create_service(service_name='one') other_template = create_template(service=other_service) other_job = create_job(other_template) create_notification(other_template, job=other_job) assert len(dao_get_notification_outcomes_for_job(sample_notification_with_job.service_id, other_job.id)) == 0 assert len(dao_get_notification_outcomes_for_job(other_service.id, sample_notification_with_job.id)) == 0
def test_should_get_all_statuses_for_notifications_associated_with_job( notify_db, notify_db_session, sample_service, sample_job): notification = partial(create_notification, notify_db, notify_db_session, service=sample_service, job=sample_job) notification(status='created') notification(status='sending') notification(status='delivered') notification(status='pending') notification(status='failed') notification(status='technical-failure') notification(status='temporary-failure') notification(status='permanent-failure') notification(status='sent') results = dao_get_notification_outcomes_for_job(sample_service.id, sample_job.id) assert set([(row.count, row.status) for row in results]) == set([(1, 'created'), (1, 'sending'), (1, 'delivered'), (1, 'pending'), (1, 'failed'), (1, 'technical-failure'), (1, 'temporary-failure'), (1, 'permanent-failure'), (1, 'sent')])
def get_paginated_jobs(service_id, limit_days, statuses, page): pagination = dao_get_jobs_by_service_id( service_id, limit_days=limit_days, page=page, page_size=current_app.config['PAGE_SIZE'], statuses=statuses ) data = job_schema.dump(pagination.items, many=True).data for job_data in data: start = job_data['processing_started'] start = dateutil.parser.parse(start).replace(tzinfo=None) if start else None if start is None: statistics = [] elif start.replace(tzinfo=None) < midnight_n_days_ago(3): # ft_notification_status table statistics = fetch_notification_statuses_for_job(job_data['id']) else: # notifications table statistics = dao_get_notification_outcomes_for_job(service_id, job_data['id']) job_data['statistics'] = [{'status': statistic.status, 'count': statistic.count} for statistic in statistics] return { 'data': data, 'page_size': pagination.per_page, 'total': pagination.total, 'links': pagination_links( pagination, '.get_jobs_by_service', service_id=service_id ) }
def get_paginated_jobs(service_id, limit_days, statuses, page): pagination = dao_get_jobs_by_service_id( service_id, limit_days=limit_days, page=page, page_size=current_app.config['PAGE_SIZE'], statuses=statuses) data = job_schema.dump(pagination.items, many=True).data for job_data in data: statistics = dao_get_notification_outcomes_for_job( service_id, job_data['id']) job_data['statistics'] = [{ 'status': statistic[1], 'count': statistic[0] } for statistic in statistics] return { 'data': data, 'page_size': pagination.per_page, 'total': pagination.total, 'links': pagination_links(pagination, '.get_jobs_by_service', service_id=service_id) }
def test_should_get_all_statuses_for_notifications_associated_with_job( notify_db, notify_db_session, sample_service, sample_job): notification = partial(create_notification, notify_db, notify_db_session, service=sample_service, job=sample_job) notification(status='created') notification(status='sending') notification(status='delivered') notification(status='pending') notification(status='failed') notification(status='technical-failure') notification(status='temporary-failure') notification(status='permanent-failure') results = dao_get_notification_outcomes_for_job(sample_service.id, sample_job.id) assert [(row.count, row.status) for row in results] == [ (1, 'created'), (1, 'sending'), (1, 'delivered'), (1, 'pending'), (1, 'failed'), (1, 'technical-failure'), (1, 'temporary-failure'), (1, 'permanent-failure') ]
def test_should_return_notifications_only_for_this_service( notify_db, notify_db_session): service_1 = create_service(notify_db, notify_db_session, service_name="one", email_from="one") service_2 = create_service(notify_db, notify_db_session, service_name="two", email_from="two") job_1 = create_job(notify_db, notify_db_session, service=service_1) job_2 = create_job(notify_db, notify_db_session, service=service_2) create_notification(notify_db, notify_db_session, service=service_1, job=job_1, status='created') create_notification(notify_db, notify_db_session, service=service_2, job=job_2, status='created') assert len(dao_get_notification_outcomes_for_job(service_1.id, job_2.id)) == 0
def get_paginated_uploads(service_id, limit_days, page): pagination = dao_get_uploads_by_service_id( service_id, limit_days=limit_days, page=page, page_size=current_app.config['PAGE_SIZE']) uploads = pagination.items data = [] for upload in uploads: upload_dict = { 'id': upload.id, 'original_file_name': upload.original_file_name, 'notification_count': upload.notification_count, 'created_at': upload.scheduled_for.strftime("%Y-%m-%d %H:%M:%S") if upload.scheduled_for else upload.created_at.strftime("%Y-%m-%d %H:%M:%S"), 'upload_type': upload.upload_type, 'template_type': upload.template_type, 'recipient': upload.recipient, } if upload.upload_type == 'job': start = upload.processing_started if start is None: statistics = [] elif start.replace(tzinfo=None) < midnight_n_days_ago(3): # ft_notification_status table statistics = fetch_notification_statuses_for_job(upload.id) else: # notifications table statistics = dao_get_notification_outcomes_for_job( service_id, upload.id) upload_dict['statistics'] = [{ 'status': statistic.status, 'count': statistic.count } for statistic in statistics] else: upload_dict['statistics'] = [] data.append(upload_dict) return { 'data': data, 'page_size': pagination.per_page, 'total': pagination.total, 'links': pagination_links(pagination, '.get_uploads_by_service', service_id=service_id) }
def get_job_by_service_and_job_id(service_id, job_id): job = dao_get_job_by_service_id_and_job_id(service_id, job_id) statistics = dao_get_notification_outcomes_for_job(service_id, job_id) data = job_schema.dump(job).data data['statistics'] = [{'status': statistic[1], 'count': statistic[0]} for statistic in statistics] return jsonify(data=data)
def get_job_by_service_and_job_id(service_id, job_id): job = dao_get_job_by_service_id_and_job_id(service_id, job_id) statistics = dao_get_notification_outcomes_for_job(service_id, job_id) data = job_schema.dump(job).data data['statistics'] = [{'status': statistic[1], 'count': statistic[0]} for statistic in statistics] return jsonify(data=data)
def test_should_return_notifications_only_for_this_job(sample_template): job_1 = create_job(sample_template) job_2 = create_job(sample_template) create_notification(sample_template, job=job_1, status='created') create_notification(sample_template, job=job_2, status='sent') results = dao_get_notification_outcomes_for_job(sample_template.service_id, job_1.id) assert {row.status: row.count for row in results} == {'created': 1}
def test_should_return_notifications_only_for_this_service(notify_db, notify_db_session): service_1 = create_service(notify_db, notify_db_session, service_name="one", email_from="one") service_2 = create_service(notify_db, notify_db_session, service_name="two", email_from="two") job_1 = create_job(notify_db, notify_db_session, service=service_1) job_2 = create_job(notify_db, notify_db_session, service=service_2) create_notification(notify_db, notify_db_session, service=service_1, job=job_1, status='created') create_notification(notify_db, notify_db_session, service=service_2, job=job_2, status='created') assert len(dao_get_notification_outcomes_for_job(service_1.id, job_2.id)) == 0
def test_should_return_notifications_only_for_this_job(notify_db, notify_db_session, sample_service): job_1 = create_job(notify_db, notify_db_session, service=sample_service) job_2 = create_job(notify_db, notify_db_session, service=sample_service) create_notification(notify_db, notify_db_session, service=sample_service, job=job_1, status='created') create_notification(notify_db, notify_db_session, service=sample_service, job=job_2, status='created') results = dao_get_notification_outcomes_for_job(sample_service.id, job_1.id) assert [(row.count, row.status) for row in results] == [ (1, 'created') ]
def test_should_count_of_statuses_for_notifications_associated_with_job(sample_template, sample_job): create_notification(sample_template, job=sample_job, status='created') create_notification(sample_template, job=sample_job, status='created') create_notification(sample_template, job=sample_job, status='created') create_notification(sample_template, job=sample_job, status='sending') create_notification(sample_template, job=sample_job, status='delivered') results = dao_get_notification_outcomes_for_job(sample_template.service_id, sample_job.id) assert {row.status: row.count for row in results} == { 'created': 3, 'sending': 1, 'delivered': 1, }
def test_should_return_notifications_only_for_this_job(notify_db, notify_db_session, sample_service): job_1 = create_job(notify_db, notify_db_session, service=sample_service) job_2 = create_job(notify_db, notify_db_session, service=sample_service) create_notification(notify_db, notify_db_session, service=sample_service, job=job_1, status='created') create_notification(notify_db, notify_db_session, service=sample_service, job=job_2, status='created') results = dao_get_notification_outcomes_for_job(sample_service.id, job_1.id) assert [(row.count, row.status) for row in results] == [(1, 'created')]
def test_should_count_of_statuses_for_notifications_associated_with_job( notify_db, notify_db_session, sample_service, sample_job): notification = partial(create_notification, notify_db, notify_db_session, service=sample_service, job=sample_job) notification(status='created') notification(status='created') notification(status='sending') notification(status='sending') notification(status='sending') notification(status='sending') notification(status='delivered') notification(status='delivered') results = dao_get_notification_outcomes_for_job(sample_service.id, sample_job.id) assert [(row.count, row.status) for row in results] == [ (2, 'created'), (4, 'sending'), (2, 'delivered') ]
def get_paginated_jobs(service_id, limit_days, statuses, page): pagination = dao_get_jobs_by_service_id( service_id, limit_days=limit_days, page=page, page_size=current_app.config["PAGE_SIZE"], statuses=statuses, ) data = job_schema.dump(pagination.items, many=True).data for job_data in data: start = job_data["processing_started"] start = dateutil.parser.parse(start).replace( tzinfo=None) if start else None if start is None: statistics = [] elif start.replace(tzinfo=None) < midnight_n_days_ago(3): # ft_notification_status table statistics = fetch_notification_statuses_for_job(job_data["id"]) else: # notifications table statistics = dao_get_notification_outcomes_for_job( service_id, job_data["id"]) job_data["statistics"] = [{ "status": statistic.status, "count": statistic.count } for statistic in statistics] return { "data": data, "page_size": pagination.per_page, "total": pagination.total, "links": pagination_links(pagination, ".get_jobs_by_service", service_id=service_id), }
def test_should_count_of_statuses_for_notifications_associated_with_job( notify_db, notify_db_session, sample_service, sample_job): notification = partial(create_notification, notify_db, notify_db_session, service=sample_service, job=sample_job) notification(status='created') notification(status='created') notification(status='sending') notification(status='sending') notification(status='sending') notification(status='sending') notification(status='delivered') notification(status='delivered') results = dao_get_notification_outcomes_for_job(sample_service.id, sample_job.id) assert set([(row.count, row.status) for row in results]) == set([(2, 'created'), (4, 'sending'), (2, 'delivered')])
def get_paginated_jobs(service_id, limit_days, statuses, page): pagination = dao_get_jobs_by_service_id( service_id, limit_days=limit_days, page=page, page_size=current_app.config['PAGE_SIZE'], statuses=statuses ) data = job_schema.dump(pagination.items, many=True).data for job_data in data: statistics = dao_get_notification_outcomes_for_job(service_id, job_data['id']) job_data['statistics'] = [{'status': statistic[1], 'count': statistic[0]} for statistic in statistics] return { 'data': data, 'page_size': pagination.per_page, 'total': pagination.total, 'links': pagination_links( pagination, '.get_jobs_by_service', service_id=service_id ) }
def test_should_return_zero_length_array_if_no_notifications_for_job( sample_service, sample_job): assert len( dao_get_notification_outcomes_for_job(sample_job.id, sample_service.id)) == 0
def test_should_return_zero_length_array_if_no_notifications_for_job(sample_service, sample_job): assert len(dao_get_notification_outcomes_for_job(sample_job.id, sample_service.id)) == 0