Пример #1
0
 def setUp(self):
     self.rule_model = mock.Mock()
     self.trigger_model = mock.Mock()
     self.manipulation = BaseDynamicManipulation(self.rule_model, self.trigger_model)
Пример #2
0
class BaseDynamicManipulationTests(unittest.TestCase):

    def setUp(self):
        self.rule_model = mock.Mock()
        self.trigger_model = mock.Mock()
        self.manipulation = BaseDynamicManipulation(self.rule_model, self.trigger_model)

    @mock.patch.object(BaseDynamicManipulation, 'do_manipulations', mock.Mock())
    @mock.patch.object(BaseDynamicManipulation, 'clear_existing')
    def test_run_calls_clear_existing(self, clear_existing):
        self.manipulation.run()
        clear_existing.assert_called_once_with()

    @mock.patch.object(BaseDynamicManipulation, 'clear_existing', mock.Mock())
    @mock.patch.object(BaseDynamicManipulation, 'do_manipulations')
    def test_run_calls_do_manipulations(self, do_manipulations):
        args = ["arg"]
        kwargs = {'kwarg': 'something'}

        self.manipulation.run(*args, **kwargs)
        do_manipulations.assert_called_once_with(*args, **kwargs)

    @mock.patch('dynamic_manipulation.models.ManipulationLog.objects.get_by_rule')
    def test_clear_existing_gets_manipulation_logs_by_rule_model(self, get_by_rule):
        get_by_rule.return_value = mock.MagicMock()

        self.manipulation.clear_existing()
        get_by_rule.assert_called_once_with(self.rule_model, self.trigger_model)

    @mock.patch.object(BaseDynamicManipulation, 'clear_side_effect_model')
    @mock.patch('dynamic_manipulation.models.ManipulationLog.objects.get_by_rule')
    def test_clear_existing_calls_clear_side_effect_for_each_log(self, get_by_rule, clear_side_effect):
        log_one = mock.Mock(spec_set=models.ManipulationLog())
        log_one.side_effect_uri = ""
        log_two = mock.Mock(spec_set=models.ManipulationLog())
        log_two.side_effect_uri = ""
        logs = mock.MagicMock()
        logs.__iter__.return_value = iter([log_one, log_two])

        get_by_rule.return_value = logs

        self.manipulation.clear_existing()
        self.assertEqual([
            ((log_one.side_effect_model,), {}),
            ((log_two.side_effect_model,), {}),
        ], clear_side_effect.call_args_list)

    @mock.patch.object(BaseDynamicManipulation, 'clear_side_effect_uri')
    @mock.patch('dynamic_manipulation.models.ManipulationLog.objects.get_by_rule')
    def test_clear_existing_calls_clear_side_effect_uri_when_side_effect_uri_and_no_model(self, get_by_rule, clear_side_effect):
        log_one = models.ManipulationLog(side_effect_uri='one')
        log_two = models.ManipulationLog(side_effect_uri='two')
        logs = mock.MagicMock()
        logs.__iter__.return_value = iter([log_one, log_two])

        get_by_rule.return_value = logs

        self.manipulation.clear_existing()
        self.assertEqual([
            ((log_one.side_effect_uri,), {}),
            ((log_two.side_effect_uri,), {}),
        ], clear_side_effect.call_args_list)

    @mock.patch.object(BaseDynamicManipulation, 'clear_side_effect_model')
    @mock.patch.object(BaseDynamicManipulation, 'clear_side_effect_uri')
    @mock.patch('dynamic_manipulation.models.ManipulationLog.objects.get_by_rule')
    def test_clear_existing_calls_clear_side_effect_uri_and_model_when_both_exist(self, get_by_rule, clear_uri, clear_model):
        log_one = models.ManipulationLog(side_effect_uri='one')
        log_two = mock.Mock(spec_set=models.ManipulationLog())
        log_two.side_effect_uri = ""
        logs = mock.MagicMock()
        logs.__iter__.return_value = iter([log_one, log_two])

        get_by_rule.return_value = logs

        self.manipulation.clear_existing()
        self.assertEqual([
            ((log_one.side_effect_uri,), {}),
        ], clear_uri.call_args_list)
        self.assertEqual([
            ((log_two.side_effect_model,), {}),
        ], clear_model.call_args_list)

    def test_clear_side_effect_model_calls_delete_on_model(self):
        model = mock.Mock()
        self.manipulation.clear_side_effect_model(model)
        model.delete.assert_called_once_with()

    def test_clear_side_effect_model_returns_none_when_model_is_none(self):
        self.assertEqual(None, self.manipulation.clear_side_effect_model(None))

    @mock.patch.object(models.ManipulationLog.objects, 'create')
    def test_log_manipulation_logs_manipulation_with_rule_trigger_model_and_side_effect_model(self, create_log):
        side_effect_model = mock.Mock()

        self.manipulation.log_manipulation(side_effect_model)
        create_log.assert_called_once_with(
            rule=self.rule_model,
            trigger_model=self.trigger_model,
            side_effect_model=side_effect_model,)

    @mock.patch.object(models.ManipulationLog.objects, 'create')
    def test_log_manipulation_logs_manipulation_with_rule_trigger_model_and_side_effect_uri(self, create_log):
        self.manipulation.log_manipulation(side_effect_uri="asdf")
        create_log.assert_called_once_with(
            rule=self.rule_model,
            trigger_model=self.trigger_model,
            side_effect_uri="asdf",)

    def test_clear_side_effect_uri_raises_not_implemented(self):
        with self.assertRaises(NotImplementedError):
            self.manipulation.clear_side_effect_uri("x")