Ejemplo n.º 1
0
def test_notification_reply_to_text_is_original_value_if_sender_is_changed_after_post_notification(
        client, sample_template, mocker):
    sms_sender = create_service_sms_sender(service=sample_template.service,
                                           sms_sender='123456',
                                           is_default=False)
    mocker.patch('app.celery.provider_tasks.deliver_sms.apply_async')
    data = {
        'phone_number': '+16502532222',
        'template_id': str(sample_template.id),
        'sms_sender_id': str(sms_sender.id)
    }
    auth_header = create_authorization_header(
        service_id=sample_template.service_id)

    response = client.post(path='/v2/notifications/sms',
                           data=json.dumps(data),
                           headers=[('Content-Type', 'application/json'),
                                    auth_header])

    dao_update_service_sms_sender(service_id=sample_template.service_id,
                                  service_sms_sender_id=sms_sender.id,
                                  is_default=sms_sender.is_default,
                                  sms_sender='updated')

    assert response.status_code == 201
    notifications = Notification.query.all()
    assert len(notifications) == 1
    assert notifications[0].reply_to_text == '123456'
Ejemplo n.º 2
0
def create_service_with_defined_sms_sender(
        sms_sender_value='1234567',
        *args, **kwargs
):
    service = create_service(*args, **kwargs)

    sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).first()
    dao_update_service_sms_sender(service_id=service.id,
                                  service_sms_sender_id=sms_sender.id,
                                  is_default=True,
                                  sms_sender=sms_sender_value)

    return service
Ejemplo n.º 3
0
def test_dao_update_service_sms_sender_raises_exception_when_no_default_after_update(
        notify_db_session):
    service = create_service()
    sms_sender = dao_add_sms_sender_for_service(service_id=service.id,
                                                sms_sender='new_sms',
                                                is_default=True,
                                                inbound_number_id=None)
    with pytest.raises(expected_exception=Exception) as e:
        dao_update_service_sms_sender(service_id=service.id,
                                      service_sms_sender_id=sms_sender.id,
                                      is_default=False,
                                      sms_sender="updated")
    assert 'You must have at least one SMS sender as the default' in str(
        e.value)
Ejemplo n.º 4
0
    def test_raises_exception_if_update_would_result_in_no_default_sms_sender(
            self, notify_db_session):
        service = create_service()
        existing_sms_sender = ServiceSmsSender.query.filter_by(
            service_id=service.id).one()

        with pytest.raises(SmsSenderDefaultValidationException) as e:
            dao_update_service_sms_sender(
                service_id=service.id,
                service_sms_sender_id=existing_sms_sender.id,
                is_default=False,
                sms_sender="updated")

        assert 'You must have at least one SMS sender as the default' in str(
            e.value)
Ejemplo n.º 5
0
def create_service_with_inbound_number(
        inbound_number='1234567',
        *args, **kwargs
):
    service = create_service(*args, **kwargs)

    sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).first()
    inbound = create_inbound_number(number=inbound_number)
    dao_update_service_sms_sender(
        service_id=service.id,
        service_sms_sender_id=sms_sender.id,
        sms_sender=inbound_number,
        inbound_number_id=inbound.id
    )

    return service
Ejemplo n.º 6
0
    def test_dao_update_service_sms_sender(self, notify_db_session):
        service = create_service()
        existing_sms_sender = ServiceSmsSender.query.filter_by(
            service_id=service.id).one()

        inbound_number = create_inbound_number('+5551234567')
        dao_update_service_sms_sender(
            service_id=service.id,
            service_sms_sender_id=existing_sms_sender.id,
            sms_sender='updated',
            inbound_number_id=inbound_number.id)

        existing_sms_sender_after_updates = ServiceSmsSender.query.filter_by(
            service_id=service.id).one()
        assert existing_sms_sender_after_updates.is_default
        assert existing_sms_sender_after_updates.sms_sender == 'updated'
        assert existing_sms_sender_after_updates.inbound_number_id == inbound_number.id
Ejemplo n.º 7
0
def test_dao_update_service_sms_sender_switches_default(notify_db_session):
    service = create_service()
    sms_sender = dao_add_sms_sender_for_service(service_id=service.id,
                                                sms_sender='new_sms',
                                                is_default=False,
                                                inbound_number_id=None)
    dao_update_service_sms_sender(service_id=service.id,
                                  service_sms_sender_id=sms_sender.id,
                                  is_default=True,
                                  sms_sender="updated")
    sms_senders = ServiceSmsSender.query.filter_by(
        service_id=service.id).order_by(ServiceSmsSender.created_at).all()
    assert len(sms_senders) == 2
    assert sms_senders[0].sms_sender == 'testing'
    assert not sms_senders[0].is_default
    assert sms_senders[1].sms_sender == 'updated'
    assert sms_senders[1].is_default
Ejemplo n.º 8
0
def test_dao_update_service_sms_sender(notify_db_session):
    service = create_service()
    service_sms_senders = ServiceSmsSender.query.filter_by(
        service_id=service.id).all()
    assert len(service_sms_senders) == 1
    sms_sender_to_update = service_sms_senders[0]

    dao_update_service_sms_sender(
        service_id=service.id,
        service_sms_sender_id=sms_sender_to_update.id,
        is_default=True,
        sms_sender="updated")
    sms_senders = ServiceSmsSender.query.filter_by(service_id=service.id).all()
    assert len(sms_senders) == 1
    assert sms_senders[0].is_default
    assert sms_senders[0].sms_sender == 'updated'
    assert not sms_senders[0].inbound_number_id
Ejemplo n.º 9
0
    def test_raises_exception_if_updating_number_to_use_already_allocated_inbound_number(
            self, notify_db_session):
        service_with_inbound_number = create_service_with_inbound_number()
        inbound_number = InboundNumber.query.filter_by(
            service_id=service_with_inbound_number.id).one()

        new_service = create_service(service_name='new service')
        existing_sms_sender = ServiceSmsSender.query.filter_by(
            service_id=service_with_inbound_number.id).one()

        with pytest.raises(SmsSenderInboundNumberIntegrityException) as e:
            dao_update_service_sms_sender(
                service_id=new_service.id,
                service_sms_sender_id=existing_sms_sender.id,
                inbound_number_id=inbound_number.id)

        expected_msg = f'Inbound number: {inbound_number.id} is not available'
        assert expected_msg in str(e.value)
Ejemplo n.º 10
0
def test_archive_sms_sender_raises_an_error_if_attempting_to_archive_an_inbound_number(
        notify_db_session, is_default):
    service = create_service_with_inbound_number(inbound_number='7654321')
    dao_add_sms_sender_for_service(service.id, 'second', is_default=True)

    inbound_number = next(x for x in service.service_sms_senders
                          if x.inbound_number_id)

    # regardless of whether inbound number is default or not, can't delete it
    dao_update_service_sms_sender(service.id,
                                  inbound_number.id,
                                  is_default=is_default)

    with pytest.raises(ArchiveValidationError) as e:
        archive_sms_sender(service_id=service.id,
                           sms_sender_id=inbound_number.id)

    assert 'You cannot delete an inbound number' in str(e.value)
    assert not inbound_number.archived
Ejemplo n.º 11
0
    def test_raises_exception_if_updating_number_with_inbound_number_already_set(
            self, notify_db_session):
        service = create_service()
        existing_sms_sender = ServiceSmsSender.query.filter_by(
            service_id=service.id).one()

        inbound_number = create_inbound_number('+5551234567')
        dao_update_service_sms_sender(
            service_id=service.id,
            service_sms_sender_id=existing_sms_sender.id,
            inbound_number_id=inbound_number.id)

        with pytest.raises(SmsSenderInboundNumberIntegrityException) as e:
            dao_update_service_sms_sender(
                service_id=service.id,
                service_sms_sender_id=existing_sms_sender.id,
                sms_sender='new-number')

        expected_msg = 'You cannot update the number for this SMS sender as it has an associated Inbound Number'
        assert expected_msg in str(e.value)
Ejemplo n.º 12
0
    def test_switches_default(self, notify_db_session):
        service = create_service()
        existing_sms_sender = ServiceSmsSender.query.filter_by(
            service_id=service.id).one()

        new_sms_sender = dao_add_sms_sender_for_service(service_id=service.id,
                                                        sms_sender='new_sms',
                                                        is_default=False,
                                                        inbound_number_id=None)

        dao_update_service_sms_sender(service_id=service.id,
                                      service_sms_sender_id=new_sms_sender.id,
                                      is_default=True)

        existing_sms_sender_after_updates = ServiceSmsSender.query.filter_by(
            id=existing_sms_sender.id).one()
        assert not existing_sms_sender_after_updates.is_default

        new_sms_sender_after_updates = ServiceSmsSender.query.filter_by(
            id=new_sms_sender.id).one()
        assert new_sms_sender_after_updates.is_default
Ejemplo n.º 13
0
def update_service_sms_sender(service_id, sms_sender_id):
    form = validate(request.get_json(), add_service_sms_sender_request)

    sms_sender_to_update = dao_get_service_sms_senders_by_id(service_id=service_id,
                                                             service_sms_sender_id=sms_sender_id)
    if sms_sender_to_update.inbound_number_id and form['sms_sender'] != sms_sender_to_update.sms_sender:
        raise InvalidRequest("You can not change the inbound number for service {}".format(service_id),
                             status_code=400)

    new_sms_sender = dao_update_service_sms_sender(service_id=service_id,
                                                   service_sms_sender_id=sms_sender_id,
                                                   is_default=form['is_default'],
                                                   sms_sender=form['sms_sender']
                                                   )
    return jsonify(new_sms_sender.serialize()), 200
def update_service_sms_sender(service_id, sms_sender_id):
    form = validate(request.get_json(), update_service_sms_sender_request)
    updated_sms_sender = dao_update_service_sms_sender(
        service_id=service_id, service_sms_sender_id=sms_sender_id, **form)
    return jsonify(updated_sms_sender.serialize()), 200