From 5e988db6894920de94a8add9f6c6fd1ec388d20b Mon Sep 17 00:00:00 2001 From: Yarmoshch Date: Sat, 1 Nov 2025 15:38:33 +0300 Subject: [PATCH 1/3] downgrade migration fix and stairway test added --- .../versions/498e4ee72e00_add_session_id.py | 7 +++--- tests/migrations/test_stairway.py | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 tests/migrations/test_stairway.py diff --git a/migrations/versions/498e4ee72e00_add_session_id.py b/migrations/versions/498e4ee72e00_add_session_id.py index dcf991e..618a2d3 100644 --- a/migrations/versions/498e4ee72e00_add_session_id.py +++ b/migrations/versions/498e4ee72e00_add_session_id.py @@ -18,9 +18,8 @@ def upgrade(): op.add_column('strike', sa.Column('session_id', sa.Integer(), nullable=True)) - op.create_foreign_key(None, 'strike', 'rental_session', ['session_id'], ['id']) - + op.create_foreign_key('strike_session_id_fkey', 'strike', 'rental_session', ['session_id'], ['id']) def downgrade(): - op.drop_constraint(None, 'strike', type_='foreignkey') - op.drop_column('strike', 'session_id') + op.drop_constraint('strike_session_id_fkey', 'strike', type_='foreignkey') + op.drop_column('strike', 'session_id') \ No newline at end of file diff --git a/tests/migrations/test_stairway.py b/tests/migrations/test_stairway.py new file mode 100644 index 0000000..4d847a4 --- /dev/null +++ b/tests/migrations/test_stairway.py @@ -0,0 +1,22 @@ +import subprocess +import pytest + +def get_all_revisions(): + result = subprocess.run(["alembic", "history"], stdout=subprocess.PIPE, check=True) + lines = result.stdout.decode().splitlines() + revisions = [] + for line in lines: + if line and "->" in line: + rev = line.split("->")[0].strip() + # if rev != "": + # revisions.append(rev) + return list(reversed(revisions)) + +@pytest.mark.parametrize("rev", get_all_revisions()) +def test_stairway_upgrade_downgrade(rev): + # upgrade к ревизии + subprocess.check_call(["alembic", "upgrade", rev]) + # downgrade на шаг + subprocess.check_call(["alembic", "downgrade", "-1"]) + # upgrade обратно + subprocess.check_call(["alembic", "upgrade", rev]) From 4eba0161f23f6f4786e91c9cac5f0a9614e3066f Mon Sep 17 00:00:00 2001 From: Yarmoshch Date: Sat, 1 Nov 2025 15:41:25 +0300 Subject: [PATCH 2/3] lint --- migrations/versions/498e4ee72e00_add_session_id.py | 3 ++- tests/migrations/test_stairway.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/migrations/versions/498e4ee72e00_add_session_id.py b/migrations/versions/498e4ee72e00_add_session_id.py index 618a2d3..c41b2f1 100644 --- a/migrations/versions/498e4ee72e00_add_session_id.py +++ b/migrations/versions/498e4ee72e00_add_session_id.py @@ -20,6 +20,7 @@ def upgrade(): op.add_column('strike', sa.Column('session_id', sa.Integer(), nullable=True)) op.create_foreign_key('strike_session_id_fkey', 'strike', 'rental_session', ['session_id'], ['id']) + def downgrade(): op.drop_constraint('strike_session_id_fkey', 'strike', type_='foreignkey') - op.drop_column('strike', 'session_id') \ No newline at end of file + op.drop_column('strike', 'session_id') diff --git a/tests/migrations/test_stairway.py b/tests/migrations/test_stairway.py index 4d847a4..c120014 100644 --- a/tests/migrations/test_stairway.py +++ b/tests/migrations/test_stairway.py @@ -1,6 +1,8 @@ import subprocess + import pytest + def get_all_revisions(): result = subprocess.run(["alembic", "history"], stdout=subprocess.PIPE, check=True) lines = result.stdout.decode().splitlines() @@ -12,6 +14,7 @@ def get_all_revisions(): # revisions.append(rev) return list(reversed(revisions)) + @pytest.mark.parametrize("rev", get_all_revisions()) def test_stairway_upgrade_downgrade(rev): # upgrade к ревизии From d099eea945914eb8da92872ec2bc0d02fd77bd70 Mon Sep 17 00:00:00 2001 From: Yarmoshch Date: Sat, 1 Nov 2025 15:44:47 +0300 Subject: [PATCH 3/3] fix --- tests/migrations/test_stairway.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/migrations/test_stairway.py b/tests/migrations/test_stairway.py index c120014..f9b018b 100644 --- a/tests/migrations/test_stairway.py +++ b/tests/migrations/test_stairway.py @@ -10,8 +10,8 @@ def get_all_revisions(): for line in lines: if line and "->" in line: rev = line.split("->")[0].strip() - # if rev != "": - # revisions.append(rev) + if rev != "": + revisions.append(rev) return list(reversed(revisions))