Skip to content

Commit 18f32c9

Browse files
committed
Bug: dependencies leak between files
1 parent c82446b commit 18f32c9

File tree

5 files changed

+58
-0
lines changed

5 files changed

+58
-0
lines changed

tests/E2E/Cli/CheckCommandTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ public function test_you_can_ignore_the_default_baseline(): void
146146
$this->assertCheckHasErrors($cmdTester);
147147
}
148148

149+
public function test_dependencies_should_not_leak_between_files(): void
150+
{
151+
$cmdTester = $this->runCheck(__DIR__.'/../_fixtures/configDependenciesLeak.php');
152+
153+
$this->assertCheckHasSuccess($cmdTester);
154+
}
155+
149156
public function test_baseline_line_numbers_can_be_ignored(): void
150157
{
151158
$configFilePath = __DIR__.'/../_fixtures/configIgnoreBaselineLineNumbers.php';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\DependenciesLeak\FirstModule;
6+
7+
class Router {
8+
public static function define(): void
9+
{
10+
11+
}
12+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\DependenciesLeak\FirstModule;
6+
7+
Router::define();
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\DependenciesLeak\SecondModule;
6+
7+
class SomeClass {
8+
9+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
use Arkitect\ClassSet;
5+
use Arkitect\CLI\Config;
6+
use Arkitect\Expression\ForClasses\HaveNameMatching;
7+
use Arkitect\Expression\ForClasses\Implement;
8+
use Arkitect\Expression\ForClasses\NotDependsOnTheseNamespaces;
9+
use Arkitect\Expression\ForClasses\NotHaveDependencyOutsideNamespace;
10+
use Arkitect\Expression\ForClasses\ResideInOneOfTheseNamespaces;
11+
use Arkitect\Rules\Rule;
12+
13+
return static function (Config $config): void {
14+
$dependenciesLeakClassSet = ClassSet::fromDir(__DIR__.'/DependenciesLeak');
15+
16+
$rule_1 = Rule::allClasses()
17+
->that(new ResideInOneOfTheseNamespaces('App\DependenciesLeak\SecondModule'))
18+
->should(new NotDependsOnTheseNamespaces('App\DependenciesLeak\FirstModule'))
19+
->because('modules should be independent');
20+
21+
$config
22+
->add($dependenciesLeakClassSet, ...[$rule_1]);
23+
};

0 commit comments

Comments
 (0)