"""
Test lib/galaxy/visualization/plugins/registry.
"""
import os
from typing import (
cast,
TYPE_CHECKING,
)
from galaxy.app_unittest_utils import galaxy_mock
from galaxy.util import (
clean_multiline_string,
galaxy_directory,
)
from galaxy.visualization.plugins import plugin
from galaxy.visualization.plugins.registry import VisualizationsRegistry
from . import VisualizationsBase_TestCase
if TYPE_CHECKING:
from galaxy.structured_app import StructuredApp
glx_dir = galaxy_directory()
vis_reg_path = "config/plugins/visualizations"
config1 = """\
Welcome to the Minimal JS-Based Example Plugin.
HistoryDatasetAssociation
tabular.Tabular
dataset_id
dataset_id
setting_input
setting help
setting_type
track_input
track help
track_type
export_a
export_b
export_c
"""
class TestVisualizationsRegistry(VisualizationsBase_TestCase):
def test_plugin_load_from_repo(self):
"""should attempt load if criteria met"""
mock_app = cast("StructuredApp", galaxy_mock.MockApp(root=glx_dir))
plugin_mgr = VisualizationsRegistry(mock_app, directories_setting=vis_reg_path)
expected_plugins_path = os.path.join(glx_dir, vis_reg_path)
assert expected_plugins_path in plugin_mgr.directories
example = plugin_mgr.plugins["example"]
assert example.name == "example"
assert example.path == os.path.join(expected_plugins_path, "example")
def test_plugin_load(self):
""""""
mock_app_dir = galaxy_mock.MockDir(
{
"plugins": {
"vis1": {
"static": {"vis1.xml": config1},
"templates": {},
},
"vis2": {"static": {"vis2.xml": config1}},
"not_a_vis1": {
"static": {"vis1.xml": "blerbler"},
},
# empty
"not_a_vis2": {},
"not_a_vis3": "blerbler",
# bad config
"not_a_vis4": {"static": {"not_a_vis4.xml": "blerbler"}},
"not_a_vis5": {
# no config
"static": {},
"templates": {},
},
}
}
)
mock_app = cast("StructuredApp", galaxy_mock.MockApp(root=mock_app_dir.root_path))
plugin_mgr = VisualizationsRegistry(mock_app, directories_setting="plugins")
expected_plugins_path = os.path.join(mock_app_dir.root_path, "plugins")
expected_plugin_names = ["vis1", "vis2"]
assert expected_plugins_path in plugin_mgr.directories
assert sorted(plugin_mgr.plugins.keys()) == expected_plugin_names
vis1 = plugin_mgr.plugins["vis1"]
assert vis1.name == "vis1"
assert vis1.path == os.path.join(expected_plugins_path, "vis1")
vis1_as_dict = vis1.to_dict()
assert vis1_as_dict["specs"]
specs = vis1_as_dict["specs"]
assert "exports" in specs
exports = specs["exports"]
assert len(exports) == 3
assert "export_a" in exports
assert "export_b" in exports
assert "export_c" in exports
vis2 = plugin_mgr.plugins["vis2"]
assert vis2.name == "vis2"
assert vis2.path == os.path.join(expected_plugins_path, "vis2")
mock_app_dir.remove()
def test_script_entry(self):
""""""
script_entry_config = clean_multiline_string("""\
HistoryDatasetAssociation
""")
mock_app_dir = galaxy_mock.MockDir(
{
"plugins": {
"jstest": {"static": {"jstest.xml": script_entry_config}},
}
}
)
mock_app = cast("StructuredApp", galaxy_mock.MockApp(root=mock_app_dir.root_path))
plugin_mgr = VisualizationsRegistry(mock_app, directories_setting="plugins")
script_entry = plugin_mgr.plugins["jstest"]
assert isinstance(script_entry, plugin.VisualizationPlugin)
assert script_entry.name == "jstest"
response = script_entry.to_dict()
entry_point_attr = response["entry_point"]["attr"]
assert entry_point_attr["container"] == "mycontainer"
assert entry_point_attr["src"] == "mysrc"
assert entry_point_attr["css"] == "mycss"
mock_app_dir.remove()