Ejemplo n.º 1
0
def sample_inbound_numbers(sample_service):
    service = create_service(service_name='sample service 2', check_if_service_exists=True)
    inbound_numbers = list()
    inbound_numbers.append(create_inbound_number(number='1', provider='mmg'))
    inbound_numbers.append(create_inbound_number(number='2', provider='mmg', active=False, service_id=service.id))
    inbound_numbers.append(create_inbound_number(number='3', provider='firetext', service_id=sample_service.id))
    return inbound_numbers
def test_twilio_receive_notification_without_permissions_does_not_create_inbound_even_with_inbound_number_set(
        client, mocker, notify_db, notify_db_session):
    mocker.patch('twilio.request_validator.RequestValidator.validate', return_value=True)

    service = sample_service(notify_db, notify_db_session, permissions=[SMS_TYPE])
    create_inbound_number('+61412345678', service_id=service.id, active=True)

    mocked_send_inbound_sms = mocker.patch(
        "app.notifications.receive_notifications.tasks.send_inbound_sms_to_service.apply_async")
    mocked_has_permissions = mocker.patch(
        "app.notifications.receive_notifications.has_inbound_sms_permissions", return_value=False)

    data = urllib.parse.urlencode(
        {
            'MessageSid': '1',
            'From': '+61412999999',
            'To': '+61412345678',
            'Body': 'this is a message'
        }
    )

    response = twilio_post(client, data)

    assert response.status_code == 200
    assert len(InboundSms.query.all()) == 0
    assert mocked_has_permissions.called
    mocked_send_inbound_sms.assert_not_called()
Ejemplo n.º 3
0
def sample_inbound_numbers(notify_db, notify_db_session, sample_service):
    service = create_service(service_name="sample service 2", check_if_service_exists=True)
    inbound_numbers = list()
    inbound_numbers.append(create_inbound_number(number="1", provider="sns"))
    inbound_numbers.append(create_inbound_number(number="2", provider="sns", active=False, service_id=service.id))
    inbound_numbers.append(create_inbound_number(number="3", provider="sns", service_id=sample_service.id))
    return inbound_numbers
Ejemplo n.º 4
0
def sample_inbound_numbers(notify_db, notify_db_session, sample_service):
    service = create_service(service_name='sample service 2')
    inbound_numbers = list()
    inbound_numbers.append(create_inbound_number(number='1', provider='twilio'))
    inbound_numbers.append(create_inbound_number(number='2', provider='twilio', active=False, service_id=service.id))
    inbound_numbers.append(create_inbound_number(number='3', provider='sap', service_id=sample_service.id))
    return inbound_numbers
Ejemplo n.º 5
0
def test_dao_fetch_service_by_inbound_number_with_inbound_number_not_set(
        notify_db_session):
    create_inbound_number('1')

    service = dao_fetch_service_by_inbound_number('1')

    assert service is None
Ejemplo n.º 6
0
def _sample_service_full_permissions(notify_db_session):
    service = create_service(
        service_name="sample service full permissions",
        service_permissions=set(SERVICE_PERMISSION_TYPES),
        check_if_service_exists=True,
    )
    create_inbound_number('12345', service_id=service.id)
    return service
Ejemplo n.º 7
0
def test_dao_fetch_service_by_inbound_number_with_inbound_number(notify_db_session):
    foo1 = create_service_with_inbound_number(service_name='a', inbound_number='1')
    create_service_with_defined_sms_sender(service_name='b', sms_sender_value='2')
    create_service_with_defined_sms_sender(service_name='c', sms_sender_value='3')
    create_inbound_number('2')
    create_inbound_number('3')

    service = dao_fetch_service_by_inbound_number('1')

    assert foo1.id == service.id
Ejemplo n.º 8
0
def test_dao_allocating_inbound_number_shows_on_service(notify_db_session):
    create_service_with_inbound_number()
    create_inbound_number(number='07700900003')

    inbound_numbers = dao_get_available_inbound_numbers()

    service = create_service(service_name='test service')

    dao_set_inbound_number_to_service(service.id, inbound_numbers[0])

    assert service.inbound_number.number == inbound_numbers[0].number
Ejemplo n.º 9
0
def test_rest_set_inbound_number_active_flag_off(admin_request, notify_db_session):
    service = create_service(service_name="test service 1")
    create_inbound_number(number="1", provider="mmg", active=True, service_id=service.id)

    admin_request.post(
        "inbound_number.post_set_inbound_number_off",
        _expected_status=204,
        service_id=service.id,
    )

    inbound_number_from_db = dao_get_inbound_number_for_service(service.id)
    assert not inbound_number_from_db.active
Ejemplo n.º 10
0
def test_setting_a_service_twice_will_raise_an_error(notify_db, notify_db_session):
    create_inbound_number(number='1')
    create_inbound_number(number='2')
    service = create_service(service_name='test service')
    numbers = dao_get_available_inbound_numbers()

    dao_set_inbound_number_to_service(service.id, numbers[0])

    with pytest.raises(IntegrityError) as e:
        dao_set_inbound_number_to_service(service.id, numbers[1])

    assert 'duplicate key value violates unique constraint' in str(e.value)
Ejemplo n.º 11
0
def test_dao_fetch_service_by_inbound_number_with_inbound_number(
        notify_db_session):
    foo1 = create_service_with_inbound_number(service_name="a",
                                              inbound_number="1")
    create_service_with_defined_sms_sender(service_name="b",
                                           sms_sender_value="2")
    create_service_with_defined_sms_sender(service_name="c",
                                           sms_sender_value="3")
    create_inbound_number("2")
    create_inbound_number("3")

    service = dao_fetch_service_by_inbound_number("1")

    assert foo1.id == service.id
Ejemplo n.º 12
0
def test_rest_set_inbound_number_active_flag_off(admin_request,
                                                 notify_db_session):
    service = create_service(service_name='test service 1')
    create_inbound_number(number='1',
                          provider='twilio',
                          active=True,
                          service_id=service.id)

    admin_request.post('inbound_number.post_set_inbound_number_off',
                       _expected_status=204,
                       service_id=service.id)

    inbound_number_from_db = dao_get_inbound_number_for_service(service.id)
    assert not inbound_number_from_db.active
Ejemplo n.º 13
0
def sample_inbound_numbers(notify_db, notify_db_session, sample_service):
    service = create_service(service_name='sample service 2',
                             check_if_service_exists=True)
    inbound_numbers = list()
    inbound_numbers.append(create_inbound_number(number='1', provider='sns'))
    inbound_numbers.append(
        create_inbound_number(number='2',
                              provider='sns',
                              active=False,
                              service_id=service.id))
    inbound_numbers.append(
        create_inbound_number(number='3',
                              provider='sns',
                              service_id=sample_service.id))
    return inbound_numbers
Ejemplo n.º 14
0
def test_inbound_number_serializes_with_service(client, notify_db_session):
    service = create_service()
    inbound_number = create_inbound_number(number='1', service_id=service.id)
    serialized_inbound_number = inbound_number.serialize()
    assert serialized_inbound_number.get('id') == str(inbound_number.id)
    assert serialized_inbound_number.get('service').get('id') == str(inbound_number.service.id)
    assert serialized_inbound_number.get('service').get('name') == inbound_number.service.name
Ejemplo n.º 15
0
def test_dao_allocate_number_for_service_raises_if_inbound_number_already_taken(notify_db_session, sample_service):
    number = '078945612'
    inbound_number = create_inbound_number(number=number, service_id=sample_service.id)
    service = create_service(service_name="Service needs an inbound number")
    with pytest.raises(Exception) as exc:
        dao_allocate_number_for_service(service_id=service.id, inbound_number_id=inbound_number.id)
    assert 'is not available' in str(exc.value)
Ejemplo n.º 16
0
def test_receive_notification_without_permissions_does_not_create_inbound_even_with_inbound_number_set(
        client, mocker, notify_db, notify_db_session):
    service = sample_service(notify_db,
                             notify_db_session,
                             permissions=[SMS_TYPE])
    inbound_number = create_inbound_number('1',
                                           service_id=service.id,
                                           active=True)

    mocked_send_inbound_sms = mocker.patch(
        "app.notifications.receive_notifications.tasks.send_inbound_sms_to_service.apply_async"
    )
    mocked_has_permissions = mocker.patch(
        "app.notifications.receive_notifications.has_inbound_sms_permissions",
        return_value=False)

    data = {
        "ID": "1234",
        "MSISDN": "447800900855",
        "Message": "Some message to notify",
        "Trigger": "Trigger?",
        "Number": inbound_number.number,
        "Channel": "SMS",
        "DateRecieved": "2012-06-27 12:33:00"
    }

    response = mmg_post(client, data)

    assert response.status_code == 200
    assert len(InboundSms.query.all()) == 0
    assert mocked_has_permissions.called
    mocked_send_inbound_sms.assert_not_called()
Ejemplo n.º 17
0
def test_get_available_inbound_numbers(notify_db, notify_db_session):
    inbound_number = create_inbound_number(number='1')

    res = dao_get_available_inbound_numbers()

    assert len(res) == 1
    assert res[0] == inbound_number
Ejemplo n.º 18
0
def test_dao_allocate_number_for_service(notify_db_session):
    number = '078945612'
    inbound_number = create_inbound_number(number=number)
    service = create_service()

    updated_inbound_number = dao_allocate_number_for_service(service_id=service.id, inbound_number_id=inbound_number.id)
    assert service.get_inbound_number() == number
    assert updated_inbound_number.service_id == service.id
Ejemplo n.º 19
0
def test_set_inbound_number_active_flag(notify_db, notify_db_session, sample_service, active):
    inbound_number = create_inbound_number(number='1')
    dao_set_inbound_number_to_service(sample_service.id, inbound_number)

    dao_set_inbound_number_active_flag(sample_service.id, active=active)

    inbound_number = dao_get_inbound_number_for_service(sample_service.id)

    assert inbound_number.active is active
Ejemplo n.º 20
0
def test_inbound_number_serializes_with_service(client, notify_db_session):
    service = create_service()
    inbound_number = create_inbound_number(number="1", service_id=service.id)
    serialized_inbound_number = inbound_number.serialize()
    assert serialized_inbound_number.get("id") == str(inbound_number.id)
    assert serialized_inbound_number.get("service").get("id") == str(
        inbound_number.service.id)
    assert serialized_inbound_number.get("service").get(
        "name") == inbound_number.service.name
Ejemplo n.º 21
0
def test_rest_get_inbound_number(admin_request, notify_db_session,
                                 sample_service):
    inbound_number = create_inbound_number(number='1',
                                           provider='mmg',
                                           active=False,
                                           service_id=sample_service.id)

    result = admin_request.get('inbound_number.get_inbound_number_for_service',
                               service_id=sample_service.id)
    assert result['data'] == inbound_number.serialize()
Ejemplo n.º 22
0
    def test_raises_exception_if_adding_number_different_to_inbound_number(
            self, notify_db_session):
        service = create_service()
        inbound_number = create_inbound_number(number='+15551234567')

        with pytest.raises(SmsSenderInboundNumberIntegrityException):
            dao_add_sms_sender_for_service(service_id=service.id,
                                           sms_sender='+15557654321',
                                           is_default=False,
                                           inbound_number_id=inbound_number.id)
Ejemplo n.º 23
0
def sample_service(notify_db,
                   notify_db_session,
                   service_name="Sample service",
                   user=None,
                   restricted=False,
                   limit=1000,
                   email_from=None,
                   permissions=None,
                   research_mode=None):
    if user is None:
        user = create_user()
    if email_from is None:
        email_from = service_name.lower().replace(' ', '.')

    data = {
        'name': service_name,
        'message_limit': limit,
        'restricted': restricted,
        'email_from': email_from,
        'created_by': user,
        'crown': True
    }
    service = Service.query.filter_by(name=service_name).first()
    if not service:
        service = Service(**data)
        dao_create_service(service, user, service_permissions=permissions)

        if research_mode:
            service.research_mode = research_mode

    else:
        if user not in service.users:
            dao_add_user_to_service(service, user)

    if permissions and INBOUND_SMS_TYPE in permissions:
        create_inbound_number('12345', service_id=service.id)

    if permissions and INBOUND_SMS_KEYWORD_TYPE in permissions:
        create_inbound_shortnumber('12345', service_id=service.id)

    return service
Ejemplo n.º 24
0
def sample_service(
    notify_db,
    notify_db_session,
    service_name="Sample service",
    user=None,
    restricted=False,
    limit=1000,
    email_from=None,
    permissions=None,
    research_mode=None,
):
    if user is None:
        user = create_user()
    if email_from is None:
        email_from = service_name.lower().replace(" ", ".")

    data = {
        "name": service_name,
        "message_limit": limit,
        "restricted": restricted,
        "email_from": email_from,
        "created_by": user,
        "crown": True,
    }
    service = Service.query.filter_by(name=service_name).first()
    if not service:
        service = Service(**data)
        dao_create_service(service, user, service_permissions=permissions)

        if research_mode:
            service.research_mode = research_mode

    else:
        if user not in service.users:
            dao_add_user_to_service(service, user)

    if permissions and INBOUND_SMS_TYPE in permissions:
        create_inbound_number("12345", service_id=service.id)

    return service
Ejemplo n.º 25
0
def test_update_existing_sms_sender_with_inbound_number(notify_db_session):
    service = create_service()
    inbound_number = create_inbound_number(number='12345',
                                           service_id=service.id)

    existing_sms_sender = ServiceSmsSender.query.filter_by(
        service_id=service.id).one()
    sms_sender = update_existing_sms_sender_with_inbound_number(
        service_sms_sender=existing_sms_sender,
        sms_sender=inbound_number.number,
        inbound_number_id=inbound_number.id)

    assert sms_sender.inbound_number_id == inbound_number.id
    assert sms_sender.sms_sender == inbound_number.number
    assert sms_sender.is_default
Ejemplo n.º 26
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.º 27
0
def test_update_service_sms_sender_does_not_allow_sender_update_for_inbound_number(
        admin_request, notify_db_session):
    service = create_service()
    inbound_number = create_inbound_number('12345', service_id=service.id)
    service_sms_sender = create_service_sms_sender(
        service=service,
        sms_sender='1235',
        is_default=False,
        inbound_number_id=inbound_number.id)
    payload = {
        "sms_sender": 'second',
        "is_default": True,
        "inbound_number_id": str(inbound_number.id)
    }
    admin_request.post('service_sms_sender.update_service_sms_sender',
                       service_id=service.id,
                       sms_sender_id=service_sms_sender.id,
                       _data=payload,
                       _expected_status=400)
Ejemplo n.º 28
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.º 29
0
def test_inbound_number_returns_inbound_number(client, notify_db_session):
    service = create_service()
    inbound_number = create_inbound_number(number='1', service_id=service.id)

    assert service.get_inbound_number() == inbound_number.number
Ejemplo n.º 30
0
def test_rest_get_inbound_number(admin_request, notify_db_session, sample_service):
    inbound_number = create_inbound_number(number="1", provider="mmg", active=False, service_id=sample_service.id)

    result = admin_request.get("inbound_number.get_inbound_number_for_service", service_id=sample_service.id)
    assert result["data"] == inbound_number.serialize()