mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
import re
|
|
from uuid import uuid4
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from galaxy.schema.schema import (
|
|
DatasetStateField,
|
|
TAG_ITEM_PATTERN,
|
|
)
|
|
from galaxy.schema.tasks import (
|
|
GenerateInvocationDownload,
|
|
RequestUser,
|
|
)
|
|
|
|
TEST_GALAXY_URL = "http://usegalaxy.org"
|
|
TEST_USER_ID = 1
|
|
TEST_INVOCATION_ID = 5
|
|
|
|
|
|
def test_task_schema():
|
|
user = RequestUser(user_id=TEST_USER_ID)
|
|
download = GenerateInvocationDownload(
|
|
invocation_id=TEST_INVOCATION_ID,
|
|
short_term_storage_request_id=str(uuid4()),
|
|
galaxy_url=TEST_GALAXY_URL,
|
|
user=user,
|
|
)
|
|
rehydrated_download = GenerateInvocationDownload(**download.model_dump())
|
|
assert rehydrated_download.invocation_id == TEST_INVOCATION_ID
|
|
assert rehydrated_download.user.user_id == TEST_USER_ID
|
|
assert rehydrated_download.galaxy_url == TEST_GALAXY_URL
|
|
|
|
|
|
class StateModel(BaseModel):
|
|
state: DatasetStateField
|
|
|
|
|
|
def test_dataset_state_coercion():
|
|
assert StateModel(state="ok").state == "ok"
|
|
assert StateModel(state="deleted").state == "discarded"
|
|
|
|
|
|
class TestTagPattern:
|
|
|
|
def test_valid(self):
|
|
tag_strings = [
|
|
"a",
|
|
"aa",
|
|
"aa.aa",
|
|
"aa.aa.aa",
|
|
"~!@#$%^&*()_+`-=[]{};'\",./<>?",
|
|
"a.b:c",
|
|
"a.b:c.d:e.f",
|
|
"a.b:c.d:e..f",
|
|
"a.b:c.d:e.f:g",
|
|
"a.b:c.d:e.f::g",
|
|
"a.b:c.d:e.f::g:h",
|
|
"a::a", # leading colon for tag value
|
|
"a:.a", # leading period for tag value
|
|
"a:a:", # trailing colon OK for tag value
|
|
"a:a.", # trailing period OK for tag value
|
|
]
|
|
for t in tag_strings:
|
|
assert re.match(TAG_ITEM_PATTERN, t)
|
|
|
|
def test_invalid(self):
|
|
tag_strings = [
|
|
" a", # leading space for tag name
|
|
":a", # leading colon for tag name
|
|
".a", # leading period for tag name
|
|
"a ", # trailing space for tag name
|
|
"a a", # space inside tag name
|
|
"a: a", # leading space for tag value
|
|
"a:a a", # space inside tag value
|
|
"a:", # trailing colon for tag name
|
|
"a.", # trailing period for tag name
|
|
"a:b ", # trailing space for tag value
|
|
]
|
|
for t in tag_strings:
|
|
assert not re.match(TAG_ITEM_PATTERN, t)
|