Ejemplo n.º 1
0
def test_add_letter_contact_when_multiple_defaults_exist_raises_exception(notify_db_session):
    service = create_service()
    create_letter_contact(service=service, contact_block='Edinburgh, ED1 1AA')
    create_letter_contact(service=service, contact_block='Aberdeen, AB12 23X')

    with pytest.raises(Exception):
        add_letter_contact_for_service(service_id=service.id, contact_block='Swansea, SN1 3CC', is_default=False)
def test_dao_update_template_reply_to_some_to_some(sample_service, sample_user):
    letter_contact = create_letter_contact(sample_service, 'Edinburgh, ED1 1AA')
    letter_contact_2 = create_letter_contact(sample_service, 'London, N1 1DE')

    data = {
        'name': 'Sample Template',
        'template_type': "letter",
        'content': "Template content",
        'service': sample_service,
        'created_by': sample_user,
        'service_letter_contact_id': letter_contact.id,
        'postage': 'second',
    }
    template = Template(**data)
    dao_create_template(template)
    created = Template.query.get(template.id)
    dao_update_template_reply_to(template_id=created.id, reply_to=letter_contact_2.id)
    updated = Template.query.get(template.id)
    assert updated.reply_to == letter_contact_2.id
    assert updated.version == 2
    assert updated.updated_at

    updated_history = TemplateHistory.query.filter_by(id=created.id, version=2).one()
    assert updated_history.service_letter_contact_id == letter_contact_2.id
    assert updated_history.updated_at == updated_history.updated_at
Ejemplo n.º 3
0
def test_post_letter_notification_persists_notification_reply_to_text_for_template(
        client, notify_db_session, mocker):
    mocker.patch('app.celery.letters_pdf_tasks.create_letters_pdf.apply_async')

    service = create_service(service_permissions=[LETTER_TYPE])
    create_letter_contact(service=service,
                          contact_block='the default',
                          is_default=True)
    template_letter_contact = create_letter_contact(
        service=service, contact_block='not the default', is_default=False)
    template = create_template(service=service,
                               template_type='letter',
                               reply_to=template_letter_contact.id)
    data = {
        "template_id": template.id,
        "personalisation": {
            'address_line_1': 'Foo',
            'address_line_2': 'Bar',
            'postcode': 'BA5 5AB'
        }
    }
    letter_request(client,
                   data=data,
                   service_id=service.id,
                   key_type=KEY_TYPE_NORMAL)

    notifications = Notification.query.all()
    assert len(notifications) == 1
    assert notifications[0].reply_to_text == 'not the default'
Ejemplo n.º 4
0
def test_get_template_reply_to(client, sample_service, template_default,
                               service_default):
    auth_header = create_authorization_header()
    if service_default:
        create_letter_contact(service=sample_service,
                              contact_block=service_default,
                              is_default=True)
    if template_default:
        template_default_contact = create_letter_contact(
            service=sample_service,
            contact_block=template_default,
            is_default=False)
    reply_to_id = str(
        template_default_contact.id) if template_default else None
    template = create_template(service=sample_service,
                               template_type='letter',
                               reply_to=reply_to_id)

    resp = client.get('/service/{}/template/{}'.format(template.service_id,
                                                       template.id),
                      headers=[auth_header])

    assert resp.status_code == 200, resp.get_data(as_text=True)
    json_resp = json.loads(resp.get_data(as_text=True))

    assert 'service_letter_contact_id' not in json_resp['data']
    assert json_resp['data']['reply_to'] == reply_to_id
    assert json_resp['data']['reply_to_text'] == template_default
Ejemplo n.º 5
0
def test_dao_update_template_reply_to_some_to_some(sample_service,
                                                   sample_user):
    letter_contact = create_letter_contact(sample_service,
                                           "Edinburgh, ED1 1AA")
    letter_contact_2 = create_letter_contact(sample_service, "London, N1 1DE")

    data = {
        "name": "Sample Template",
        "template_type": "letter",
        "content": "Template content",
        "service": sample_service,
        "created_by": sample_user,
        "service_letter_contact_id": letter_contact.id,
        "postage": "second",
    }
    template = Template(**data)
    dao_create_template(template)
    created = Template.query.get(template.id)
    dao_update_template_reply_to(template_id=created.id,
                                 reply_to=letter_contact_2.id)
    updated = Template.query.get(template.id)
    assert updated.reply_to == letter_contact_2.id
    assert updated.version == 2
    assert updated.updated_at

    updated_history = TemplateHistory.query.filter_by(id=created.id,
                                                      version=2).one()
    assert updated_history.service_letter_contact_id == letter_contact_2.id
    assert updated_history.updated_at == updated_history.updated_at
Ejemplo n.º 6
0
def test_archive_letter_contact(notify_db_session):
    service = create_service()
    create_letter_contact(service=service, contact_block='Aberdeen, AB12 23X')
    letter_contact = create_letter_contact(service=service, contact_block='Edinburgh, ED1 1AA', is_default=False)

    archive_letter_contact(service.id, letter_contact.id)

    assert letter_contact.archived
    assert letter_contact.updated_at is not None
Ejemplo n.º 7
0
def test_dao_get_letter_contacts_by_service_id(notify_db_session):
    service = create_service()
    default_letter_contact = create_letter_contact(service=service, contact_block='Edinburgh, ED1 1AA')
    second_letter_contact = create_letter_contact(service=service, contact_block='Cardiff, CA1 2DB', is_default=False)
    third_letter_contact = create_letter_contact(service=service, contact_block='London, E1 8QS', is_default=False)

    results = dao_get_letter_contacts_by_service_id(service_id=service.id)

    assert len(results) == 3
    assert default_letter_contact == results[0]
    assert third_letter_contact == results[1]
    assert second_letter_contact == results[2]
Ejemplo n.º 8
0
def test_archive_letter_contact_does_not_archive_a_template_default_letter_contact(
        notify_db_session):
    service = create_service()
    create_letter_contact(service=service, contact_block='Edinburgh, ED1 1AA')
    template_default = create_letter_contact(
        service=service, contact_block='Aberdeen, AB12 23X', is_default=False)
    create_template(service=service,
                    template_type='letter',
                    reply_to=template_default.id)

    with pytest.raises(ArchiveValidationError) as e:
        archive_letter_contact(service.id, template_default.id)

    assert 'You cannot delete the default letter contact block for a template' in str(
        e.value)
Ejemplo n.º 9
0
def test_dao_get_letter_contacts_by_service_id_does_not_return_archived_contacts(notify_db_session):
    service = create_service()
    create_letter_contact(service=service, contact_block='Edinburgh, ED1 1AA')
    create_letter_contact(service=service, contact_block='Cardiff, CA1 2DB', is_default=False)
    archived_contact = create_letter_contact(
        service=service,
        contact_block='London, E1 8QS',
        is_default=False,
        archived=True
    )

    results = dao_get_letter_contacts_by_service_id(service_id=service.id)

    assert len(results) == 2
    assert archived_contact not in results
Ejemplo n.º 10
0
def test_add_letter_contact_for_service_creates_additional_letter_contact_for_service(notify_db_session):
    service = create_service()

    create_letter_contact(service=service, contact_block='Edinburgh, ED1 1AA')
    add_letter_contact_for_service(service_id=service.id, contact_block='Swansea, SN1 3CC', is_default=False)

    results = dao_get_letter_contacts_by_service_id(service_id=service.id)

    assert len(results) == 2

    assert results[0].contact_block == 'Edinburgh, ED1 1AA'
    assert results[0].is_default

    assert results[1].contact_block == 'Swansea, SN1 3CC'
    assert not results[1].is_default
Ejemplo n.º 11
0
def test_add_another_letter_contact_as_default_overrides_existing(notify_db_session):
    service = create_service()

    create_letter_contact(service=service, contact_block='Edinburgh, ED1 1AA')
    add_letter_contact_for_service(service_id=service.id, contact_block='Swansea, SN1 3CC', is_default=True)

    results = dao_get_letter_contacts_by_service_id(service_id=service.id)

    assert len(results) == 2

    assert results[0].contact_block == 'Swansea, SN1 3CC'
    assert results[0].is_default

    assert results[1].contact_block == 'Edinburgh, ED1 1AA'
    assert not results[1].is_default
Ejemplo n.º 12
0
def test_send_one_off_letter_notification_should_use_template_reply_to_text(
        sample_letter_template, celery_mock):
    letter_contact = create_letter_contact(sample_letter_template.service,
                                           "Edinburgh, ED1 1AA",
                                           is_default=False)
    sample_letter_template.reply_to = str(letter_contact.id)

    data = {
        'to': '*****@*****.**',
        'template_id': str(sample_letter_template.id),
        'personalisation': {
            'name': 'foo',
            'address_line_1': 'First Last',
            'address_line_2': '1 Example Street',
            'address_line_3': 'SW1A 1AA',
        },
        'created_by': str(sample_letter_template.service.created_by_id)
    }

    notification_id = send_one_off_notification(
        service_id=sample_letter_template.service.id, post_data=data)
    notification = Notification.query.get(notification_id['id'])
    celery_mock.assert_called_once_with(notification=notification,
                                        research_mode=False,
                                        queue=None)

    assert notification.reply_to_text == "Edinburgh, ED1 1AA"
Ejemplo n.º 13
0
def test_create_a_template_with_foreign_service_reply_to(
        admin_request, sample_user):
    service = create_service(service_permissions=['letter'])
    service2 = create_service(service_name='test service',
                              email_from='*****@*****.**',
                              service_permissions=['letter'])
    letter_contact = create_letter_contact(service2, "Edinburgh, ED1 1AA")
    data = {
        'name': 'my template',
        'subject': 'subject',
        'template_type': 'letter',
        'content': 'template <b>content</b>',
        'service': str(service.id),
        'created_by': str(sample_user.id),
        'reply_to': str(letter_contact.id),
    }

    json_resp = admin_request.post('template.create_template',
                                   service_id=service.id,
                                   _data=data,
                                   _expected_status=400)

    assert json_resp[
        'message'] == "letter_contact_id {} does not exist in database for service id {}".format(
            str(letter_contact.id), str(service.id))
Ejemplo n.º 14
0
def test_archive_letter_contact_does_dissociates_template_defaults_before_archiving(notify_db_session):
    service = create_service()
    create_letter_contact(service=service, contact_block='Edinburgh, ED1 1AA')
    template_default = create_letter_contact(service=service, contact_block='Aberdeen, AB12 23X', is_default=False)
    associated_template_1 = create_template(service=service, template_type='letter', reply_to=template_default.id)
    associated_template_2 = create_template(service=service, template_type='letter', reply_to=template_default.id)

    assert associated_template_1.reply_to == template_default.id
    assert associated_template_2.reply_to == template_default.id
    assert template_default.archived is False

    archive_letter_contact(service.id, template_default.id)

    assert associated_template_1.reply_to is None
    assert associated_template_2.reply_to is None
    assert template_default.archived is True
def test_post_letter_notification_persists_notification_reply_to_text(
        client, notify_db_session, mocker):
    mocker.patch("app.celery.letters_pdf_tasks.create_letters_pdf.apply_async")

    service = create_service(service_permissions=[LETTER_TYPE])
    service_address = "12 Main Street, London"
    letter_contact = create_letter_contact(service=service,
                                           contact_block=service_address,
                                           is_default=True)
    template = create_template(service=service,
                               template_type="letter",
                               reply_to=letter_contact.id)
    data = {
        "template_id": template.id,
        "personalisation": {
            "address_line_1": "Foo",
            "address_line_2": "Bar",
            "postcode": "Baz",
        },
    }
    letter_request(client,
                   data=data,
                   service_id=service.id,
                   key_type=KEY_TYPE_NORMAL)

    notifications = Notification.query.all()
    assert len(notifications) == 1
    assert notifications[0].reply_to_text == service_address
def test_dao_get_letter_contact_by_id_raises_sqlalchemy_error_when_service_does_not_exist(
        sample_service):
    letter_contact = create_letter_contact(service=sample_service,
                                           contact_block='Some address')
    with pytest.raises(SQLAlchemyError):
        dao_get_letter_contact_by_id(service_id=uuid.uuid4(),
                                     letter_contact_id=letter_contact.id)
def test_archive_letter_contact_can_archive_a_service_default_letter_contact(
        notify_db_session):
    service = create_service()
    letter_contact = create_letter_contact(service=service,
                                           contact_block='Edinburgh, ED1 1AA')
    archive_letter_contact(service.id, letter_contact.id)
    assert letter_contact.archived is True
Ejemplo n.º 18
0
def test_check_service_letter_contact_id_where_service_id_is_not_found(sample_service, fake_uuid):
    letter_contact = create_letter_contact(service=sample_service, contact_block='123456')
    with pytest.raises(BadRequestError) as e:
        check_service_letter_contact_id(fake_uuid, letter_contact.id, LETTER_TYPE)
    assert e.value.status_code == 400
    assert e.value.message == 'letter_contact_id {} does not exist in database for service id {}' \
        .format(letter_contact.id, fake_uuid)
Ejemplo n.º 19
0
def test_update_template_with_foreign_service_reply_to(client,
                                                       sample_letter_template):
    auth_header = create_authorization_header()

    service2 = create_service(service_name='test service',
                              email_from='*****@*****.**',
                              service_permissions=['letter'])
    letter_contact = create_letter_contact(service2, "Edinburgh, ED1 1AA")

    data = {
        'reply_to': str(letter_contact.id),
    }

    resp = client.post('/service/{}/template/{}'.format(
        sample_letter_template.service_id, sample_letter_template.id),
                       data=json.dumps(data),
                       headers=[('Content-Type', 'application/json'),
                                auth_header])

    assert resp.status_code == 400, resp.get_data(as_text=True)
    json_resp = json.loads(resp.get_data(as_text=True))

    assert json_resp[
        'message'] == "letter_contact_id {} does not exist in database for service id {}".format(
            str(letter_contact.id), str(sample_letter_template.service_id))
Ejemplo n.º 20
0
def test_get_letter_template_by_id_returns_placeholders(
    client,
    sample_service,
    version,
):
    contact_block = create_letter_contact(
        service=sample_service,
        contact_block='((contact block))',
    )
    template = create_template(
        sample_service,
        template_type=LETTER_TYPE,
        subject="((letterSubject))",
        content="((letter_content))",
        reply_to=contact_block.id,
    )
    auth_header = create_authorization_header(service_id=sample_service.id)

    version_path = '/version/{}'.format(version) if version else ''

    response = client.get(path='/v2/template/{}{}'.format(template.id, version_path),
                          headers=[('Content-Type', 'application/json'), auth_header])

    json_response = json.loads(response.get_data(as_text=True))
    assert json_response['personalisation'] == {
        "letterSubject": {
            "required": True,
        },
        "letter_content": {
            "required": True,
        },
        "contact block": {
            "required": True,
        },
    }
Ejemplo n.º 21
0
def test_dao_get_letter_contact_by_id_raises_sqlalchemy_error_when_letter_contact_is_archived(sample_service):
    archived_contact = create_letter_contact(
        service=sample_service,
        contact_block='Aberdeen, AB12 23X',
        archived=True)
    with pytest.raises(SQLAlchemyError):
        dao_get_letter_contact_by_id(service_id=sample_service.id, letter_contact_id=archived_contact.id)
Ejemplo n.º 22
0
def test_check_service_letter_contact_id_where_letter_contact_id_is_found(
    sample_service, ):
    letter_contact = create_letter_contact(service=sample_service,
                                           contact_block="123456")
    assert check_service_letter_contact_id(sample_service.id,
                                           letter_contact.id,
                                           LETTER_TYPE) == "123456"
Ejemplo n.º 23
0
def test_create_a_template_with_reply_to(admin_request, sample_user):
    service = create_service(service_permissions=['letter'])
    letter_contact = create_letter_contact(service, "Edinburgh, ED1 1AA")
    data = {
        'name': 'my template',
        'subject': 'subject',
        'template_type': 'letter',
        'content': 'template <b>content</b>',
        'service': str(service.id),
        'created_by': str(sample_user.id),
        'reply_to': str(letter_contact.id),
    }

    json_resp = admin_request.post('template.create_template',
                                   service_id=service.id,
                                   _data=data,
                                   _expected_status=201)

    assert json_resp['data']['template_type'] == 'letter'
    assert json_resp['data']['reply_to'] == str(letter_contact.id)
    assert json_resp['data']['reply_to_text'] == letter_contact.contact_block

    template = Template.query.get(json_resp['data']['id'])
    from app.schemas import template_schema
    assert sorted(json_resp['data']) == sorted(
        template_schema.dump(template).data)
    th = TemplateHistory.query.filter_by(id=template.id, version=1).one()
    assert th.service_letter_contact_id == letter_contact.id
Ejemplo n.º 24
0
def test_post_notification_returns_400_for_missing_letter_contact_block_personalisation(
    client,
    sample_service,
):
    letter_contact_block = create_letter_contact(
        service=sample_service, contact_block='((contact block))', is_default=True
    )
    template = create_template(
        service=sample_service,
        template_type='letter',
        reply_to=letter_contact_block.id,
    )
    data = {
        'template_id': str(template.id),
        'personalisation': {
            'address_line_1': 'Line 1',
            'address_line_2': 'Line 2',
            'postcode': 'SW1A 1AA',
        },
    }

    error_json = letter_request(
        client,
        data,
        service_id=sample_service.id,
        _expected_status=400,
    )

    assert error_json['status_code'] == 400
    assert error_json['errors'] == [{
        'error': 'BadRequestError',
        'message': 'Missing personalisation: contact block'
    }]
Ejemplo n.º 25
0
def test_update_letter_contact_unset_default_for_only_letter_contact_is_fine(notify_db_session):
    service = create_service()
    only_letter_contact = create_letter_contact(service=service, contact_block='Aberdeen, AB12 23X')
    update_letter_contact(
        service_id=service.id,
        letter_contact_id=only_letter_contact.id,
        contact_block='Warwick, W14 TSR',
        is_default=False
    )
    assert only_letter_contact.is_default is False
Ejemplo n.º 26
0
def test_archive_letter_contact_does_not_archive_a_service_default_letter_contact(
        notify_db_session):
    service = create_service()
    letter_contact = create_letter_contact(service=service,
                                           contact_block='Edinburgh, ED1 1AA')

    with pytest.raises(ArchiveValidationError) as e:
        archive_letter_contact(service.id, letter_contact.id)

    assert 'You cannot delete a default letter contact block' in str(e.value)
Ejemplo n.º 27
0
def test_get_template_by_id_returns_200(client, sample_service, tmp_type,
                                        expected_name, expected_subject,
                                        version, postage):
    letter_contact_block_id = None
    if tmp_type == 'letter':
        letter_contact_block = create_letter_contact(
            sample_service, "Buckingham Palace, London, SW1A 1AA")
        letter_contact_block_id = letter_contact_block.id

    template = create_template(sample_service,
                               template_type=tmp_type,
                               contact_block_id=(letter_contact_block_id))
    auth_header = create_authorization_header(service_id=sample_service.id)

    version_path = '/version/{}'.format(version) if version else ''

    response = client.get(path='/v2/template/{}{}'.format(
        template.id, version_path),
                          headers=[('Content-Type', 'application/json'),
                                   auth_header])

    assert response.status_code == 200
    assert response.headers['Content-type'] == 'application/json'

    json_response = json.loads(response.get_data(as_text=True))

    expected_response = {
        'id':
        '{}'.format(template.id),
        'type':
        '{}'.format(template.template_type),
        'created_at':
        template.created_at.strftime(DATETIME_FORMAT),
        'updated_at':
        None,
        'version':
        template.version,
        'created_by':
        template.created_by.email_address,
        'body':
        template.content,
        "subject":
        expected_subject,
        'name':
        expected_name,
        'personalisation': {},
        'postage':
        postage,
        'letter_contact_block':
        letter_contact_block.contact_block
        if letter_contact_block_id else None,
    }

    assert json_response == expected_response
Ejemplo n.º 28
0
def test_update_letter_contact_unset_default_for_only_letter_contact_raises_exception(notify_db_session):
    service = create_service()
    only_letter_contact = create_letter_contact(service=service, contact_block='Aberdeen, AB12 23X')

    with pytest.raises(expected_exception=InvalidRequest):
        update_letter_contact(
            service_id=service.id,
            letter_contact_id=only_letter_contact.id,
            contact_block='Warwick, W14 TSR',
            is_default=False
        )
Ejemplo n.º 29
0
def test_update_letter_contact_as_default_overides_existing_default(notify_db_session):
    service = create_service()

    create_letter_contact(service=service, contact_block='Aberdeen, AB12 23X')
    second_letter_contact = create_letter_contact(service=service, contact_block='Swansea, SN1 3CC', is_default=False)

    update_letter_contact(
        service_id=service.id,
        letter_contact_id=second_letter_contact.id,
        contact_block='Warwick, W14 TSR',
        is_default=True
    )

    results = dao_get_letter_contacts_by_service_id(service_id=service.id)
    assert len(results) == 2

    assert results[0].contact_block == 'Warwick, W14 TSR'
    assert results[0].is_default

    assert results[1].contact_block == 'Aberdeen, AB12 23X'
    assert not results[1].is_default
def test_archive_letter_contact_does_not_archive_a_letter_contact_for_a_different_service(
    notify_db_session,
    sample_service,
):
    service = create_service(service_name="First service")
    letter_contact = create_letter_contact(service=sample_service,
                                           contact_block='Edinburgh, ED1 1AA',
                                           is_default=False)

    with pytest.raises(SQLAlchemyError):
        archive_letter_contact(service.id, letter_contact.id)

    assert not letter_contact.archived