Exemplo n.º 1
0
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
Exemplo n.º 2
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')])
Exemplo n.º 3
0
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
        )
    }
Exemplo n.º 4
0
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)
    }
Exemplo n.º 5
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')

    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')
    ]
Exemplo n.º 6
0
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
Exemplo n.º 7
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)
    }
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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}
Exemplo n.º 11
0
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
Exemplo n.º 12
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')
    ]
Exemplo n.º 13
0
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,
    }
Exemplo n.º 14
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')]
Exemplo n.º 15
0
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')
    ]
Exemplo n.º 16
0
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),
    }
Exemplo n.º 17
0
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')])
Exemplo n.º 18
0
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
        )
    }
Exemplo n.º 19
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
Exemplo n.º 20
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