예제 #1
0
    def test_module_error_raises(self, load_module):
        workflow = Workflow.create_and_init()
        wf_module = workflow.tabs.first().wf_modules.create(
            order=0, module_id_name="yay", params={})
        ModuleVersion.create_or_replace_from_spec(
            {
                "id_name": "yay",
                "name": "Yay",
                "category": "Clean",
                "parameters": [{
                    "id_name": "foo",
                    "type": "string"
                }],
            },
            source_version_hash="abc123",
        )

        load_module.return_value.migrate_params.side_effect = ModuleError
        with self.assertRaises(ModuleError):
            get_migrated_params(wf_module)

        # Assert we wrote nothing to cache
        self.assertIsNone(wf_module.cached_migrated_params)
        self.assertIsNone(wf_module.cached_migrated_params_module_version)
        wf_module.refresh_from_db()
        self.assertIsNone(wf_module.cached_migrated_params)
        self.assertIsNone(wf_module.cached_migrated_params_module_version)
예제 #2
0
    def test_internal_wrong_cache_version_calls_migrate_params(
            self, load_module):
        workflow = Workflow.create_and_init()
        wf_module = workflow.tabs.first().wf_modules.create(
            order=0,
            module_id_name="yay",
            params={"foo": "bar"},
            cached_migrated_params={"foo": "bar"},
            cached_migrated_params_module_version="v2",
        )
        ModuleVersion.create_or_replace_from_spec(
            {
                "id_name": "yay",
                "name": "Yay",
                "category": "Clean",
                "parameters_version": 3,
                "parameters": [{
                    "id_name": "foo",
                    "type": "string"
                }],
            },
            source_version_hash="internal",  # magic string
        )

        load_module.return_value.migrate_params.return_value = {"foo": "baz"}
        self.assertEqual(get_migrated_params(wf_module), {"foo": "baz"})
        load_module.assert_called()

        # and assert we've cached things
        self.assertEqual(wf_module.cached_migrated_params, {"foo": "baz"})
        self.assertEqual(wf_module.cached_migrated_params_module_version, "v3")
        wf_module.refresh_from_db()
        self.assertEqual(wf_module.cached_migrated_params, {"foo": "baz"})
        self.assertEqual(wf_module.cached_migrated_params_module_version, "v3")
예제 #3
0
    def test_internal_module_get_cached(self, load_module):
        workflow = Workflow.create_and_init()
        wf_module = workflow.tabs.first().wf_modules.create(
            order=0,
            module_id_name="yay",
            params={},
            cached_migrated_params={"foo": "bar"},
            cached_migrated_params_module_version="v2",
        )
        ModuleVersion.create_or_replace_from_spec(
            {
                "id_name": "yay",
                "name": "Yay",
                "category": "Clean",
                "parameters_version": 2,
                "parameters": [{
                    "id_name": "foo",
                    "type": "string"
                }],
            },
            source_version_hash="internal",
        )

        self.assertEqual(get_migrated_params(wf_module), {"foo": "bar"})
        load_module.assert_not_called()
예제 #4
0
    def test_no_validate_after_migrate_params(self, load_module):
        workflow = Workflow.create_and_init()
        wf_module = workflow.tabs.first().wf_modules.create(
            order=0, module_id_name="yay", params={})
        ModuleVersion.create_or_replace_from_spec(
            {
                "id_name": "yay",
                "name": "Yay",
                "category": "Clean",
                "parameters": [{
                    "id_name": "foo",
                    "type": "string"
                }],
            },
            source_version_hash="abc123",
        )

        # We don't validate, because renderer/fetcher/frontend all do different
        # things when params are invalid.
        load_module.return_value.migrate_params.return_value = {"x": []}
        self.assertEqual(get_migrated_params(wf_module), {"x": []})
예제 #5
0
    def test_deleted_wf_module_race(self, load_module):
        workflow = Workflow.create_and_init()
        wf_module = workflow.tabs.first().wf_modules.create(
            order=0, module_id_name="yay", params={})
        ModuleVersion.create_or_replace_from_spec(
            {
                "id_name": "yay",
                "name": "Yay",
                "category": "Clean",
                "parameters": [{
                    "id_name": "foo",
                    "type": "string"
                }],
            },
            source_version_hash="abc123",
        )

        load_module.return_value.migrate_params.return_value = {"foo": "bar"}
        self.assertEqual(get_migrated_params(wf_module), {"foo": "bar"})
        self.assertEqual(wf_module.cached_migrated_params, {"foo": "bar"})
        self.assertEqual(wf_module.cached_migrated_params_module_version,
                         "abc123")
예제 #6
0
    def test_deleted_module_version(self):
        workflow = Workflow.create_and_init()
        wf_module = workflow.tabs.first().wf_modules.create(
            order=0,
            module_id_name="yay",
            params={"foo": "bar"},
            cached_migrated_params={"foo": "bar"},
            cached_migrated_params_module_version="abc123",
        )

        # We don't validate, because renderer/fetcher/frontend all do different
        # things when params are invalid.
        self.assertEqual(get_migrated_params(wf_module), {})

        # Assert we did not modify the cache
        self.assertEqual(wf_module.cached_migrated_params, {"foo": "bar"})
        self.assertEqual(wf_module.cached_migrated_params_module_version,
                         "abc123")
        wf_module.refresh_from_db()
        self.assertEqual(wf_module.cached_migrated_params, {"foo": "bar"})
        self.assertEqual(wf_module.cached_migrated_params_module_version,
                         "abc123")