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()
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
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
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
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
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
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
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
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)
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
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
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
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
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)
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()
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
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
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
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
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()
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)
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
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
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
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
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)
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)
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
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()