def test_save_user_object_by_yandex_to_user_unauthorized(alice_message): connector = DialogConnector(Repeater(), alice_native_state='user') uo = {'count': 1, 'name': 'Alex'} response = Response(text='привет', user_object=uo) output = connector.standardize_output(source=SOURCES.ALICE, original_message=alice_message, response=response) assert output['user_state_update'] == {'count': 1, 'name': 'Alex'} assert output['application_state'] == {'count': 1, 'name': 'Alex'}
def test_alice_response(alice_message): connector = DialogConnector(Repeater()) response = Response(text='привет', suggests=['тебе тоже']) output = connector.standardize_output(source=SOURCES.ALICE, original_message=alice_message, response=response) assert not output['response'].get('end_session') assert output['response']['text'] == 'привет' assert 'voice' not in output['response'] or output['response']['voice'] == 'привет' assert output['response']['buttons'] == [{'title': 'тебе тоже', 'hide': True}]
def test_save_user_object_by_yandex(alice_message): connector = DialogConnector(Repeater(), alice_native_state=True) uo = { 'session': {'count': 1}, 'user': {'name': 'Alex'} } response = Response(text='привет', user_object=uo) output = connector.standardize_output(source=SOURCES.ALICE, original_message=alice_message, response=response) assert output['session_state'] == {'count': 1} assert output['user_state_update'] == {'name': 'Alex'}
def test_load_user_object_by_yandex(ans, uo, auth, alice_message): connector = DialogConnector(Repeater(), alice_native_state=ans) if auth: alice_message['session']['user'] = {'user_id': '123'} alice_message['state'] = { 'session': { 'value': 10 }, 'user': { 'value': 42, }, 'application': { 'value': 50, } } ctx = connector.make_context(message=alice_message, source=SOURCES.ALICE) assert ctx.user_object == uo
from dialogic.dialog_connector import DialogConnector from dialogic.server.flask_server import FlaskServer from dialogic.storage.message_logging import MongoMessageLogger from dm import make_dm import scenarios # noqa import logging logging.basicConfig(level=logging.DEBUG) dm = make_dm() connector = DialogConnector( dialog_manager=dm, log_storage=MongoMessageLogger(), # requires MONGODB_URI env variable alice_native_state='session', # use built-in session state in Alice ) server = FlaskServer(connector=connector) handler = connector.serverless_alice_handler if __name__ == '__main__': server.parse_args_and_run()
from dialogic.dialog_connector import DialogConnector from dialogic.dialog_manager import TurnDialogManager from dialogic.server.flask_server import FlaskServer from dialogic.cascade import DialogTurn, Cascade csc = Cascade() @csc.add_handler(priority=10, regexp='(hello|hi|привет|здравствуй)') def hello(turn: DialogTurn): turn.response_text = 'Hello! This is the only conditional phrase I have.' @csc.add_handler(priority=1) def fallback(turn: DialogTurn): turn.response_text = 'Hi! Sorry, I do not understand you.' turn.suggests.append('hello') dm = TurnDialogManager(cascade=csc) connector = DialogConnector(dialog_manager=dm) server = FlaskServer(connector=connector) if __name__ == '__main__': server.parse_args_and_run()
def test_image_api(): token = '1234' skill_id = '5678' default_image_id = '9101112' manager = YandexImageAPI(token=token, skill_id=skill_id, default_image_id=default_image_id) # test updating with patch('requests.get') as mock: mock.return_value.json = lambda: { 'images': [ { 'id': 'tree', 'origUrl': 'trees.com/tree.jpg', 'size': 100500, 'createdAt': 'today' }, { 'id': 'snake', 'size': 100500, 'createdAt': 'yesterday' }, ], 'total': 2 } manager.update_images() assert mock.called args = mock.call_args[1] assert args[ 'url'] == 'https://dialogs.yandex.net/api/v1/skills/{}/images'.format( skill_id) assert args['headers'] == {'Authorization': 'OAuth 1234'} assert len(manager.url2image) == 1 assert len(manager.id2image) == 2 # test usage without upload with patch('requests.post') as mock: assert manager.get_image_id_by_url('trees.com/tree.jpg') == 'tree' assert manager.get_image_id_by_url( 'trees.com/pine.jpg') == default_image_id assert not mock.called # test adding an existing image with patch('requests.post') as mock: image = manager.add_image(url='trees.com/tree.jpg') assert not mock.called assert image.id == 'tree' # test uploading an image with patch('requests.post') as mock: oak_url = 'trees.com/oak.jpg' mock.return_value.json = lambda: { 'image': { 'id': 'oak', 'origUrl': oak_url, 'size': 100500, 'createdAt': 'right_now' } } image = manager.add_image(url=oak_url) assert mock.called assert mock.call_args[1][ 'url'] == 'https://dialogs.yandex.net/api/v1/skills/{}/images'.format( skill_id) assert image.origUrl == oak_url assert image.id == 'oak' assert len(manager.id2image) == 3 assert len(manager.url2image) == 2 # test uploading an image on the fly manager.upload_just_in_time = True with patch('requests.post') as mock: maple_url = 'trees.com/maple.jpg' mock.return_value.ok = True mock.return_value.json = lambda: { 'image': { 'id': 'maple', 'origUrl': maple_url, 'size': 100500, 'createdAt': 'right_now' } } assert manager.get_image_id_by_url(maple_url) == 'maple' assert mock.called assert len(manager.id2image) == 4 assert len(manager.url2image) == 3 # test removing an image with patch('requests.delete') as mock: mock.return_value.ok = True mock.return_value.json = lambda: {'result': 'ok'} manager.delete_image('maple') assert mock.called assert mock.call_args[1][ 'url'] == 'https://dialogs.yandex.net/api/v1/skills/{}/images/maple'.format( skill_id) assert len(manager.id2image) == 3 assert len(manager.url2image) == 2 # test automatic conversion of urls to ids connector = DialogConnector(dialog_manager=None, image_manager=manager) response = dialogic.dialog.Response('this is an oak', image_url='trees.com/oak.jpg') result = connector.standardize_output(source=dialogic.SOURCES.ALICE, original_message={'version': '1.0'}, response=response) assert result['response']['card'] == { 'type': 'BigImage', 'image_id': 'oak', 'description': 'this is an oak', }
def test_user_objects(): connector = DialogConnector(Repeater()) assert connector.get_user_object('user_1') == {} connector.set_user_object('user_1', {'name': 'alex'}) assert connector.get_user_object('user_2') == {} assert connector.get_user_object('user_1') == {'name': 'alex'}
def test_alice_input(alice_message): connector = DialogConnector(Repeater()) ctx = connector.make_context(message=alice_message, source=SOURCES.ALICE) assert ctx.user_id == 'alice__user-id-1' assert ctx.message_text == 'привет' assert ctx.metadata['new_session']