def test_get_all_templates_for_service(service_factory):
    service_1 = service_factory.get('service 1', email_from='service.1')
    service_2 = service_factory.get('service 2', email_from='service.2')

    assert Template.query.count() == 2
    assert len(dao_get_all_templates_for_service(service_1.id)) == 1
    assert len(dao_get_all_templates_for_service(service_2.id)) == 1

    create_template(
        service=service_1,
        template_name='Sample Template 1',
        template_type="sms",
        content="Template content",
    )
    create_template(
        service=service_1,
        template_name='Sample Template 2',
        template_type="sms",
        content="Template content",
    )
    create_template(
        service=service_2,
        template_name='Sample Template 3',
        template_type="sms",
        content="Template content",
    )

    assert Template.query.count() == 5
    assert len(dao_get_all_templates_for_service(service_1.id)) == 3
    assert len(dao_get_all_templates_for_service(service_2.id)) == 2
Beispiel #2
0
def test_get_all_templates_for_service_is_alphabetised(sample_service):
    create_template(
        template_name="Sample Template 1",
        template_type="sms",
        content="Template content",
        service=sample_service,
    )
    template_2 = create_template(
        template_name="Sample Template 2",
        template_type="sms",
        content="Template content",
        service=sample_service,
    )
    create_template(
        template_name="Sample Template 3",
        template_type="sms",
        content="Template content",
        service=sample_service,
    )

    assert Template.query.count() == 3
    assert dao_get_all_templates_for_service(
        sample_service.id)[0].name == "Sample Template 1"
    assert dao_get_all_templates_for_service(
        sample_service.id)[1].name == "Sample Template 2"
    assert dao_get_all_templates_for_service(
        sample_service.id)[2].name == "Sample Template 3"

    template_2.name = "AAAAA Sample Template 2"
    dao_update_template(template_2)
    assert dao_get_all_templates_for_service(
        sample_service.id)[0].name == "AAAAA Sample Template 2"
    assert dao_get_all_templates_for_service(
        sample_service.id)[1].name == "Sample Template 1"
def test_get_all_templates_for_service_is_alphabetised(sample_service):
    create_template(
        template_name='Sample Template 1',
        template_type="sms",
        content="Template content",
        service=sample_service
    )
    template_2 = create_template(
        template_name='Sample Template 2',
        template_type="sms",
        content="Template content",
        service=sample_service
    )
    create_template(
        template_name='Sample Template 3',
        template_type="sms",
        content="Template content",
        service=sample_service
    )

    assert Template.query.count() == 3
    assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template 1'
    assert dao_get_all_templates_for_service(sample_service.id)[1].name == 'Sample Template 2'
    assert dao_get_all_templates_for_service(sample_service.id)[2].name == 'Sample Template 3'

    template_2.name = 'AAAAA Sample Template 2'
    dao_update_template(template_2)
    assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'AAAAA Sample Template 2'
    assert dao_get_all_templates_for_service(sample_service.id)[1].name == 'Sample Template 1'
def test_get_all_templates_for_service_shows_newest_created_first(notify_db, notify_db_session, sample_service):
    template_1 = create_sample_template(
        notify_db,
        notify_db_session,
        template_name='Sample Template 1',
        template_type="sms",
        content="Template content",
        service=sample_service
    )
    template_2 = create_sample_template(
        notify_db,
        notify_db_session,
        template_name='Sample Template 2',
        template_type="sms",
        content="Template content",
        service=sample_service
    )
    template_3 = create_sample_template(
        notify_db,
        notify_db_session,
        template_name='Sample Template 3',
        template_type="sms",
        content="Template content",
        service=sample_service
    )

    assert Template.query.count() == 3
    assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template 3'
    assert dao_get_all_templates_for_service(sample_service.id)[1].name == 'Sample Template 2'
    assert dao_get_all_templates_for_service(sample_service.id)[2].name == 'Sample Template 1'

    template_2.name = 'Sample Template 2 (updated)'
    dao_update_template(template_2)
    assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template 3'
    assert dao_get_all_templates_for_service(sample_service.id)[1].name == 'Sample Template 2 (updated)'
Beispiel #5
0
def get_detailed_services(start_date,
                          end_date,
                          only_active=False,
                          include_from_test_key=True):
    if start_date == datetime.utcnow().date():
        stats = dao_fetch_todays_stats_for_all_services(
            include_from_test_key=include_from_test_key,
            only_active=only_active)
    else:

        stats = fetch_stats_by_date_range_for_all_services(
            start_date=start_date,
            end_date=end_date,
            include_from_test_key=include_from_test_key,
            only_active=only_active)
    results = []
    for service_id, rows in itertools.groupby(stats, lambda x: x.service_id):
        rows = list(rows)
        if rows[0].count is None:
            s = statistics.create_zeroed_stats_dicts()
        else:
            s = statistics.format_statistics(rows)
        sid = str(rows[0].service_id)

        s[EMAIL_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, EMAIL_TYPE))
        s[SMS_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, SMS_TYPE))
        s[LETTER_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, LETTER_TYPE))

        domains = set()
        for user in dao_fetch_active_users_for_service(sid):
            parts = user.email_address.split('@')
            if len(parts) != 2:
                continue
            domains.add(parts[1].lower())

        results.append({
            'id': sid,
            'name': rows[0].name,
            'notification_type': rows[0].notification_type,
            'research_mode': rows[0].research_mode,
            'restricted': rows[0].restricted,
            'active': rows[0].active,
            'created_at': rows[0].created_at,
            'statistics': s,
            'domains': sorted(list(domains)),
            'organisation_type': rows[0].organisation_type
        })
    return results
def test_update_template(sample_service, sample_user):
    data = {
        'name': 'Sample Template',
        'template_type': "sms",
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user
    }
    template = Template(**data)
    dao_create_template(template)
    created = dao_get_all_templates_for_service(sample_service.id)[0]
    assert created.name == 'Sample Template'

    created.name = 'new name'
    dao_update_template(created)
    assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'new name'
def test_update_template_creates_a_history_record_with_current_data(sample_service, sample_user):
    assert Template.query.count() == 0
    assert TemplateHistory.query.count() == 0
    data = {
        'name': 'Sample Template',
        'template_type': "email",
        'subject': "subject",
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user
    }
    template = Template(**data)
    dao_create_template(template)

    created = dao_get_all_templates_for_service(sample_service.id)[0]
    assert created.name == 'Sample Template'
    assert Template.query.count() == 1
    assert Template.query.first().version == 1
    assert TemplateHistory.query.count() == 1

    created.name = 'new name'
    dao_update_template(created)

    assert Template.query.count() == 1
    assert TemplateHistory.query.count() == 2

    template_from_db = Template.query.first()

    assert template_from_db.version == 2

    assert TemplateHistory.query.filter_by(name='Sample Template').one().version == 1
    assert TemplateHistory.query.filter_by(name='new name').one().version == 2
def test_create_template(sample_service, sample_user, template_type, subject):
    data = {
        'name': 'Sample Template',
        'template_type': template_type,
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user
    }
    if subject:
        data.update({'subject': subject})
    template = Template(**data)
    dao_create_template(template)

    assert Template.query.count() == 1
    assert len(dao_get_all_templates_for_service(sample_service.id)) == 1
    assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template'
Beispiel #9
0
def test_update_template_creates_a_history_record_with_current_data(
        sample_service, sample_user):
    assert Template.query.count() == 0
    assert TemplateHistory.query.count() == 0
    data = {
        "name": "Sample Template",
        "template_type": "email",
        "subject": "subject",
        "content": "Template content",
        "service": sample_service,
        "created_by": sample_user,
    }
    template = Template(**data)
    dao_create_template(template)

    created = dao_get_all_templates_for_service(sample_service.id)[0]
    assert created.name == "Sample Template"
    assert Template.query.count() == 1
    assert Template.query.first().version == 1
    assert TemplateHistory.query.count() == 1

    created.name = "new name"
    dao_update_template(created)

    assert Template.query.count() == 1
    assert TemplateHistory.query.count() == 2

    template_from_db = Template.query.first()

    assert template_from_db.version == 2

    assert TemplateHistory.query.filter_by(
        name="Sample Template").one().version == 1
    assert TemplateHistory.query.filter_by(name="new name").one().version == 2
def test_update_template(sample_service, sample_user):
    data = {
        'name': 'Sample Template',
        'template_type': "sms",
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user
    }
    template = Template(**data)
    dao_create_template(template)
    created = dao_get_all_templates_for_service(sample_service.id)[0]
    assert created.name == 'Sample Template'

    created.name = 'new name'
    dao_update_template(created)
    assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'new name'
Beispiel #11
0
def get_all_templates_for_service(service_id):
    templates = dao_get_all_templates_for_service(service_id=service_id)
    if str(request.args.get('detailed', True)) == 'True':
        data = template_schema.dump(templates, many=True).data
    else:
        data = template_schema_no_detail.dump(templates, many=True).data
    return jsonify(data=data)
def test_should_not_allow_template_from_another_service(
        notify_api, service_factory, sample_user, mocker, template_type):
    with notify_api.test_request_context():
        with notify_api.test_client() as client:
            mocked = mocker.patch(
                'app.celery.provider_tasks.deliver_{}.apply_async'.format(
                    template_type))
            service_1 = service_factory.get('service 1',
                                            user=sample_user,
                                            email_from='service.1')
            service_2 = service_factory.get('service 2',
                                            user=sample_user,
                                            email_from='service.2')

            service_2_templates = dao_get_all_templates_for_service(
                service_id=service_2.id)
            to = sample_user.mobile_number if template_type == SMS_TYPE else sample_user.email_address
            data = {'to': to, 'template': service_2_templates[0].id}

            auth_header = create_authorization_header(service_id=service_1.id)

            response = client.post(
                path='/notifications/{}'.format(template_type),
                data=json.dumps(data),
                headers=[('Content-Type', 'application/json'), auth_header])

            json_resp = json.loads(response.get_data(as_text=True))
            mocked.assert_not_called()
            assert response.status_code == 400
            test_string = 'Template not found'
            assert test_string in json_resp['message']
def test_update_template_creates_a_history_record_with_current_data(sample_service, sample_user):
    assert Template.query.count() == 0
    assert TemplateHistory.query.count() == 0
    data = {
        'name': 'Sample Template',
        'template_type': "email",
        'subject': "subject",
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user
    }
    template = Template(**data)
    dao_create_template(template)

    created = dao_get_all_templates_for_service(sample_service.id)[0]
    assert created.name == 'Sample Template'
    assert Template.query.count() == 1
    assert Template.query.first().version == 1
    assert TemplateHistory.query.count() == 1

    created.name = 'new name'
    dao_update_template(created)

    assert Template.query.count() == 1
    assert TemplateHistory.query.count() == 2

    template_from_db = Template.query.first()

    assert template_from_db.version == 2

    assert TemplateHistory.query.filter_by(name='Sample Template').one().version == 1
    assert TemplateHistory.query.filter_by(name='new name').one().version == 2
def test_should_not_allow_template_from_another_service(notify_api,
                                                        service_factory,
                                                        sample_user,
                                                        mocker,
                                                        template_type):
    with notify_api.test_request_context():
        with notify_api.test_client() as client:
            mocked = mocker.patch('app.celery.provider_tasks.deliver_{}.apply_async'.format(template_type))
            service_1 = service_factory.get('service 1', user=sample_user, email_from='service.1')
            service_2 = service_factory.get('service 2', user=sample_user, email_from='service.2')

            service_2_templates = dao_get_all_templates_for_service(service_id=service_2.id)
            to = sample_user.mobile_number if template_type == 'sms' else sample_user.email_address
            data = {
                'to': to,
                'template': service_2_templates[0].id
            }

            auth_header = create_authorization_header(service_id=service_1.id)

            response = client.post(
                path='/notifications/{}'.format(template_type),
                data=json.dumps(data),
                headers=[('Content-Type', 'application/json'), auth_header])

            json_resp = json.loads(response.get_data(as_text=True))
            mocked.assert_not_called()
            assert response.status_code == 404
            test_string = 'No result found'
            assert test_string in json_resp['message']
def get_templates():
    data = validate(request.args.to_dict(), get_all_template_request)

    templates = templates_dao.dao_get_all_templates_for_service(
        authenticated_service.id, data.get('type'))

    return jsonify(
        templates=[template.serialize_for_v2() for template in templates]), 200
Beispiel #16
0
def test_create_template(sample_service, sample_user, template_type, subject):
    data = {
        'name': 'Sample Template',
        'template_type': template_type,
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user
    }
    if subject:
        data.update({'subject': subject})
    template = Template(**data)
    dao_create_template(template)

    assert Template.query.count() == 1
    assert len(dao_get_all_templates_for_service(sample_service.id)) == 1
    assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template'
    assert dao_get_all_templates_for_service(sample_service.id)[0].process_type == 'normal'
Beispiel #17
0
def test_update_template(sample_service, sample_user):
    data = {
        "name": "Sample Template",
        "template_type": "sms",
        "content": "Template content",
        "service": sample_service,
        "created_by": sample_user,
    }
    template = Template(**data)
    dao_create_template(template)
    created = dao_get_all_templates_for_service(sample_service.id)[0]
    assert created.name == "Sample Template"

    created.name = "new name"
    dao_update_template(created)
    assert dao_get_all_templates_for_service(
        sample_service.id)[0].name == "new name"
Beispiel #18
0
def test_create_template(sample_service, sample_user, template_type, subject):
    data = {
        "name": "Sample Template",
        "template_type": template_type,
        "content": "Template content",
        "service": sample_service,
        "created_by": sample_user,
    }
    if template_type == "letter":
        data["postage"] = "second"
    if subject:
        data.update({"subject": subject})
    template = Template(**data)
    dao_create_template(template)

    assert Template.query.count() == 1
    assert len(dao_get_all_templates_for_service(sample_service.id)) == 1
    assert dao_get_all_templates_for_service(
        sample_service.id)[0].name == "Sample Template"
    assert dao_get_all_templates_for_service(
        sample_service.id)[0].process_type == "normal"
Beispiel #19
0
def test_get_all_templates_ignores_hidden_templates(sample_service):
    normal_template = create_template(template_name='Normal Template',
                                      service=sample_service,
                                      archived=False)

    create_template(template_name='Hidden Template',
                    hidden=True,
                    service=sample_service)

    templates = dao_get_all_templates_for_service(sample_service.id)

    assert len(templates) == 1
    assert templates[0] == normal_template
Beispiel #20
0
def test_get_all_templates_ignores_archived_templates(sample_service):
    normal_template = create_template(template_name='Normal Template',
                                      service=sample_service,
                                      archived=False)
    archived_template = create_template(template_name='Archived Template',
                                        service=sample_service)
    # sample_template fixture uses dao, which forces archived = False at creation.
    archived_template.archived = True
    dao_update_template(archived_template)

    templates = dao_get_all_templates_for_service(sample_service.id)

    assert len(templates) == 1
    assert templates[0] == normal_template
Beispiel #21
0
def test_create_template_with_reply_to(sample_service, sample_user):
    letter_contact = create_letter_contact(sample_service, 'Edinburgh, ED1 1AA')

    data = {
        'name': 'Sample Template',
        'template_type': "letter",
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user,
        'reply_to': letter_contact.id,
    }
    template = Template(**data)
    dao_create_template(template)

    assert dao_get_all_templates_for_service(sample_service.id)[0].reply_to == letter_contact.id
def test_get_all_templates_for_service(notify_db, notify_db_session, service_factory):
    service_1 = service_factory.get('service 1', email_from='service.1')
    service_2 = service_factory.get('service 2', email_from='service.2')

    assert Template.query.count() == 2
    assert len(dao_get_all_templates_for_service(service_1.id)) == 1
    assert len(dao_get_all_templates_for_service(service_2.id)) == 1

    template_1 = create_sample_template(
        notify_db,
        notify_db_session,
        template_name='Sample Template 1',
        template_type="sms",
        content="Template content",
        service=service_1
    )
    template_2 = create_sample_template(
        notify_db,
        notify_db_session,
        template_name='Sample Template 2',
        template_type="sms",
        content="Template content",
        service=service_1
    )
    template_3 = create_sample_template(
        notify_db,
        notify_db_session,
        template_name='Sample Template 3',
        template_type="sms",
        content="Template content",
        service=service_2
    )

    assert Template.query.count() == 5
    assert len(dao_get_all_templates_for_service(service_1.id)) == 3
    assert len(dao_get_all_templates_for_service(service_2.id)) == 2
def test_template_postage_constraint_on_update(sample_service, sample_user):
    data = {
        'name': 'Sample Template',
        'template_type': "letter",
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user,
        'postage': 'second'
    }
    template = Template(**data)
    dao_create_template(template)
    created = dao_get_all_templates_for_service(sample_service.id)[0]
    assert created.name == 'Sample Template'

    created.postage = 'third'
    with pytest.raises(expected_exception=SQLAlchemyError):
        dao_update_template(created)
Beispiel #24
0
def test_template_postage_constraint_on_update(sample_service, sample_user):
    data = {
        "name": "Sample Template",
        "template_type": "letter",
        "content": "Template content",
        "service": sample_service,
        "created_by": sample_user,
        "postage": "second",
    }
    template = Template(**data)
    dao_create_template(template)
    created = dao_get_all_templates_for_service(sample_service.id)[0]
    assert created.name == "Sample Template"

    created.postage = "third"
    with pytest.raises(expected_exception=SQLAlchemyError):
        dao_update_template(created)
Beispiel #25
0
def test_create_template_with_reply_to(sample_service, sample_user):
    letter_contact = create_letter_contact(sample_service,
                                           "Edinburgh, ED1 1AA")

    data = {
        "name": "Sample Template",
        "template_type": "letter",
        "content": "Template content",
        "service": sample_service,
        "created_by": sample_user,
        "reply_to": letter_contact.id,
        "postage": "second",
    }
    template = Template(**data)
    dao_create_template(template)

    assert dao_get_all_templates_for_service(
        sample_service.id)[0].reply_to == letter_contact.id
def test_get_all_templates_ignores_archived_templates(notify_db, notify_db_session, sample_service):
    normal_template = create_sample_template(
        notify_db,
        notify_db_session,
        template_name='Normal Template',
        service=sample_service,
        archived=False
    )
    archived_template = create_sample_template(
        notify_db,
        notify_db_session,
        template_name='Archived Template',
        service=sample_service
    )
    # sample_template fixture uses dao, which forces archived = False at creation.
    archived_template.archived = True
    dao_update_template(archived_template)

    templates = dao_get_all_templates_for_service(sample_service.id)

    assert len(templates) == 1
    assert templates[0] == normal_template
def test_get_all_returns_empty_list_if_no_templates(sample_service):
    assert Template.query.count() == 0
    assert len(dao_get_all_templates_for_service(sample_service.id)) == 0
Beispiel #28
0
def get_all_templates_for_service(service_id):
    templates = dao_get_all_templates_for_service(service_id=service_id)
    data = template_schema.dump(templates, many=True).data
    return jsonify(data=data)
def test_get_all_returns_empty_list_if_no_templates(sample_service):
    assert Template.query.count() == 0
    assert len(dao_get_all_templates_for_service(sample_service.id)) == 0
Beispiel #30
0
def get_all_templates_for_service(service_id):
    templates = dao_get_all_templates_for_service(service_id=service_id)
    data = template_schema.dump(templates, many=True).data
    return jsonify(data=data)