Skip to content

Commit 17da27a

Browse files
author
Andrey Helldar
authored
Merge pull request #32 from TheDragonCode/2.x
Method to be called on runtime error
2 parents 444bc2f + 8c3f5f5 commit 17da27a

File tree

7 files changed

+232
-29
lines changed

7 files changed

+232
-29
lines changed

src/Support/Migrator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,6 @@ protected function runSuccess(ActionableContract $migration): void
221221
*/
222222
protected function runFailed(ActionableContract $migration): void
223223
{
224-
//$migration->failed();
224+
$migration->failed();
225225
}
226226
}

tests/Commands/MigrateTest.php

Lines changed: 67 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,22 @@ public function testOnce()
3939
$this->artisan('migrate:actions')->run();
4040

4141
$this->assertDatabaseCount($table, 1);
42-
$this->assertDatabaseCount($this->table, 7);
42+
$this->assertDatabaseCount($this->table, 8);
4343
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
4444
$this->artisan('migrate:actions')->run();
4545

4646
$this->assertDatabaseCount($table, 2);
47-
$this->assertDatabaseCount($this->table, 7);
47+
$this->assertDatabaseCount($this->table, 8);
4848
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
4949
$this->artisan('migrate:actions')->run();
5050

5151
$this->assertDatabaseCount($table, 3);
52-
$this->assertDatabaseCount($this->table, 7);
52+
$this->assertDatabaseCount($this->table, 8);
5353
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
5454
$this->artisan('migrate:actions')->run();
5555

5656
$this->assertDatabaseCount($table, 4);
57-
$this->assertDatabaseCount($this->table, 7);
57+
$this->assertDatabaseCount($this->table, 8);
5858
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
5959
}
6060

@@ -118,7 +118,7 @@ public function testSingleEnvironment()
118118
$this->artisan('migrate:actions')->run();
119119

120120
$this->assertDatabaseCount($table, 5);
121-
$this->assertDatabaseCount($this->table, 7);
121+
$this->assertDatabaseCount($this->table, 8);
122122
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
123123
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
124124
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -127,7 +127,7 @@ public function testSingleEnvironment()
127127
$this->artisan('migrate:actions')->run();
128128

129129
$this->assertDatabaseCount($table, 5);
130-
$this->assertDatabaseCount($this->table, 7);
130+
$this->assertDatabaseCount($this->table, 8);
131131
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
132132
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
133133
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -155,7 +155,7 @@ public function testManyEnvironments()
155155
$this->artisan('migrate:actions')->run();
156156

157157
$this->assertDatabaseCount($table, 5);
158-
$this->assertDatabaseCount($this->table, 7);
158+
$this->assertDatabaseCount($this->table, 8);
159159
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
160160
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
161161
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -166,7 +166,7 @@ public function testManyEnvironments()
166166
$this->artisan('migrate:actions')->run();
167167

168168
$this->assertDatabaseCount($table, 5);
169-
$this->assertDatabaseCount($this->table, 7);
169+
$this->assertDatabaseCount($this->table, 8);
170170
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
171171
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
172172
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -191,13 +191,13 @@ public function testAllow()
191191
$this->artisan('migrate:actions')->run();
192192

193193
$this->assertDatabaseCount($table, 5);
194-
$this->assertDatabaseCount($this->table, 7);
194+
$this->assertDatabaseCount($this->table, 8);
195195
$this->assertDatabaseMigrationHas($this->table, 'run_allow');
196196
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_disallow');
197197
$this->artisan('migrate:actions')->run();
198198

199199
$this->assertDatabaseCount($table, 5);
200-
$this->assertDatabaseCount($this->table, 7);
200+
$this->assertDatabaseCount($this->table, 8);
201201
$this->assertDatabaseMigrationHas($this->table, 'run_allow');
202202
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_disallow');
203203
}
@@ -216,11 +216,11 @@ public function testUpSuccess()
216216
$this->artisan('migrate:actions')->run();
217217

218218
$this->assertDatabaseCount($table, 2);
219-
$this->assertDatabaseCount($this->table, 7);
219+
$this->assertDatabaseCount($this->table, 8);
220220
$this->assertDatabaseMigrationHas($this->table, 'run_success');
221221
}
222222

223-
public function testUpFailed()
223+
public function testUpSuccessOnFailed()
224224
{
225225
$this->copyFiles();
226226

@@ -234,11 +234,11 @@ public function testUpFailed()
234234
$this->artisan('migrate:actions')->run();
235235

236236
$this->assertDatabaseCount($table, 2);
237-
$this->assertDatabaseCount($this->table, 7);
237+
$this->assertDatabaseCount($this->table, 8);
238238
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success_on_failed');
239239

240240
try {
241-
$this->copyFiles(true);
241+
$this->copySuccessFailureMethod();
242242

243243
$this->artisan('migrate:actions')->run();
244244
} catch (Throwable $e) {
@@ -250,10 +250,62 @@ public function testUpFailed()
250250
}
251251

252252
$this->assertDatabaseCount($table, 2);
253-
$this->assertDatabaseCount($this->table, 7);
253+
$this->assertDatabaseCount($this->table, 8);
254254
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success_on_failed');
255255
}
256256

257+
public function testUpFailed()
258+
{
259+
$this->copyFiles();
260+
261+
$table = 'failed';
262+
263+
$this->artisan('migrate:actions:install')->run();
264+
265+
$this->assertDatabaseCount($table, 0);
266+
$this->assertDatabaseCount($this->table, 0);
267+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed');
268+
$this->artisan('migrate:actions')->run();
269+
270+
$this->assertDatabaseCount($table, 0);
271+
$this->assertDatabaseCount($this->table, 8);
272+
$this->assertDatabaseMigrationHas($this->table, 'run_failed');
273+
}
274+
275+
public function testUpFailedOnException()
276+
{
277+
$this->copyFiles();
278+
279+
$table = 'failed';
280+
281+
$this->artisan('migrate:actions:install')->run();
282+
283+
$this->assertDatabaseCount($table, 0);
284+
$this->assertDatabaseCount($this->table, 0);
285+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');
286+
$this->artisan('migrate:actions')->run();
287+
288+
$this->assertDatabaseCount($table, 0);
289+
$this->assertDatabaseCount($this->table, 8);
290+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');
291+
292+
try {
293+
$this->copyFailedMethod();
294+
295+
$this->artisan('migrate:actions')->run();
296+
} catch (Throwable $e) {
297+
$this->assertInstanceOf(Exception::class, $e);
298+
299+
$this->assertSame('Custom exception', $e->getMessage());
300+
301+
$this->assertTrue(Str::contains($e->getFile(), 'run_failed_failure'));
302+
}
303+
304+
$this->assertDatabaseCount($table, 1);
305+
$this->assertDatabaseCount($this->table, 8);
306+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');
307+
}
308+
257309
public function testPathAsFileWithExtension()
258310
{
259311
$this->copyFiles();

tests/Commands/RollbackTest.php

Lines changed: 67 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public function testEnvironment()
6363
$this->artisan('migrate:actions')->run();
6464

6565
$this->assertDatabaseCount($table, 5);
66-
$this->assertDatabaseCount($this->table, 7);
66+
$this->assertDatabaseCount($this->table, 8);
6767
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
6868
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
6969
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -79,7 +79,7 @@ public function testEnvironment()
7979
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_many_environments');
8080
}
8181

82-
public function testUpSuccess()
82+
public function testDownSuccess()
8383
{
8484
$this->copyFiles();
8585

@@ -93,7 +93,7 @@ public function testUpSuccess()
9393
$this->artisan('migrate:actions')->run();
9494

9595
$this->assertDatabaseCount($table, 2);
96-
$this->assertDatabaseCount($this->table, 7);
96+
$this->assertDatabaseCount($this->table, 8);
9797
$this->assertDatabaseMigrationHas($this->table, 'run_success');
9898

9999
$this->artisan('migrate:actions:rollback')->run();
@@ -102,7 +102,7 @@ public function testUpSuccess()
102102
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success');
103103
}
104104

105-
public function testUpFailed()
105+
public function testDownSuccessOnFailed()
106106
{
107107
$this->copyFiles();
108108

@@ -116,13 +116,13 @@ public function testUpFailed()
116116
$this->artisan('migrate:actions')->run();
117117

118118
$this->assertDatabaseCount($table, 2);
119-
$this->assertDatabaseCount($this->table, 7);
119+
$this->assertDatabaseCount($this->table, 8);
120120
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success_on_failed');
121121

122122
try {
123-
$this->copyFiles(true);
123+
$this->copySuccessFailureMethod();
124124

125-
$this->table()->insert(['migration' => 'run_success_on_failed', 'batch' => 999]);
125+
$this->table()->insert(['migration' => '2021_12_23_165048_run_success_on_failed', 'batch' => 999]);
126126

127127
$this->artisan('migrate:actions:rollback')->run();
128128
} catch (Throwable $e) {
@@ -134,7 +134,66 @@ public function testUpFailed()
134134
}
135135

136136
$this->assertDatabaseCount($table, 2);
137-
$this->assertDatabaseCount($this->table, 8);
137+
$this->assertDatabaseCount($this->table, 9);
138138
$this->assertDatabaseMigrationHas($this->table, 'run_success_on_failed');
139139
}
140+
141+
public function testDownFailed()
142+
{
143+
$this->copyFiles();
144+
145+
$table = 'failed';
146+
147+
$this->artisan('migrate:actions:install')->run();
148+
149+
$this->assertDatabaseCount($table, 0);
150+
$this->assertDatabaseCount($this->table, 0);
151+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed');
152+
$this->artisan('migrate:actions')->run();
153+
154+
$this->assertDatabaseCount($table, 0);
155+
$this->assertDatabaseCount($this->table, 8);
156+
$this->assertDatabaseMigrationHas($this->table, 'run_failed');
157+
158+
$this->artisan('migrate:actions:rollback')->run();
159+
$this->assertDatabaseCount($table, 0);
160+
$this->assertDatabaseCount($this->table, 0);
161+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed');
162+
}
163+
164+
public function testUpFailedOnException()
165+
{
166+
$this->copyFiles();
167+
168+
$table = 'failed';
169+
170+
$this->artisan('migrate:actions:install')->run();
171+
172+
$this->assertDatabaseCount($table, 0);
173+
$this->assertDatabaseCount($this->table, 0);
174+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');
175+
$this->artisan('migrate:actions')->run();
176+
177+
$this->assertDatabaseCount($table, 0);
178+
$this->assertDatabaseCount($this->table, 8);
179+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_failed_failure');
180+
181+
try {
182+
$this->copyFailedMethod();
183+
184+
$this->table()->insert(['migration' => '2021_12_23_184029_run_failed_failure', 'batch' => 999]);
185+
186+
$this->artisan('migrate:actions:rollback')->run();
187+
} catch (Throwable $e) {
188+
$this->assertInstanceOf(Exception::class, $e);
189+
190+
$this->assertSame('Custom exception', $e->getMessage());
191+
192+
$this->assertTrue(Str::contains($e->getFile(), 'run_failed_failure'));
193+
}
194+
195+
$this->assertDatabaseCount($table, 1);
196+
$this->assertDatabaseCount($this->table, 9);
197+
$this->assertDatabaseMigrationHas($this->table, 'run_failed_failure');
198+
}
140199
}

tests/Concerns/Files.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,25 @@ protected function freshFiles(): void
1313
);
1414
}
1515

16-
protected function copyFiles(bool $failed = false): void
16+
protected function copyFiles(): void
1717
{
18-
$source = $failed
19-
? __DIR__ . '/../fixtures/actions_failed'
20-
: __DIR__ . '/../fixtures/actions';
18+
File::copyDirectory(__DIR__ . '/../fixtures/actions', $this->targetDirectory());
19+
}
2120

22-
File::copyDirectory($source, $this->targetDirectory());
21+
protected function copySuccessFailureMethod()
22+
{
23+
File::copy(
24+
__DIR__ . '/../fixtures/actions_failed/2021_12_23_165048_run_success_on_failed.php',
25+
$this->targetDirectory('2021_12_23_165048_run_success_on_failed.php')
26+
);
27+
}
28+
29+
protected function copyFailedMethod()
30+
{
31+
File::copy(
32+
__DIR__ . '/../fixtures/actions_failed/2021_12_23_184029_run_failed_failure.php',
33+
$this->targetDirectory('2021_12_23_184029_run_failed_failure.php')
34+
);
2335
}
2436

2537
protected function copySuccessTransaction(): void
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
use DragonCode\LaravelActions\Support\Actionable;
4+
use Illuminate\Database\Query\Builder;
5+
use Illuminate\Support\Facades\DB;
6+
use Ramsey\Uuid\Uuid;
7+
8+
class RunFailed extends Actionable
9+
{
10+
public function up(): void
11+
{
12+
}
13+
14+
public function down(): void
15+
{
16+
}
17+
18+
public function failed(): void
19+
{
20+
$this->table()->insert([
21+
'value' => Uuid::uuid4(),
22+
]);
23+
}
24+
25+
protected function table(): Builder
26+
{
27+
return DB::table('success');
28+
}
29+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
use DragonCode\LaravelActions\Support\Actionable;
4+
use Illuminate\Database\Query\Builder;
5+
use Illuminate\Support\Facades\DB;
6+
use Ramsey\Uuid\Uuid;
7+
8+
class RunFailedFailure extends Actionable
9+
{
10+
public function up(): void
11+
{
12+
throw new Exception('Custom exception');
13+
}
14+
15+
public function down(): void
16+
{
17+
throw new Exception('Custom exception');
18+
}
19+
20+
public function failed(): void
21+
{
22+
$this->table()->insert([
23+
'value' => Uuid::uuid4(),
24+
]);
25+
}
26+
27+
protected function table(): Builder
28+
{
29+
return DB::table('failed');
30+
}
31+
}

0 commit comments

Comments
 (0)