Files
galaxy/test/unit/tools/test_data_parameters.py
T
John Chilton 740c4c9344 ToolBuildOptimize - do not fetch hidden datasets for inclusion.
Only fetch visible datasets into big, cached list of history datasets under consideration. Hidden datasets don't seem to be used by the fetcher or initial value stuff so it seems fine to exclude them. The advantage should be clear for histories with a large number of datasets hidden below a signficantly smaller number collections.
2018-04-27 10:16:21 -04:00

212 lines
8.3 KiB
Python

from galaxy import model
from .test_parameter_parsing import BaseParameterTestCase
from ..unittest_utils import galaxy_mock
class DataToolParameterTestCase(BaseParameterTestCase):
def test_to_python_none_values(self):
assert self.param.to_python(None, self.app) is None
assert self.param.to_python('None', self.app) is None
assert self.param.to_python('', self.app) is None
def test_to_python_hda(self):
hda = self._new_hda()
as_python = self.param.to_python(hda.id, self.app)
assert hda == as_python
def test_to_python_multi_hdas(self):
hda1 = self._new_hda()
hda2 = self._new_hda()
as_python = self.param.to_python("%s,%s" % (hda1.id, hda2.id), self.app)
assert as_python == [hda1, hda2]
def test_to_python_multi_none(self):
self.multiple = True
hda = self._new_hda()
# Selection is Optional. may be selected with other stuff,
# not sure the UI should really allow this but easy enough
# to just filter it out.
self.assertEquals([hda], self.param.to_python('%s,None' % hda.id, self.app))
def test_field_filter_on_types(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda2 = MockHistoryDatasetAssociation(name="hda2", id=2)
self.stub_active_datasets(hda1, hda2)
field = self._simple_field()
assert len(field['options']['hda']) == 2
assert field['options']['hda'][0]['name'] == "hda2"
assert field['options']['hda'][1]['name'] == "hda1"
hda2.extension = 'data'
field = self._simple_field()
assert len(field['options']['hda']) == 1, field
assert field['options']['hda'][0]['name'] == "hda1"
def test_field_display_hidden_hdas_only_if_selected(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda2 = MockHistoryDatasetAssociation(name="hda2", id=2)
hda1.visible = False
hda2.visible = False
self.stub_active_datasets(hda1, hda2)
field = self._simple_field(other_values={"data2" : hda2})
assert len(field['options']['hda']) == 1 # hda1 not an option, not visible or selected
assert field['options']['hda'][0]['name'] == "(hidden) hda2"
def test_field_display_deleted_hdas_only_if_selected(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda2 = MockHistoryDatasetAssociation(name="hda2", id=2)
hda1.visible = False
hda2.deleted = True
self.stub_active_datasets(hda1, hda2)
field = self._simple_field(other_values={"data2" : hda2})
assert len(field['options']['hda']) == 1 # hda1 not an option, not visible or selected
assert field['options']['hda'][0]['name'] == "(deleted) hda2"
def test_field_implicit_conversion_new(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda1.extension = 'data'
hda1.conversion_destination = ("tabular", None)
self.stub_active_datasets(hda1)
field = self._simple_field()
assert len(field['options']['hda']) == 1
assert field['options']['hda'][0]['name'] == "hda1 (as tabular)"
assert field['options']['hda'][0]['hid'] == 1
def test_field_implicit_conversion_existing(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda1.extension = 'data'
hda1.conversion_destination = ("tabular", MockHistoryDatasetAssociation(name="hda1converted", id=2))
self.stub_active_datasets(hda1)
field = self._simple_field()
assert len(field['options']['hda']) == 1
assert field['options']['hda'][0]['name'] == "hda1 (as tabular)"
# This is difference with previous test, value is existing
# hda id not new one.
assert field['options']['hda'][0]['hid'] == 2
def test_field_multiple(self):
self.multiple = True
field = self._simple_field()
assert field['multiple']
def test_field_empty_selection(self):
field = self._simple_field()
assert len(field['options']['hda']) == 0
assert len(field['options']['hdca']) == 0
def test_field_empty_selection_optional(self):
self.optional = True
field = self._simple_field()
assert field['optional']
def test_get_initial_value(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda2 = MockHistoryDatasetAssociation(name="hda2", id=2)
self.stub_active_datasets(hda1, hda2)
assert hda2 == self.param.get_initial_value(self.trans, {})
def test_get_initial_value_is_none_if_no_match(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda1.visible = False
hda2 = MockHistoryDatasetAssociation(name="hda2", id=2)
hda2.visible = False
self.stub_active_datasets(hda1, hda2)
assert self.param.get_initial_value(self.trans, {}) is None
def test_get_initial_none_when_optional(self):
self.optional = True
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda2 = MockHistoryDatasetAssociation(name="hda2", id=2)
self.stub_active_datasets(hda1, hda2)
assert self.param.get_initial_value(self.trans, {}) is None
def test_get_initial_with_previously_converted_data(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda1.extension = 'data'
converted = MockHistoryDatasetAssociation(name="hda1converted", id=2)
hda1.conversion_destination = ("tabular", converted)
self.stub_active_datasets(hda1)
assert converted == self.param.get_initial_value(self.trans, {})
def test_get_initial_with_to_be_converted_data(self):
hda1 = MockHistoryDatasetAssociation(name="hda1", id=1)
hda1.extension = 'data'
hda1.conversion_destination = ("tabular", None)
self.stub_active_datasets(hda1)
assert hda1 == self.param.get_initial_value(self.trans, {}), hda1
def _new_hda(self):
hda = model.HistoryDatasetAssociation()
hda.visible = True
hda.dataset = model.Dataset()
self.app.model.context.add(hda)
self.app.model.context.flush()
return hda
def setUp(self):
super(DataToolParameterTestCase, self).setUp()
self.test_history = model.History()
self.app.model.context.add(self.test_history)
self.app.model.context.flush()
self.trans = galaxy_mock.MockTrans(history=self.test_history)
self.multiple = False
self.optional = False
self._param = None
def stub_active_datasets(self, *hdas):
self.test_history._active_datasets_and_roles = [h for h in hdas if not h.deleted]
self.test_history._active_visible_datasets_and_roles = [h for h in hdas if not h.deleted and h.visible]
def _simple_field(self, **kwds):
return self.param.to_dict(trans=self.trans, **kwds)
@property
def param(self):
if not self._param:
multi_text = ""
if self.multiple:
multi_text = 'multiple="True"'
optional_text = ""
if self.optional:
optional_text = 'optional="True"'
template_xml = '''<param name="data2" type="data" format="txt" %s %s></param>'''
param_str = template_xml % (multi_text, optional_text)
self._param = self._parameter_for(tool=self.mock_tool, xml=param_str)
return self._param
class MockHistoryDatasetAssociation(object):
""" Fake HistoryDatasetAssociation stubbed out for testing matching and
stuff like that.
"""
def __init__(self, test_dataset=None, name="Test Dataset", id=1):
if not test_dataset:
test_dataset = model.Dataset()
test_dataset.state = model.Dataset.states.OK
self.states = model.HistoryDatasetAssociation.states
self.deleted = False
self.dataset = test_dataset
self.visible = True
self.conversion_destination = (None, None)
self.extension = "txt"
self.dbkey = "hg19"
self.implicitly_converted_parent_datasets = False
self.name = name
self.hid = id
self.id = id
self.children = []
self.tags = []
@property
def state(self):
return self.dataset.state
def get_dbkey(self):
return self.dbkey
def find_conversion_destination(self, formats):
return self.conversion_destination