Пример #1
0
 def test_fill_field(self):
     params = {"test_field": "test_data"}
     data = {
         "form": "test_form",
         "field": "test_field",
         "internal_form": "test_internal_form",
         "data_path": "{{test_field}}",
         "parametrizer": {
             "data": params
         }
     }
     action = CompositeFillFieldAction(data)
     user = PicklableMock()
     user.parametrizer = MockParametrizer(user, {"data": params})
     form = PicklableMock()
     internal_form = PicklableMock()
     form.forms = {"test_internal_form": internal_form}
     user.forms = {"test_form": form}
     field = PicklableMock()
     field.fill = PicklableMock()
     user.forms["test_form"].forms["test_internal_form"].fields = {
         "test_field": field
     }
     action.run(user, None)
     field.fill.assert_called_once_with(params["test_field"])
Пример #2
0
    def test_form_field_value_requirement_false(self):
        """Тест кейз проверяет что условие возвращает False, т.к в
        форме form_name в поле form_field значение НЕ совпадает с переданным field_value.
        """
        form_name = "test_form"
        form_field = "test_field"
        field_value = "test_value"

        test_itmes = {
            "form_name": form_name,
            "field_name": form_field,
            "value": field_value
        }
        req_form_field_value = FormFieldValueRequirement(test_itmes)

        user = PicklableMock()
        user.forms = {form_name: PicklableMock()}
        user.forms[form_name].fields = {
            form_field: PicklableMock(),
            "value": "OTHER_TEST_VAL"
        }
        user.forms[form_name].fields[form_field].value = "OTHER_TEST_VAL"

        result = req_form_field_value.check(PicklableMock(), user)
        self.assertFalse(result)
Пример #3
0
    def test_action_with_empty_scenarios_names(self):
        user = PicklableMock()
        user.forms = PicklableMock()

        user.last_scenarios.last_scenario_name = "test_scenario"

        action = ClearScenarioByIdAction({})
        result = action.run(user, {}, {})
        self.assertIsNone(result)
        user.last_scenarios.delete.assert_not_called()
        user.forms.remove_item.assert_not_called()
Пример #4
0
    def test_action(self):
        user = PicklableMock()
        user.forms = PicklableMock()
        user.last_scenarios.last_scenario_name = 'test_scenario'
        scenario_model = PicklableMock()
        scenario_model.current_node = 'some_node'
        user.scenario_models = {'test_scenario': scenario_model}

        action = ResetCurrentNodeAction({})
        result = action.run(user, {}, {})
        self.assertIsNone(result)
        self.assertIsNone(user.scenario_models['test_scenario'].current_node)
 def test_expire(self):
     user = PicklableMock()
     user.forms = {"pay_phone_scenario": None}
     pay_phone_scenario = PicklableMock()
     pay_phone_scenario.form_type = "pay_phone_scenario"
     scenarios = ScenarioDescription({"pay_phone_scenario": pay_phone_scenario})
     user.descriptions = {"scenarios": scenarios}
     last_scenario_description = PicklableMock()
     items = ["pay_phone_scenario"]
     ls = LastScenarios(items, last_scenario_description, user)
     ls.expire()
     self.assertSequenceEqual([], ls.raw)
Пример #6
0
    def test_specific_target(self):
        user = PicklableMock()
        user.forms = PicklableMock()
        user.last_scenarios.last_scenario_name = 'test_scenario'
        scenario_model = PicklableMock()
        scenario_model.current_node = 'some_node'
        user.scenario_models = {'test_scenario': scenario_model}

        items = {'node_id': 'another_node'}
        action = ResetCurrentNodeAction(items)
        result = action.run(user, {}, {})
        self.assertIsNone(result)
        self.assertEqual('another_node',
                         user.scenario_models['test_scenario'].current_node)
Пример #7
0
    def test_action(self):
        scenario_name = "test_scenario"
        user = PicklableMock()
        user.forms = PicklableMock()

        user.last_scenarios.last_scenario_name = scenario_name
        scenario = PicklableMock()
        scenario.form_type = scenario_name
        user.descriptions = {"scenarios": {scenario_name: scenario}}

        action = ClearScenarioByIdAction({"scenario_id": scenario_name})
        result = action.run(user, {}, {})
        self.assertIsNone(result)
        user.last_scenarios.delete.assert_called_once()
        user.forms.remove_item.assert_called_once()
Пример #8
0
    def test_action_with_empty_last_scenario(self):
        scenario_name = "test_scenario"
        user = PicklableMock()
        user.forms = PicklableMock()
        user.forms.remove_item = PicklableMock()

        user.last_scenarios.last_scenario_name = None
        scenario = PicklableMock()
        scenario.form_type = scenario_name
        scenario.keep_forms_alive = False
        user.descriptions = {"scenarios": {scenario_name: scenario}}

        action = ClearCurrentScenarioFormAction({})
        result = action.run(user, {}, {})
        self.assertIsNone(result)
        user.forms.remove_item.assert_not_called()
Пример #9
0
 def test_fill_field(self):
     params = {"test_field": "test_data"}
     data = {
         "form": "test_form",
         "field": "test_field",
         "data_path": "{{test_field}}"
     }
     action = FillFieldAction(data)
     user = PicklableMock()
     user.parametrizer = MockParametrizer(user, {"data": params})
     user.forms = {"test_form": PicklableMock()}
     field = PicklableMock()
     field.fill = PicklableMock()
     user.forms["test_form"].fields = {"test_field": field}
     action.run(user, None)
     field.fill.assert_called_once_with(params["test_field"])
Пример #10
0
 def test_clear_form(self):
     expected_result = {
         'sbm_credit': {
             'fields': {
                 'amount': {
                     'value': 100.0
                 },
                 'currency': {
                     'filler': {
                         'type': 'currency_first'
                     },
                     'questions': [{
                         'action': 'sbm_currency_question',
                         'type': 'external'
                     }],
                     'required':
                     True
                 }
             },
             'remove_time': 1506418333
         }
     }
     description_MB = MockDescription('Turn_on_MB', False)
     description_credit = MockDescription('sbm_credit', False)
     description_off_MB = MockDescription('Turn_off_MB', False)
     descriptions = {
         "scenarios":
         MockDescriptions({
             'Turn_on_MB': description_MB,
             'sbm_credit': description_credit,
             'Turn_off_MB': description_off_MB
         }),
         "forms":
         MockDescriptions({
             'Turn_on_MB': description_MB,
             'sbm_credit': description_credit,
             'Turn_off_MB': description_off_MB
         })
     }
     user = PicklableMock()
     user.descriptions = descriptions
     forms = Forms(self.mock_1, descriptions["forms"], user)
     user.forms = forms
     forms.clear_form("Turn_on_MB")
     self.assertEqual(expected_result, user.forms.raw)
    def test_add_1(self):
        items = ["pay_phone_scenario"]
        forms = MagicMock(name="context_form_mock")
        forms.clear_form = self.remove_item
        user = PicklableMock()
        user.forms = forms

        pay_phone_scenario = PicklableMock()
        pay_phone_scenario.keep_forms_alive = False
        pay_phone_scenario.form_type = "pay_phone_scenario"
        user.descriptions = {"scenarios": ScenarioDescription({"pay_phone_scenario": pay_phone_scenario})}
        last_scenario_description = PicklableMock()
        last_scenario_description.get_count = Mock(return_value=1)
        ls = LastScenarios(items, last_scenario_description, user)
        new_scenario = "callcenter_scenario"
        ls.add(new_scenario, None)
        self.assertSequenceEqual(["callcenter_scenario"], ls.raw)
        self.assertSequenceEqual({"callcenter_scenario": {"remove_time": 2506421370}}, self.forms_dict)
    def test_clear_all(self):
        items = ["pay_phone_scenario"]
        forms = MagicMock(name="context_form_mock")
        user = PicklableMock()
        user.forms = forms

        pay_phone_scenario = PicklableMock()
        pay_phone_scenario.keep_forms_alive = False
        user.descriptions = {"scenarios": {"pay_phone_scenario": pay_phone_scenario}}

        last_scenario_description = PicklableMock()
        last_scenario_description.check = Mock(return_value=True)
        last_scenario_description.get_count = Mock(return_value=2)
        ls = LastScenarios(items, last_scenario_description, user)
        new_scenario = "callcenter_scenario"
        ls.add(new_scenario, None)
        ls.clear_all()
        self.assertSequenceEqual([], ls.raw)
    def test_add_3(self):
        items = ["pay_phone_scenario"]
        forms = MagicMock(name="context_form_mock")
        user = PicklableMock()
        user.forms = forms

        pay_phone_scenario = PicklableMock()
        pay_phone_scenario.keep_forms_alive = True
        user.descriptions = {"scenarios": ScenarioDescription({"pay_phone_scenario": pay_phone_scenario})}
        last_scenario_description = PicklableMock()
        last_scenario_description.check = Mock(return_value=True)
        last_scenario_description.get_count = Mock(return_value=1)
        ls = LastScenarios(items, last_scenario_description, user)
        new_scenario = "callcenter_scenario"
        ls.add(new_scenario, None)
        correct_result = {'pay_phone_scenario': {'fields': {'amount': {'value': 100.0}, 'approve': {'available': True,
                                                                                                    'value': True}},
                          'remove_time': 1506418333}, 'callcenter_scenario': {'remove_time': 2506421370}}
        self.assertSequenceEqual(["callcenter_scenario"], ls.raw)
        self.assertSequenceEqual(correct_result, self.forms_dict)
    def test_add_2(self):
        items = ["pay_phone_scenario"]
        forms = MagicMock(name="context_form_mock")
        user = PicklableMock()
        user.forms = forms

        pay_phone_scenario = PicklableMock()
        pay_phone_scenario.keep_forms_alive = False
        user.descriptions = {"scenarios": {"pay_phone_scenario": pay_phone_scenario}}
        last_scenario_description = PicklableMock()
        last_scenario_description.get_count = Mock(return_value=2)
        ls = LastScenarios(items, last_scenario_description, user)
        new_scenario = "callcenter_scenario"
        ls.add(new_scenario, None)
        self.assertSequenceEqual(["pay_phone_scenario", "callcenter_scenario"], ls.raw)
        self.assertSequenceEqual({"pay_phone_scenario":
                                      {"fields": {"amount": {"value": 100.0},
                                                  "approve": {"available": True, "value": True}},
                                       "remove_time": 1506418333},
                                  "callcenter_scenario": {"remove_time": 2506421370}}, self.forms_dict)
    def test_1(self):
        """
        Тест проверяет сценарий из одного узла. Предполагается идеальный случай, когда одно поле
        и мы смогли его заполнить.
        Тест очень сложен с точки зрения инициализации моков. Но это лучше чем усложнять в целом процесс тестирования,
        используя полноценные сущности.
        """

        registered_factories[Action] = action_factory
        actions["test"] = MockAction
        actions["external"] = 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
            }
        }

        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 = []

        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)
        internal_form.fields = PicklableMagicMock()
        internal_form.fields.values.items = PicklableMock(
            return_value={"age": 61})
        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.assertIsNone(current_node_mock.current_node)
        context_forms.new.assert_called_once_with(form_type)
    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")