mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
120 lines
3.7 KiB
Python
120 lines
3.7 KiB
Python
"""
|
|
"""
|
|
|
|
import json
|
|
from typing import cast
|
|
|
|
import sqlalchemy
|
|
|
|
from galaxy.app_unittest_utils import galaxy_mock
|
|
from galaxy.managers.users import UserManager
|
|
from galaxy.util.unittest import TestCase
|
|
from galaxy.work.context import SessionRequestContext
|
|
|
|
# =============================================================================
|
|
admin_email = "admin@admin.admin"
|
|
admin_users = admin_email
|
|
default_password = "123456"
|
|
|
|
|
|
# =============================================================================
|
|
class BaseTestCase(TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
print("\n", "-" * 20, "begin class", cls)
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
print("\n", "-" * 20, "end class", cls)
|
|
|
|
def setUp(self):
|
|
self.log("." * 20, "begin test", self)
|
|
self.set_up_mocks()
|
|
self.set_up_managers()
|
|
self.set_up_trans()
|
|
|
|
def set_up_mocks(self):
|
|
admin_users_list = [u for u in admin_users.split(",") if u]
|
|
self.mock_trans = galaxy_mock.MockTrans(admin_users=admin_users, admin_users_list=admin_users_list)
|
|
self.trans = cast(SessionRequestContext, self.mock_trans)
|
|
self.app = self.trans.app
|
|
|
|
def init_user_in_database(self):
|
|
self.mock_trans.init_user_in_database()
|
|
|
|
def set_up_managers(self):
|
|
self.user_manager = self.app[UserManager]
|
|
|
|
def set_up_trans(self):
|
|
self.admin_user = self.user_manager.create(email=admin_email, username="admin", password=default_password)
|
|
self.trans.set_user(self.admin_user)
|
|
self.trans.set_history(None)
|
|
|
|
def tearDown(self):
|
|
self.log("." * 20, "end test", self, "\n")
|
|
|
|
def log(self, *args, **kwargs):
|
|
print(*args, **kwargs)
|
|
|
|
# ---- additional test types
|
|
TYPES_NEEDING_NO_SERIALIZERS = (str, bool, type(None), int, float)
|
|
|
|
def assertKeys(self, obj, key_list):
|
|
assert sorted(obj.keys()) == sorted(key_list)
|
|
|
|
def assertHasKeys(self, obj, key_list):
|
|
for key in key_list:
|
|
assert key in obj
|
|
|
|
def assertNullableBasestring(self, item):
|
|
assert isinstance(item, (str, type(None)))
|
|
# TODO: len mod 8 and hex re
|
|
|
|
def assertEncodedId(self, item):
|
|
assert isinstance(item, str)
|
|
# TODO: len mod 8 and hex re
|
|
|
|
def assertNullableEncodedId(self, item):
|
|
if item is not None:
|
|
self.assertEncodedId(item)
|
|
|
|
def assertDate(self, item):
|
|
assert isinstance(item, str)
|
|
# TODO: no great way to parse this fully (w/o python-dateutil)
|
|
# TODO: re?
|
|
|
|
def assertUUID(self, item):
|
|
assert isinstance(item, str)
|
|
# TODO: re for d4d76d69-80d4-4ed7-80c7-211ebcc1a358
|
|
|
|
def assertORMFilter(self, item):
|
|
assert isinstance(
|
|
item.filter, (sqlalchemy.sql.elements.BinaryExpression, sqlalchemy.sql.elements.BooleanClauseList)
|
|
), "Not an orm filter"
|
|
|
|
def assertORMFunctionFilter(self, item):
|
|
assert item.filter_type == "orm_function"
|
|
assert callable(item.filter)
|
|
|
|
def assertFnFilter(self, item):
|
|
assert item.filter and callable(item.filter), "Not a fn filter"
|
|
|
|
def assertIsJsonifyable(self, item):
|
|
# TODO: use galaxy's override
|
|
assert isinstance(json.dumps(item), str)
|
|
|
|
|
|
class CreatesCollectionsMixin:
|
|
trans: SessionRequestContext
|
|
|
|
def build_element_identifiers(self, elements):
|
|
identifier_list = []
|
|
for element in elements:
|
|
src = "hda"
|
|
# if isinstance( element, model.DatasetCollection ):
|
|
# src = 'collection'#?
|
|
# elif isinstance( element, model.LibraryDatasetDatasetAssociation ):
|
|
# src = 'ldda'#?
|
|
identifier_list.append(dict(src=src, name=element.name, id=element.id))
|
|
return identifier_list
|