Skip to content

Commit 51e993c

Browse files
author
Andrey Helldar
committed
Added a method for determining the execution of an action depending on a condition
1 parent 6afc16e commit 51e993c

File tree

6 files changed

+120
-16
lines changed

6 files changed

+120
-16
lines changed

src/Support/Actionable.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,14 @@ public function exceptEnvironment(): array
107107
{
108108
return Arr::wrap($this->except_environment);
109109
}
110+
111+
/**
112+
* Determines whether the given action can be called conditionally.
113+
*
114+
* @return bool
115+
*/
116+
public function allow(): bool
117+
{
118+
return true;
119+
}
110120
}

src/Support/Migrator.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,11 @@ protected function allowEnvironment($migration): bool
133133

134134
$on = $migration->onEnvironment();
135135
$except = $migration->exceptEnvironment();
136+
$allow = $migration->allow();
137+
138+
if (! $allow) {
139+
return false;
140+
}
136141

137142
if (! empty($on) && ! in_array($environment, $on)) {
138143
return false;

tests/Commands/MigrateTest.php

Lines changed: 41 additions & 13 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, 5);
40+
$this->assertDatabaseCount($this->table, 6);
4141
$this->assertDatabaseMigrationDoesntLike($this->table, $table);
4242
$this->artisan('migrate:actions')->run();
4343

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

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

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

@@ -88,7 +88,8 @@ public function testFailedTransaction()
8888

8989
try {
9090
$this->artisan('migrate:actions')->run();
91-
} catch (Exception $e) {
91+
}
92+
catch (Exception $e) {
9293
$this->assertSame(Exception::class, get_class($e));
9394
$this->assertSame('Random message', $e->getMessage());
9495
}
@@ -115,17 +116,17 @@ public function testSingleEnvironment()
115116
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_except_testing');
116117
$this->artisan('migrate:actions')->run();
117118

118-
$this->assertDatabaseCount($table, 4);
119-
$this->assertDatabaseCount($this->table, 5);
119+
$this->assertDatabaseCount($table, 5);
120+
$this->assertDatabaseCount($this->table, 6);
120121
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
121122
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
122123
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
123124
$this->assertDatabaseMigrationHas($this->table, 'run_except_production');
124125
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_except_testing');
125126
$this->artisan('migrate:actions')->run();
126127

127-
$this->assertDatabaseCount($table, 4);
128-
$this->assertDatabaseCount($this->table, 5);
128+
$this->assertDatabaseCount($table, 5);
129+
$this->assertDatabaseCount($this->table, 6);
129130
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
130131
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
131132
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -153,8 +154,8 @@ public function testManyEnvironments()
153154
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_except_many_environments');
154155
$this->artisan('migrate:actions')->run();
155156

156-
$this->assertDatabaseCount($table, 4);
157-
$this->assertDatabaseCount($this->table, 5);
157+
$this->assertDatabaseCount($table, 5);
158+
$this->assertDatabaseCount($this->table, 6);
158159
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
159160
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
160161
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -164,8 +165,8 @@ public function testManyEnvironments()
164165
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_except_many_environments');
165166
$this->artisan('migrate:actions')->run();
166167

167-
$this->assertDatabaseCount($table, 4);
168-
$this->assertDatabaseCount($this->table, 5);
168+
$this->assertDatabaseCount($table, 5);
169+
$this->assertDatabaseCount($this->table, 6);
169170
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
170171
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
171172
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
@@ -176,6 +177,33 @@ public function testManyEnvironments()
176177
$this->artisan('migrate:actions')->run();
177178
}
178179

180+
public function testAllow()
181+
{
182+
$this->copyFiles();
183+
184+
$table = 'environment';
185+
186+
$this->artisan('migrate:actions:install')->run();
187+
188+
$this->assertDatabaseCount($table, 0);
189+
$this->assertDatabaseCount($this->table, 0);
190+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_allow');
191+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_disallow');
192+
$this->artisan('migrate:actions')->run();
193+
194+
$this->assertDatabaseCount($table, 5);
195+
$this->assertDatabaseCount($this->table, 6);
196+
$this->assertDatabaseMigrationHas($this->table, 'run_allow');
197+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_disallow');
198+
$this->artisan('migrate:actions')->run();
199+
200+
$this->assertDatabaseCount($table, 5);
201+
$this->assertDatabaseCount($this->table, 6);
202+
$this->assertDatabaseMigrationHas($this->table, 'run_allow');
203+
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_disallow');
204+
$this->artisan('migrate:actions')->run();
205+
}
206+
179207
public function testMigrationNotFound()
180208
{
181209
$this->assertDatabaseDoesntTable($this->table);

tests/Commands/RollbackTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,16 @@ public function testEnvironment()
5959
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_many_environments');
6060
$this->artisan('migrate:actions')->run();
6161

62-
$this->assertDatabaseCount($table, 4);
63-
$this->assertDatabaseCount($this->table, 5);
62+
$this->assertDatabaseCount($table, 5);
63+
$this->assertDatabaseCount($this->table, 6);
6464
$this->assertDatabaseMigrationHas($this->table, 'run_on_all');
6565
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
6666
$this->assertDatabaseMigrationHas($this->table, 'run_on_testing');
6767
$this->assertDatabaseMigrationHas($this->table, 'run_on_many_environments');
6868
$this->artisan('migrate:actions')->run();
6969

7070
$this->artisan('migrate:actions:rollback')->run();
71-
$this->assertDatabaseCount($table, 8);
71+
$this->assertDatabaseCount($table, 10);
7272
$this->assertDatabaseCount($this->table, 0);
7373
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_all');
7474
$this->assertDatabaseMigrationDoesntLike($this->table, 'run_on_production');
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
use Helldar\LaravelActions\Support\Actionable;
4+
use Illuminate\Database\Query\Builder;
5+
use Illuminate\Support\Facades\DB;
6+
use Ramsey\Uuid\Uuid;
7+
8+
class RunAllow 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+
protected function table(): Builder
25+
{
26+
return DB::table('environment');
27+
}
28+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
use Helldar\LaravelActions\Support\Actionable;
4+
use Illuminate\Database\Query\Builder;
5+
use Illuminate\Support\Facades\DB;
6+
use Ramsey\Uuid\Uuid;
7+
8+
class RunDisallow 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 allow(): bool
25+
{
26+
return false;
27+
}
28+
29+
protected function table(): Builder
30+
{
31+
return DB::table('environment');
32+
}
33+
}

0 commit comments

Comments
 (0)