Skip to content

Commit c6d8ec8

Browse files
committed
skip if used in assert call
1 parent 20d2bc8 commit c6d8ec8

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use PhpParser\Node\Stmt\Expression;
1919
use PhpParser\Node\Stmt\Foreach_;
2020
use Rector\PhpParser\Node\BetterNodeFinder;
21+
use Rector\PHPUnit\CodeQuality\NodeAnalyser\AssertMethodAnalyzer;
2122
use Rector\PHPUnit\CodeQuality\NodeAnalyser\AssignedMocksCollector;
2223
use Rector\PHPUnit\CodeQuality\NodeFinder\VariableFinder;
2324
use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer;
@@ -35,6 +36,7 @@ public function __construct(
3536
private readonly AssignedMocksCollector $assignedMocksCollector,
3637
private readonly BetterNodeFinder $betterNodeFinder,
3738
private readonly VariableFinder $variableFinder,
39+
private readonly AssertMethodAnalyzer $assertMethodAnalyzer,
3840
) {
3941
}
4042

@@ -125,6 +127,10 @@ public function refactor(Node $node): ?Node
125127
continue;
126128
}
127129

130+
if ($this->isUsedInAssertCall($node, $variableName)) {
131+
continue;
132+
}
133+
128134
// 1. remove initial assign
129135
$variablesToMethodCalls = [];
130136

@@ -251,4 +257,34 @@ private function isUsedInClosure(ClassMethod|Foreach_ $stmtsAware, string $varia
251257

252258
return false;
253259
}
260+
261+
private function isUsedInAssertCall(ClassMethod|Foreach_ $stmtsAware, string $variableName): bool
262+
{
263+
/** @var StaticCall[]|MethodCall[] $calls */
264+
$calls = $this->betterNodeFinder->findInstancesOfScoped([$stmtsAware], [MethodCall::class, StaticCall::class]);
265+
266+
$assertCalls = [];
267+
foreach ($calls as $call) {
268+
if (! $this->assertMethodAnalyzer->detectTestCaseCall($call)) {
269+
continue;
270+
}
271+
272+
$assertCalls[] = $call;
273+
}
274+
275+
foreach ($assertCalls as $assertCall) {
276+
foreach ($assertCall->getArgs() as $assertCallArg) {
277+
if (! $assertCallArg->value instanceof Variable) {
278+
continue;
279+
}
280+
281+
if ($this->isName($assertCallArg->value, $variableName)) {
282+
return true;
283+
}
284+
285+
}
286+
}
287+
288+
return false;
289+
}
254290
}

0 commit comments

Comments
 (0)