Files
galaxy/test/unit/data/model/migrations/conftest.py
T
2022-04-20 16:23:05 -04:00

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