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