Example #1
0
 def test_datetime_requirement_false(self):
     user = PicklableMock()
     user.id = "353454"
     user.message.payload = {
         "meta": {
             "time": {
                 "timestamp": 1610979455663,  # ~ 2021-01-18 17:17:35
                 "timezone_offset_sec": 1000000000,  # shouldn't affect
             }
         }
     }
     requirement = DateTimeRequirement({"match_cron": "* * * * 6,7"})
     text_normalization_result = None
     self.assertFalse(requirement.check(text_normalization_result, user))
Example #2
0
 def test_time_requirement_false(self):
     user = PicklableMock()
     user.id = "353454"
     user.message.payload = {
         "meta": {
             "time": {
                 "timestamp": 1610979455663,  # ~ 2021-01-18 17:17:35
                 "timezone_offset_sec": 1000000000,  # shouldn't affect
             }
         }
     }
     requirement = TimeRequirement(
         {"operator": {
             "type": "more",
             "amount": "18:00:00",
         }})
     text_normalization_result = None
     self.assertFalse(requirement.check(text_normalization_result, user))
Example #3
0
    def test_3(self):
        expected = "prev_value"
        mock_user = PicklableMock()
        mock_user.last_fields = PicklableMagicMock()
        value_mock = PicklableMock()
        value_mock.value = "prev_value"
        mock_user.last_fields.__getitem__.return_value = value_mock
        mock_user.settings = {"template_settings": {}}

        description = PicklableMock()
        description.need_load_context = True
        description.id = 5

        lifetime = 10
        items = None
        field = QuestionField(description, items, mock_user, lifetime)

        result = field.value
        self.assertEqual(expected, result)
Example #4
0
    def test_action_with_jinja(self):
        scenario = PicklableMock()
        scenario.id = 'name'
        scenario.version = '1.0'
        self.user.descriptions = {'scenarios': {'test_scenario': scenario}}
        items = {
            'event_type': 'type',
            'event_content': {
                'field_1': '{{ main_form.field_1 }}'
            },
            'results': '{{ message.name }}'
        }
        expected = Event(type='type',
                         results='CLIENT_INFO_RESPONSE',
                         content={'field_1': 'value_1'},
                         scenario='name',
                         scenario_version='1.0')

        action = AddHistoryEventAction(items)
        action.run(self.user, None, None)

        self.user.history.add_event.assert_called_once()
        self.user.history.add_event.assert_called_once_with(expected)
Example #5
0
    def test_action_with_non_empty_scenario(self):
        scenario = PicklableMock()
        scenario.id = 'name'
        scenario.version = '1.0'
        self.user.descriptions = {'scenarios': {'test_scenario': scenario}}
        items = {
            'event_type': 'type',
            'event_content': {
                'foo': 'bar'
            },
            'results': 'result'
        }
        expected = Event(type='type',
                         results='result',
                         content={'foo': 'bar'},
                         scenario='name',
                         scenario_version='1.0')

        action = AddHistoryEventAction(items)
        action.run(self.user, None, None)

        self.user.history.add_event.assert_called_once()
        self.user.history.add_event.assert_called_once_with(expected)
Example #6
0
    def test_7_3(self):
        expected = "some_value"

        mock_value = PicklableMock()
        mock_value.value = None

        mock_user = PicklableMagicMock()
        mock_user.last_fields = PicklableMagicMock()
        mock_user.last_fields.__getitem__.return_value = mock_value

        description = PicklableMock()
        description.id = 5
        description.default_value = expected
        description.available = True
        description.need_save_context = True

        lifetime = 10
        items = {"value": "my_value", "available": True}
        field = QuestionField(description, items, mock_user, lifetime)
        field.fill(expected)
        result = field.value

        self.assertEqual(expected, result)
        self.assertEqual(expected, mock_value.value)
Example #7
0
 def test_rolling_requirement_false(self):
     user = PicklableMock()
     user.id = "353454"
     requirement = RollingRequirement({"percent": 0})
     text_normalization_result = None
     self.assertFalse(requirement.check(text_normalization_result, user))
    def test_breake(self):
        """
        Тест проверяет выход из сценария если сработает флаг break_scenario
        """

        registered_factories[Action] = action_factory
        actions["test"] = MockAction
        actions["break"] = MockAction
        actions["success"] = MockAction

        form_type = "form for doing smth"
        internal_form_key = "my form key"

        node_mock = {
            "form_key": internal_form_key,
            "actions": [{
                "type": "test",
                "command": "jump",
                "nodes": {}
            }]
        }

        items = {
            "channels": "web",
            "form": form_type,
            "start_node_key": "node_1",
            "scenario_nodes": {
                "node_1": node_mock
            },
            "actions": [{
                "type": "success"
            }]
        }

        field_descriptor = PicklableMock(name="field_descriptor_mock")
        field_descriptor.filler.extract = PicklableMock(
            name="my_field_value_1", return_value=61)
        field_descriptor.fill_other = False
        field_descriptor.field_validator.actions = []
        field_descriptor.on_filled_actions = [
            BreakAction(),
            MockAction(command_name="break action result")
        ]
        field_descriptor.id = "age"

        internal_form = PicklableMock(name="internal_form_mock")
        internal_form.description.fields.items = PicklableMock(
            return_value=[("age", field_descriptor)])
        internal_form.field.field_validator.requirement.check = PicklableMock(
            return_value=True)
        field = PicklableMock()
        field.description = field_descriptor
        field.value = 61
        internal_form.fields = {field_descriptor: field, "age": field}
        internal_form.is_valid = PicklableMock(return_value=True)

        start_form_mock = PicklableMagicMock(name="start_form_mock")

        composite_form = PicklableMagicMock(name="form_mock")
        composite_form.forms = start_form_mock
        composite_form.set_valid = PicklableMock()

        context_forms = PicklableMagicMock(name="context_form_mock")
        context_forms.new = PicklableMock(
            return_value=PicklableMock(forms={"my form key": internal_form},
                                       is_endless=PicklableMock(
                                           return_value=False)))

        current_node_mock = PicklableMock(name="current_node_mock")
        current_node_mock.form_key = "start_node_mock"
        current_node_mock.available_nodes = False

        user = PicklableMock()
        user.forms = context_forms
        user.scenario_models = PicklableMagicMock()
        user.scenario_models.__getitem__ = PicklableMock(
            name="scenario_mock", return_value=current_node_mock)

        text_preprocessing_result = None

        scenario = TreeScenario(items, 1)

        result = scenario.run(text_preprocessing_result, user)

        self.assertFalse(scenario.actions[0].called)
        self.assertEqual(result[0].name, "break action result")