mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-11-04 23:43:20 +08:00
322 lines
8.3 KiB
Python
322 lines
8.3 KiB
Python
import pytest
|
|
import sqlalchemy as sa
|
|
|
|
# Fixtures: metadata containing one or more tables and representing database state.
|
|
# Used to load a database with a given state.
|
|
# Each state has 3 versions, distinguished by suffix:
|
|
# - gxy (galaxy database that holds gxy* and migration version tables)
|
|
# - tsi (tool_shed_install database that holds tsi* and migration version tables)
|
|
# - combined (combined database that holds gxy*, tsi*, and migration version tables)
|
|
#
|
|
# The following states are represented:
|
|
#
|
|
# State 1: Non-empty database, no version table.
|
|
# (Most ancient state)
|
|
# State 2: SQLAlchemy Migrate version table added.
|
|
# (Oldest state versioned with SQLAlchemy Migrate)
|
|
# State 3: New table added.
|
|
# (Last (most recent) state versioned with SQLAlchemy Migrate)
|
|
# State 4: Alembic version table added.
|
|
# (Oldest state versioned with Alembic)
|
|
# State 5: SQLAlchemy Migrate version table removed.
|
|
# (Oldest state versioned with Alembic that does not include the SQLAchemy Migrate version table)
|
|
# State 6: New table added.
|
|
# (Most recent state versioned with Alembic. This is the current state)
|
|
#
|
|
# Additional edge case: gxy at state3, tsi has no SQLAlchemy Migrate table.
|
|
#
|
|
# (State 0 assumes an empty database, so it needs no state fixtures.)
|
|
|
|
|
|
# state 0-kombu
|
|
@pytest.fixture
|
|
def metadata_state0kombu(kombu_message_table, kombu_queue_table):
|
|
metadata = sa.MetaData()
|
|
kombu_message_table(metadata)
|
|
kombu_queue_table(metadata)
|
|
return metadata
|
|
|
|
|
|
# state 1
|
|
@pytest.fixture
|
|
def metadata_state1_gxy(gxy_table1):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state1_tsi(tsi_table1):
|
|
metadata = sa.MetaData()
|
|
tsi_table1(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state1_combined(gxy_table1, tsi_table1):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
tsi_table1(metadata)
|
|
return metadata
|
|
|
|
|
|
# state 2
|
|
@pytest.fixture
|
|
def metadata_state2_gxy(gxy_table1, sqlalchemymigrate_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state2_tsi(tsi_table1, sqlalchemymigrate_table):
|
|
metadata = sa.MetaData()
|
|
tsi_table1(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state2_combined(gxy_table1, tsi_table1, sqlalchemymigrate_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
tsi_table1(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
return metadata
|
|
|
|
|
|
# state 3
|
|
@pytest.fixture
|
|
def metadata_state3_gxy(gxy_table1, gxy_table2, sqlalchemymigrate_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state3_tsi(tsi_table1, tsi_table2, sqlalchemymigrate_table):
|
|
metadata = sa.MetaData()
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state3_combined(gxy_table1, gxy_table2, tsi_table1, tsi_table2, sqlalchemymigrate_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
return metadata
|
|
|
|
|
|
# state 4
|
|
@pytest.fixture
|
|
def metadata_state4_gxy(gxy_table1, gxy_table2, sqlalchemymigrate_table, alembic_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state4_tsi(tsi_table1, tsi_table2, sqlalchemymigrate_table, alembic_table):
|
|
metadata = sa.MetaData()
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state4_combined(gxy_table1, gxy_table2, tsi_table1, tsi_table2, sqlalchemymigrate_table, alembic_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
sqlalchemymigrate_table(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
# state 5
|
|
@pytest.fixture
|
|
def metadata_state5_gxy(gxy_table1, gxy_table2, alembic_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state5_tsi(tsi_table1, tsi_table2, alembic_table):
|
|
metadata = sa.MetaData()
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state5_combined(gxy_table1, gxy_table2, tsi_table1, tsi_table2, alembic_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
# state 6
|
|
@pytest.fixture
|
|
def metadata_state6_gxy(gxy_table1, gxy_table2, gxy_table3, alembic_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
gxy_table3(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state6_tsi(tsi_table1, tsi_table2, tsi_table3, alembic_table):
|
|
metadata = sa.MetaData()
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
tsi_table3(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state6_combined(gxy_table1, gxy_table2, gxy_table3, tsi_table1, tsi_table2, tsi_table3, alembic_table):
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
gxy_table3(metadata)
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
tsi_table3(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata_state6_gxy_state3_tsi_no_sam(
|
|
gxy_table1, gxy_table2, gxy_table3, tsi_table1, tsi_table2, tsi_table3, alembic_table
|
|
):
|
|
# This does NOT include sqlalchemymigrate_table (sam)
|
|
metadata = sa.MetaData()
|
|
gxy_table1(metadata)
|
|
gxy_table2(metadata)
|
|
gxy_table3(metadata)
|
|
tsi_table1(metadata)
|
|
tsi_table2(metadata)
|
|
alembic_table(metadata)
|
|
return metadata
|
|
|
|
|
|
# Fixture factories: metadata containing one table each.
|
|
# Used to compose metadata representing database state.
|
|
# (The `_factory` suffix is ommitted to keep the code less verbose)
|
|
|
|
|
|
@pytest.fixture
|
|
def gxy_table1():
|
|
def make_table(metadata):
|
|
return sa.Table("gxy_table1", metadata, sa.Column("id", sa.Integer, primary_key=True))
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def gxy_table2():
|
|
def make_table(metadata):
|
|
return sa.Table("gxy_table2", metadata, sa.Column("id", sa.Integer, primary_key=True))
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def gxy_table3():
|
|
def make_table(metadata):
|
|
return sa.Table("gxy_table3", metadata, sa.Column("id", sa.Integer, primary_key=True))
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def tsi_table1():
|
|
def make_table(metadata):
|
|
return sa.Table("tsi_table1", metadata, sa.Column("id", sa.Integer, primary_key=True))
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def tsi_table2():
|
|
def make_table(metadata):
|
|
return sa.Table("tsi_table2", metadata, sa.Column("id", sa.Integer, primary_key=True))
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def tsi_table3():
|
|
def make_table(metadata):
|
|
return sa.Table("tsi_table3", metadata, sa.Column("id", sa.Integer, primary_key=True))
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def alembic_table():
|
|
def make_table(metadata):
|
|
table = sa.Table("alembic_version", metadata, sa.Column("version_num", sa.String(250), primary_key=True))
|
|
return table
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def sqlalchemymigrate_table():
|
|
def make_table(metadata):
|
|
table = sa.Table(
|
|
"migrate_version",
|
|
metadata,
|
|
sa.Column("repository_id", sa.String(250), primary_key=True),
|
|
sa.Column("repository_path", sa.Text),
|
|
sa.Column("version", sa.Integer),
|
|
)
|
|
return table
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def kombu_message_table():
|
|
def make_table(metadata):
|
|
return sa.Table("kombu_message", metadata, sa.Column("id", sa.Integer, primary_key=True))
|
|
|
|
return make_table
|
|
|
|
|
|
@pytest.fixture
|
|
def kombu_queue_table():
|
|
def make_table(metadata):
|
|
return sa.Table("kombu_queue", metadata, sa.Column("id", sa.Integer, primary_key=True))
|
|
|
|
return make_table
|