@@ -51,6 +51,27 @@ def test_migrate_data_migration(migration_state_file, runner, log):
5151 assert "Migrations completed successfully." in result .output
5252
5353
54+ @freeze_time ("2025-04-06 13:10:30" )
55+ @pytest .mark .usefixtures ("data_migration_file" , "schema_migration_file" )
56+ def test_migrate_data_single_migration (migration_state_file , runner , log ):
57+ result = runner .invoke (app , ["migrate" , "--data" , "fake_data_file_name" ])
58+
59+ assert result .exit_code == 0 , result .output
60+ migration_state_data = json .loads (migration_state_file .read_text (encoding = "utf-8" ))
61+ assert migration_state_data == {
62+ "fake_data_file_name" : {
63+ "migration_id" : "fake_data_file_name" ,
64+ "order_id" : 20250406020202 ,
65+ "type" : "data" ,
66+ "started_at" : "2025-04-06T13:10:30+00:00" ,
67+ "applied_at" : "2025-04-06T13:10:30+00:00" ,
68+ }
69+ }
70+ assert "Running data migrations..." in result .output
71+ assert "Running migration: fake_data_file_name" in log .text
72+ assert "Migrations completed successfully." in result .output
73+
74+
5475@freeze_time ("2025-04-06 13:00:00" )
5576@pytest .mark .usefixtures ("applied_migration" )
5677def test_migrate_skip_migration_already_applied (migration_state_file , runner , log ):
@@ -72,6 +93,16 @@ def test_migrate_skip_migration_already_applied(migration_state_file, runner, lo
7293 assert "Migrations completed successfully." in result .output
7394
7495
96+ @pytest .mark .usefixtures ("applied_migration" )
97+ def test_migrate_data_single_already_applied (runner ):
98+ result = runner .invoke (app , ["migrate" , "--data" , "fake_data_file_name" ])
99+
100+ assert result .exit_code == 1 , result .output
101+ assert (
102+ "Error running data command: Migration fake_data_file_name already applied" in result .output
103+ )
104+
105+
75106@pytest .mark .usefixtures ("data_migration_file_error" )
76107def test_migrate_data_run_script_fail (migration_state_file , runner , log ):
77108 result = runner .invoke (app , ["migrate" , "--data" ])
@@ -90,6 +121,46 @@ def test_migrate_data_run_script_fail(migration_state_file, runner, log):
90121 assert "Migration fake_error_file_name failed: Fake Error" in result .output
91122
92123
124+ @pytest .mark .usefixtures ("data_migration_file" )
125+ def test_migrate_data_single_migration_not_found (runner ):
126+ result = runner .invoke (app , ["migrate" , "--data" , "not_existing_migration" ])
127+
128+ assert result .exit_code == 1 , result .output
129+ assert "Error running data command: Migration not_existing_migration not found" in result .output
130+
131+
132+ @pytest .mark .usefixtures ("data_migration_file" , "schema_migration_file" )
133+ def test_migrate_data_single_migration_wrong_type (runner ):
134+ result = runner .invoke (app , ["migrate" , "--data" , "fake_schema_file_name" ])
135+
136+ assert result .exit_code == 1 , result .output
137+ assert (
138+ "Error running data command: Migration fake_schema_file_name is not a data migration"
139+ in result .output
140+ )
141+
142+
143+ @freeze_time ("2025-04-06 13:10:30" )
144+ @pytest .mark .usefixtures ("data_migration_file" , "schema_migration_file" )
145+ def test_migrate_schema_single_migration (migration_state_file , runner , log ):
146+ result = runner .invoke (app , ["migrate" , "--schema" , "fake_schema_file_name" ])
147+
148+ assert result .exit_code == 0 , result .output
149+ migration_state_data = json .loads (migration_state_file .read_text (encoding = "utf-8" ))
150+ assert migration_state_data == {
151+ "fake_schema_file_name" : {
152+ "migration_id" : "fake_schema_file_name" ,
153+ "order_id" : 20260101010101 ,
154+ "type" : "schema" ,
155+ "started_at" : "2025-04-06T13:10:30+00:00" ,
156+ "applied_at" : "2025-04-06T13:10:30+00:00" ,
157+ }
158+ }
159+ assert "Running schema migrations..." in result .output
160+ assert "Running migration: fake_schema_file_name" in log .text
161+ assert "schema migrations applied successfully." in result .output
162+
163+
93164@freeze_time ("2025-04-06 10:11:24" )
94165@pytest .mark .usefixtures ("data_migration_file" )
95166def test_migrate_manual (migration_state_file , runner ):
0 commit comments