Files
galaxy/test/unit/data/test_mutable_json_column.py
T
Nicola Soranzo c35d8f2a06 Replace `unittest.TestCase` with pytest-based partial re-implementation
Also:
- Rename `FooBarTestCase` test classes as `TestFooBar`. These were collected
  by pytest only because they were `unittest.TestCase` derived, but normally
  pytest collects only test classes whose name starts with `Test`, see
  https://docs.pytest.org/en/7.1.x/reference/reference.html#confval-python_classes
2022-09-27 03:34:58 +01:00

73 lines
2.8 KiB
Python

import copy
from galaxy import model
from .test_galaxy_mapping import BaseModelTestCase
class TestMutableColumn(BaseModelTestCase):
def persist_and_reload(self, item):
item_id = item.id
self.model.session.flush()
self.model.session.expunge_all()
return self.model.session.query(model.DynamicTool).get(item_id)
def test_metadata_mutable_column(self):
w = model.DynamicTool()
self.model.session.add(w)
self.model.session.flush()
w.value = {"x": "z"}
persisted = self.persist_and_reload(w)
assert persisted.value == {"x": "z"}
persisted.value["x"] = "1"
persisted = self.persist_and_reload(persisted)
assert persisted.value["x"] == "1"
# test string
persisted.value = "abcdefg"
persisted = self.persist_and_reload(persisted)
assert persisted.value == "abcdefg"
# test int
persisted.value = 1
persisted = self.persist_and_reload(persisted)
assert persisted.value == 1
# test float
persisted.value = 1.1
persisted = self.persist_and_reload(persisted)
assert persisted.value == 1.1
# test bool
persisted.value = True
persisted = self.persist_and_reload(persisted)
assert persisted.value is True
# Test nested dict/list
persisted.value = {"list": [[1, 2, 3]]}
persisted = self.persist_and_reload(persisted)
assert persisted.value == {"list": [[1, 2, 3]]}
copy.deepcopy(persisted.value)
assert persisted.value.pop("list") == [[1, 2, 3]]
persisted = self.persist_and_reload(persisted)
assert persisted.value == {}
persisted.value.update({"x": "z"})
persisted = self.persist_and_reload(persisted)
assert persisted.value == {"x": "z"}
del persisted.value["x"]
persisted = self.persist_and_reload(persisted)
assert persisted.value == {}
persisted.value = {"x": {"y": "z"}}
persisted = self.persist_and_reload(persisted)
assert persisted.value == {"x": {"y": "z"}}
# These tests are failing ... at least since 20.09,
# but nested mutable change tracking might have
# never worked
# persisted.value['x']['y'] = 'x'
# persisted = self.persist_and_reload(persisted)
# assert persisted.value == {'x': {'y': 'x'}}
# persisted.value[0].append(2)
# persisted = self.persist_and_reload(persisted)
# assert persisted.value[0] == [1, 2]
# persisted.value[0].extend([3, 4])
# persisted = self.persist_and_reload(persisted)
# assert persisted.value[0] == [1, 2, 3, 4]
# persisted.value[0].remove(4)
# persisted = self.persist_and_reload(persisted)
# assert persisted.value[0] == [1, 2, 3]