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'
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
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)
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)
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
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_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
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
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)
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
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_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
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