Skip to content

Commit 4f22d45

Browse files
author
Andrey Helldar
authored
Merge pull request #28 from TheDragonCode/2.x
Method to be called on success
2 parents 45937c7 + 6d760e6 commit 4f22d45

File tree

8 files changed

+183
-16
lines changed

8 files changed

+183
-16
lines changed

src/Support/Actionable.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,13 @@ public function allow(): bool
117117
{
118118
return true;
119119
}
120+
121+
/**
122+
* Method to be called when the job completes successfully
123+
*
124+
* @return void
125+
*/
126+
public function success(): void
127+
{
128+
}
120129
}

src/Support/Migrator.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ protected function runDown($file, $migration, $pretend)
8787
}
8888

8989
parent::runDown($file, $migration, $pretend);
90+
91+
$this->runSuccess($instance);
9092
}
9193

9294
/**
@@ -100,12 +102,16 @@ protected function runMigration($migration, $method)
100102
if ($this->enabledTransactions($migration)) {
101103
DB::transaction(function () use ($migration, $method) {
102104
parent::runMigration($migration, $method);
105+
106+
$this->runSuccess($migration);
103107
}, $this->transactionAttempts($migration));
104108

105109
return;
106110
}
107111

108112
parent::runMigration($migration, $method);
113+
114+
$this->runSuccess($migration);
109115
}
110116

111117
/**
@@ -175,4 +181,9 @@ protected function transactionAttempts($migration): int
175181

176182
return (int) abs($value);
177183
}
184+
185+
protected function runSuccess($migration): void
186+
{
187+
$migration->success();
188+
}
178189
}

tests/Commands/MigrateTest.php

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,22 @@ public function testOnce()
3737
$this->artisan('migrate:actions')->run();
3838

3939
$this->assertDatabaseCount($table, 1);
40-
$this->assertDatabaseCount($this->table, 6);
40+
$this->assertDatabaseCount($this->table, 7);
4141
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
4242
$this->artisan('migrate:actions')->run();
4343

4444
$this->assertDatabaseCount($table, 2);
45-
$this->assertDatabaseCount($this->table, 6);
45+
$this->assertDatabaseCount($this->table, 7);
4646
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
4747
$this->artisan('migrate:actions')->run();
4848

4949
$this->assertDatabaseCount($table, 3);
50-
$this->assertDatabaseCount($this->table, 6);
50+
$this->assertDatabaseCount($this->table, 7);
5151
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
5252
$this->artisan('migrate:actions')->run();
5353

5454
$this->assertDatabaseCount($table, 4);
55-
$this->assertDatabaseCount($this->table, 6);
55+
$this->assertDatabaseCount($this->table, 7);
5656
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
5757
}
5858

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

118118
$this->assertDatabaseCount($table, 5);
119-
$this->assertDatabaseCount($this->table, 6);
119+
$this->assertDatabaseCount($this->table, 7);
120120
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
121121
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
122122
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -125,7 +125,7 @@ public function testSingleEnvironment()
125125
$this->artisan('migrate:actions')->run();
126126

127127
$this->assertDatabaseCount($table, 5);
128-
$this->assertDatabaseCount($this->table, 6);
128+
$this->assertDatabaseCount($this->table, 7);
129129
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
130130
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
131131
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -154,7 +154,7 @@ public function testManyEnvironments()
154154
$this->artisan('migrate:actions')->run();
155155

156156
$this->assertDatabaseCount($table, 5);
157-
$this->assertDatabaseCount($this->table, 6);
157+
$this->assertDatabaseCount($this->table, 7);
158158
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
159159
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
160160
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -165,7 +165,7 @@ public function testManyEnvironments()
165165
$this->artisan('migrate:actions')->run();
166166

167167
$this->assertDatabaseCount($table, 5);
168-
$this->assertDatabaseCount($this->table, 6);
168+
$this->assertDatabaseCount($this->table, 7);
169169
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
170170
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
171171
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -191,18 +191,54 @@ public function testAllow()
191191
$this->artisan('migrate:actions')->run();
192192

193193
$this->assertDatabaseCount($table, 5);
194-
$this->assertDatabaseCount($this->table, 6);
194+
$this->assertDatabaseCount($this->table, 7);
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, 6);
200+
$this->assertDatabaseCount($this->table, 7);
201201
$this->assertDatabaseMigrationHas($this->table, 'run_allow');
202202
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_disallow');
203203
$this->artisan('migrate:actions')->run();
204204
}
205205

206+
public function testUpSuccess()
207+
{
208+
$this->copyFiles();
209+
210+
$table = 'success';
211+
212+
$this->artisan('migrate:actions:install')->run();
213+
214+
$this->assertDatabaseCount($table, 0);
215+
$this->assertDatabaseCount($this->table, 0);
216+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success');
217+
$this->artisan('migrate:actions')->run();
218+
219+
$this->assertDatabaseCount($table, 2);
220+
$this->assertDatabaseCount($this->table, 7);
221+
$this->assertDatabaseMigrationHas($this->table, 'run_success');
222+
$this->artisan('migrate:actions')->run();
223+
}
224+
225+
public function testUpSuccessOnFailed()
226+
{
227+
$this->expectException(Exception::class);
228+
$this->expectExceptionMessage('Custom exception');
229+
230+
$this->copyFiles(true);
231+
232+
$table = 'success';
233+
234+
$this->artisan('migrate:actions:install')->run();
235+
236+
$this->assertDatabaseCount($table, 0);
237+
$this->assertDatabaseCount($this->table, 0);
238+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success');
239+
$this->artisan('migrate:actions')->run();
240+
}
241+
206242
public function testPathAsFileWithExtension()
207243
{
208244
$this->copyFiles();

tests/Commands/RollbackTest.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public function testEnvironment()
6060
$this->artisan('migrate:actions')->run();
6161

6262
$this->assertDatabaseCount($table, 5);
63-
$this->assertDatabaseCount($this->table, 6);
63+
$this->assertDatabaseCount($this->table, 7);
6464
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
6565
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
6666
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -75,4 +75,28 @@ public function testEnvironment()
7575
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_testing');
7676
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_many_environments');
7777
}
78+
79+
public function testUpSuccess()
80+
{
81+
$this->copyFiles();
82+
83+
$table = 'success';
84+
85+
$this->artisan('migrate:actions:install')->run();
86+
87+
$this->assertDatabaseCount($table, 0);
88+
$this->assertDatabaseCount($this->table, 0);
89+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success');
90+
$this->artisan('migrate:actions')->run();
91+
92+
$this->assertDatabaseCount($table, 2);
93+
$this->assertDatabaseCount($this->table, 7);
94+
$this->assertDatabaseMigrationHas($this->table, 'run_success');
95+
$this->artisan('migrate:actions')->run();
96+
97+
$this->artisan('migrate:actions:rollback')->run();
98+
$this->assertDatabaseCount($table, 5);
99+
$this->assertDatabaseCount($this->table, 0);
100+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_success');
101+
}
78102
}

tests/Concerns/Files.php

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

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

2425
protected function copySuccessTransaction(): void
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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 RunSuccess extends Actionable
9+
{
10+
public function up(): void
11+
{
12+
$this->table()->insert([
13+
'value' => Uuid::uuid4(),
14+
]);
15+
}
16+
17+
public function down(): void
18+
{
19+
$this->table()->insert([
20+
'value' => Uuid::uuid4(),
21+
]);
22+
}
23+
24+
public function success(): void
25+
{
26+
$this->table()->insert([
27+
'value' => Uuid::uuid4(),
28+
]);
29+
}
30+
31+
protected function table(): Builder
32+
{
33+
return DB::table('success');
34+
}
35+
}
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 RunSuccessOnFailed 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();
18+
}
19+
20+
public function success(): void
21+
{
22+
$this->table()->insert([
23+
'value' => Uuid::uuid4(),
24+
]);
25+
}
26+
27+
protected function table(): Builder
28+
{
29+
return DB::table('success');
30+
}
31+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
class CreateSuccessTable extends Migration
8+
{
9+
public function up()
10+
{
11+
Schema::create('success', function (Blueprint $table) {
12+
$table->string('value');
13+
});
14+
}
15+
16+
public function down()
17+
{
18+
Schema::dropIfExists('success');
19+
}
20+
}

0 commit comments

Comments
 (0)