def test_get_jobs_for_service(notify_db, notify_db_session, sample_template): one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template) other_user = create_user(email="*****@*****.**") other_service = create_service(notify_db, notify_db_session, user=other_user, service_name="other service", email_from='other.service') other_template = create_template(notify_db, notify_db_session, service=other_service) other_job = create_job(notify_db, notify_db_session, service=other_service, template=other_template) one_job_from_db = dao_get_jobs_by_service_id(one_job.service_id).items other_job_from_db = dao_get_jobs_by_service_id(other_job.service_id).items assert len(one_job_from_db) == 1 assert one_job == one_job_from_db[0] assert len(other_job_from_db) == 1 assert other_job == other_job_from_db[0] assert one_job_from_db != other_job_from_db
def test_get_jobs_for_service_with_limit_days_param(sample_template): one_job = create_job(sample_template) old_job = create_job(sample_template, created_at=datetime.now() - timedelta(days=8)) jobs = dao_get_jobs_by_service_id(one_job.service_id).items assert len(jobs) == 2 assert one_job in jobs assert old_job in jobs jobs_limit_days = dao_get_jobs_by_service_id(one_job.service_id, limit_days=7).items assert len(jobs_limit_days) == 1 assert one_job in jobs_limit_days assert old_job not in jobs_limit_days
def test_get_jobs_for_service_with_limit_days_param(notify_db, notify_db_session, sample_template): one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template) old_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template, created_at=datetime.now() - timedelta(days=8)) jobs = dao_get_jobs_by_service_id(one_job.service_id).items assert len(jobs) == 2 assert one_job in jobs assert old_job in jobs jobs_limit_days = dao_get_jobs_by_service_id(one_job.service_id, limit_days=7).items assert len(jobs_limit_days) == 1 assert one_job in jobs_limit_days assert old_job not in jobs_limit_days
def test_get_jobs_for_service_in_processed_at_then_created_at_order( notify_db, notify_db_session, sample_template): from_hour = partial(datetime, 2001, 1, 1) created_jobs = [ create_job(sample_template, created_at=from_hour(2), processing_started=None), create_job(sample_template, created_at=from_hour(1), processing_started=None), create_job(sample_template, created_at=from_hour(1), processing_started=from_hour(4)), create_job(sample_template, created_at=from_hour(2), processing_started=from_hour(3)), ] jobs = dao_get_jobs_by_service_id(sample_template.service.id).items assert len(jobs) == len(created_jobs) for index in range(0, len(created_jobs)): assert jobs[index].id == created_jobs[index].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_get_jobs_for_service_with_limit_days_edge_case( notify_db, notify_db_session, sample_template): one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template) job_two = create_job(notify_db, notify_db_session, sample_template.service, sample_template, created_at=(datetime.now() - timedelta(days=7)).date()) one_second_after_midnight = datetime.combine( (datetime.now() - timedelta(days=7)).date(), datetime.strptime("000001", "%H%M%S").time()) just_after_midnight_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template, created_at=one_second_after_midnight) job_eight_days_old = create_job(notify_db, notify_db_session, sample_template.service, sample_template, created_at=datetime.now() - timedelta(days=8)) jobs_limit_days = dao_get_jobs_by_service_id(one_job.service_id, limit_days=7).items assert len(jobs_limit_days) == 3 assert one_job in jobs_limit_days assert job_two in jobs_limit_days assert just_after_midnight_job in jobs_limit_days assert job_eight_days_old not in jobs_limit_days
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 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_get_jobs_for_service(sample_template): one_job = create_job(sample_template) other_service = create_service(service_name="other service") other_template = create_template(service=other_service) other_job = create_job(other_template) one_job_from_db = dao_get_jobs_by_service_id(one_job.service_id).items other_job_from_db = dao_get_jobs_by_service_id(other_job.service_id).items assert len(one_job_from_db) == 1 assert one_job == one_job_from_db[0] assert len(other_job_from_db) == 1 assert other_job == other_job_from_db[0] assert one_job_from_db != other_job_from_db
def test_get_jobs_for_service_is_paginated(notify_db, notify_db_session, sample_service, sample_template): with freeze_time('2015-01-01T00:00:00') as the_time: for _ in range(10): the_time.tick(timedelta(hours=1)) create_job(sample_template) res = dao_get_jobs_by_service_id(sample_service.id, page=1, page_size=2) assert res.per_page == 2 assert res.total == 10 assert len(res.items) == 2 assert res.items[0].created_at == datetime(2015, 1, 1, 10) assert res.items[1].created_at == datetime(2015, 1, 1, 9) res = dao_get_jobs_by_service_id(sample_service.id, page=2, page_size=2) assert len(res.items) == 2 assert res.items[0].created_at == datetime(2015, 1, 1, 8) assert res.items[1].created_at == datetime(2015, 1, 1, 7)
def test_get_jobs_for_service_with_limit_days_edge_case(sample_template): one_job = create_job(sample_template) just_after_midnight_job = create_job(sample_template, created_at=datetime(2017, 6, 2, 23, 0, 1)) just_before_midnight_job = create_job(sample_template, created_at=datetime(2017, 6, 2, 22, 59, 0)) jobs_limit_days = dao_get_jobs_by_service_id(one_job.service_id, limit_days=7).items assert len(jobs_limit_days) == 2 assert one_job in jobs_limit_days assert just_after_midnight_job in jobs_limit_days assert just_before_midnight_job not in jobs_limit_days
def test_get_jobs_for_service_is_paginated(notify_db, notify_db_session, sample_service, sample_template): with freeze_time('2015-01-01T00:00:00') as the_time: for _ in range(10): the_time.tick(timedelta(hours=1)) create_job(notify_db, notify_db_session, sample_service, sample_template) res = dao_get_jobs_by_service_id(sample_service.id, page=1, page_size=2) assert res.per_page == 2 assert res.total == 10 assert len(res.items) == 2 assert res.items[0].created_at == datetime(2015, 1, 1, 10) assert res.items[1].created_at == datetime(2015, 1, 1, 9) res = dao_get_jobs_by_service_id(sample_service.id, page=2, page_size=2) assert len(res.items) == 2 assert res.items[0].created_at == datetime(2015, 1, 1, 8) assert res.items[1].created_at == datetime(2015, 1, 1, 7)
def test_get_jobs_for_service_doesnt_return_test_messages( sample_template, sample_job, file_name, ): create_job(sample_template, original_file_name=file_name,) jobs = dao_get_jobs_by_service_id(sample_job.service_id).items assert jobs == [sample_job]
def test_get_jobs_for_service(notify_db, notify_db_session, sample_template): one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template) other_user = create_user(notify_db, notify_db_session, email="*****@*****.**") other_service = create_service(notify_db, notify_db_session, user=other_user, service_name="other service", email_from='other.service') other_template = create_template(notify_db, notify_db_session, service=other_service) other_job = create_job(notify_db, notify_db_session, service=other_service, template=other_template) one_job_from_db = dao_get_jobs_by_service_id(one_job.service_id).items other_job_from_db = dao_get_jobs_by_service_id(other_job.service_id).items assert len(one_job_from_db) == 1 assert one_job == one_job_from_db[0] assert len(other_job_from_db) == 1 assert other_job == other_job_from_db[0] assert one_job_from_db != other_job_from_db
def test_get_jobs_for_service_doesnt_return_test_messages(notify_db, notify_db_session, sample_template, sample_job): test_job = create_job( notify_db, notify_db_session, sample_template.service, sample_template, original_file_name='Test message') jobs = dao_get_jobs_by_service_id(sample_job.service_id).items assert jobs == [sample_job]
def test_get_jobs_for_service_with_limit_days_edge_case(notify_db, notify_db_session, sample_template): one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template) job_two = create_job(notify_db, notify_db_session, sample_template.service, sample_template, created_at=(datetime.now() - timedelta(days=7)).date()) one_second_after_midnight = datetime.combine((datetime.now() - timedelta(days=7)).date(), datetime.strptime("000001", "%H%M%S").time()) just_after_midnight_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template, created_at=one_second_after_midnight) job_eight_days_old = create_job(notify_db, notify_db_session, sample_template.service, sample_template, created_at=datetime.now() - timedelta(days=8)) jobs_limit_days = dao_get_jobs_by_service_id(one_job.service_id, limit_days=7).items assert len(jobs_limit_days) == 3 assert one_job in jobs_limit_days assert job_two in jobs_limit_days assert just_after_midnight_job in jobs_limit_days assert job_eight_days_old not in jobs_limit_days
def test_get_jobs_for_service_in_processed_at_then_created_at_order(notify_db, notify_db_session, sample_template): _create_job = partial(create_job, notify_db, notify_db_session, sample_template.service, sample_template) from_hour = partial(datetime, 2001, 1, 1) created_jobs = [ _create_job(created_at=from_hour(2), processing_started=None), _create_job(created_at=from_hour(1), processing_started=None), _create_job(created_at=from_hour(1), processing_started=from_hour(4)), _create_job(created_at=from_hour(2), processing_started=from_hour(3)), ] jobs = dao_get_jobs_by_service_id(sample_template.service.id).items assert len(jobs) == len(created_jobs) for index in range(0, len(created_jobs)): assert jobs[index].id == created_jobs[index].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: 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 ) }