def test_runner_should_shuffle_scenarios_in_a_rule_if_shuffle_scenarios_flag_set( hook_registry, default_config, mocker): """ The Runner should shuffle the Scenarios within a Rule before running them if the shuffle Scenarios flag is set """ # given default_config.shuffle_scenarios = True runner = Runner(default_config, None, hook_registry) runner.run_scenario = mocker.MagicMock() rule_mock = mocker.MagicMock(name="Rule") scenario = mocker.MagicMock(name="Scenario") rule_mock.scenarios = [scenario] mocker.patch("random.sample") # when runner.run_rule(rule_mock) # then import random random.sample.assert_called_once_with(rule_mock.scenarios, len(rule_mock.scenarios))
def test_runner_should_call_hooks_when_running_a_rule(hook_registry, default_config, mocker): """The Runner should call the ``each_rule`` hooks when running a Rule""" # given runner = Runner(default_config, None, hook_registry) rule_mock = mocker.MagicMock(name="Rule") # when runner.run_rule(rule_mock) # then hook_registry.call.assert_has_calls([ call("each_rule", "before", False, rule_mock), call("each_rule", "after", False, rule_mock), ])
def test_runner_should_run_scenario_loop_and_outline_as_scenario_container( scenario_container_type, hook_registry, default_config, mocker): """The Runner should run a ScenarioLoop and ScenarioOutline as a Scenario Container""" # given runner = Runner(default_config, None, hook_registry) runner.run_scenario_container = mocker.MagicMock() rule_mock = mocker.MagicMock(name="Rule") scenario = mocker.MagicMock(name=scenario_container_type.__name__, spec=scenario_container_type) rule_mock.scenarios = [scenario] # when runner.run_rule(rule_mock) # then runner.run_scenario_container.assert_has_calls([call(scenario)])
def test_runner_should_iterate_all_scenarios_when_running_a_rule( hook_registry, default_config, mocker): """The Runner should iterate all Scenarios when running a Rule""" # given runner = Runner(default_config, None, hook_registry) runner.run_scenario = mocker.MagicMock() rule_mock = mocker.MagicMock(name="Rule") first_scenario = mocker.MagicMock(name="First Scenario") second_scenario = mocker.MagicMock(name="Second Scenario") rule_mock.scenarios = [first_scenario, second_scenario] # when runner.run_rule(rule_mock) # then runner.run_scenario.assert_has_calls( [call(first_scenario), call(second_scenario)])
def test_runner_should_only_run_scenario_which_need_to_be_run( hook_registry, default_config, mocker): """The Runner should only run Scenarios which need to be run""" # given runner = Runner(default_config, None, hook_registry) runner.run_scenario = mocker.MagicMock() rule_mock = mocker.MagicMock(name="Rule") first_scenario = mocker.MagicMock(name="First Scenario") first_scenario.has_to_run.return_value = True second_scenario = mocker.MagicMock(name="Second Scenario") second_scenario.has_to_run.return_value = False third_scenario = mocker.MagicMock(name="Third Scenario") third_scenario.has_to_run.return_value = True rule_mock.scenarios = [first_scenario, second_scenario, third_scenario] # when runner.run_rule(rule_mock) # then runner.run_scenario.assert_has_calls( [call(first_scenario), call(third_scenario)])
def test_runner_should_exit_for_failed_scenario_if_early_exit_flag_is_set( hook_registry, default_config, mocker): """The Runner should exit for a failed Scenario if the early exit flag is set""" # given default_config.early_exit = True runner = Runner(default_config, None, hook_registry) runner.run_scenario = mocker.MagicMock() runner.run_scenario.side_effect = [ State.PASSED, State.FAILED, State.PASSED ] rule_mock = mocker.MagicMock(name="Rule") first_scenario = mocker.MagicMock(name="First Scenario") second_scenario = mocker.MagicMock(name="Second Scenario") third_scenario = mocker.MagicMock(name="Third Scenario") rule_mock.scenarios = [first_scenario, second_scenario, third_scenario] # when runner.run_rule(rule_mock) # then runner.run_scenario.assert_has_calls( [call(first_scenario), call(second_scenario)])
def test_runner_should_run_each_rule_in_a_feature(hook_registry, default_config, mocker): """The Runner should run each Rule from a Feature""" # given runner = Runner(default_config, None, hook_registry) feature_mock = mocker.MagicMock(name="Feature") first_rule = mocker.MagicMock(name="First Rule") second_rule = mocker.MagicMock(name="Second Rule") feature_mock.rules = [first_rule, second_rule] runner.run_rule = mocker.MagicMock() # when runner.run_feature(feature_mock) # then runner.run_rule.assert_has_calls([call(first_rule), call(second_rule)])
def test_runner_should_exit_for_failed_rule_if_early_exit_flag_is_set( hook_registry, default_config, mocker): """The Runner should exit for a failed Rule if the early exit flag is set""" # given default_config.early_exit = True runner = Runner(default_config, None, hook_registry) runner.run_rule = mocker.MagicMock() runner.run_rule.side_effect = [State.PASSED, State.FAILED, State.PASSED] feature_mock = mocker.MagicMock(name="Feature") first_rule = mocker.MagicMock(name="First Rule") second_rule = mocker.MagicMock(name="Second Rule") third_rule = mocker.MagicMock(name="Third Rule") feature_mock.rules = [first_rule, second_rule, third_rule] # when runner.run_feature(feature_mock) # then runner.run_rule.assert_has_calls([call(first_rule), call(second_rule)])
def test_runner_should_only_run_rule_which_need_to_be_run( hook_registry, default_config, mocker): """The Runner should run only the Rules which need to be run""" # given runner = Runner(default_config, None, hook_registry) runner.run_rule = mocker.MagicMock() feature_mock = mocker.MagicMock(name="Feature") first_rule = mocker.MagicMock(name="First Rule") first_rule.has_to_run.return_value = True second_rule = mocker.MagicMock(name="Second Rule") second_rule.has_to_run.return_value = False third_rule = mocker.MagicMock(name="Third Rule") third_rule.has_to_run.return_value = True feature_mock.rules = [first_rule, second_rule, third_rule] # when runner.run_feature(feature_mock) # then runner.run_rule.assert_has_calls([call(first_rule), call(third_rule)])