Skip to content

Commit 0f29226

Browse files
authored
[CodeQuality] Add AddIntersectionParamToMockObjectParamRector (#755)
1 parent afebdca commit 0f29226

15 files changed

Lines changed: 718 additions & 0 deletions

config/sets/composer-based.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Rector\PHPUnit\AnnotationsToAttributes\Rector\ClassMethod\DataProviderAnnotationToAttributeRector;
1313
use Rector\PHPUnit\AnnotationsToAttributes\Rector\ClassMethod\DependsAnnotationWithValueToAttributeRector;
1414
use Rector\PHPUnit\AnnotationsToAttributes\Rector\ClassMethod\TestWithAnnotationToAttributeRector;
15+
use Rector\PHPUnit\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector;
1516
use Rector\PHPUnit\CodeQuality\Rector\Class_\AddIntersectionVarToMockObjectPropertyRector;
1617
use Rector\PHPUnit\CodeQuality\Rector\Class_\AddStubIntersectionVarToStubPropertyRector;
1718
use Rector\PHPUnit\CodeQuality\Rector\ClassMethod\BareCreateMockAssignToDirectUseRector;
@@ -57,6 +58,7 @@
5758
// mocks back over stubs, where a mock object is required
5859
MockObjectArgCreateStubToCreateMockRector::class,
5960
ExpectsParamToMockObjectRector::class,
61+
AddIntersectionParamToMockObjectParamRector::class,
6062

6163
// deprecated in PHPUnit 11.5
6264
AssertContainsOnlyMethodCallRector::class,

config/sets/phpunit-mock-to-stub.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
declare(strict_types=1);
44

55
use Rector\Config\RectorConfig;
6+
use Rector\PHPUnit\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector;
67
use Rector\PHPUnit\CodeQuality\Rector\Class_\AddIntersectionVarToMockObjectPropertyRector;
78
use Rector\PHPUnit\CodeQuality\Rector\Class_\AddStubIntersectionVarToStubPropertyRector;
89
use Rector\PHPUnit\CodeQuality\Rector\ClassMethod\BareCreateMockAssignToDirectUseRector;
@@ -27,5 +28,6 @@
2728

2829
// mocks back over stubs, where mock object is required
2930
MockObjectArgCreateStubToCreateMockRector::class,
31+
AddIntersectionParamToMockObjectParamRector::class,
3032
]);
3133
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector;
6+
7+
use Iterator;
8+
use PHPUnit\Framework\Attributes\DataProvider;
9+
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
10+
11+
final class AddIntersectionParamToMockObjectParamRectorTest extends AbstractRectorTestCase
12+
{
13+
#[DataProvider('provideData')]
14+
public function test(string $filePath): void
15+
{
16+
$this->doTestFile($filePath);
17+
}
18+
19+
public static function provideData(): Iterator
20+
{
21+
return self::yieldFilesFromDirectory(__DIR__ . '/Fixture');
22+
}
23+
24+
public function provideConfigFilePath(): string
25+
{
26+
return __DIR__ . '/config/configured_rule.php';
27+
}
28+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
4+
5+
use PHPUnit\Framework\MockObject\MockObject;
6+
use PHPUnit\Framework\TestCase;
7+
8+
final class DirectCreateMockArgTest extends TestCase
9+
{
10+
public function test(): void
11+
{
12+
$this->prepareServiceMock($this->createMock(\stdClass::class));
13+
}
14+
15+
private function prepareServiceMock(MockObject $someService): void
16+
{
17+
$someService->expects($this->once())
18+
->method('getId');
19+
}
20+
}
21+
22+
?>
23+
-----
24+
<?php
25+
26+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
27+
28+
use PHPUnit\Framework\MockObject\MockObject;
29+
use PHPUnit\Framework\TestCase;
30+
31+
final class DirectCreateMockArgTest extends TestCase
32+
{
33+
public function test(): void
34+
{
35+
$this->prepareServiceMock($this->createMock(\stdClass::class));
36+
}
37+
38+
/**
39+
* @param \stdClass&\PHPUnit\Framework\MockObject\MockObject $someService
40+
*/
41+
private function prepareServiceMock(MockObject $someService): void
42+
{
43+
$someService->expects($this->once())
44+
->method('getId');
45+
}
46+
}
47+
48+
?>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
4+
5+
use PHPUnit\Framework\MockObject\MockObject;
6+
use PHPUnit\Framework\TestCase;
7+
8+
final class SomeTest extends TestCase
9+
{
10+
public function test(): void
11+
{
12+
$someService = $this->createMock(\stdClass::class);
13+
$this->prepareServiceMock($someService);
14+
}
15+
16+
private function prepareServiceMock(MockObject $someService): void
17+
{
18+
$someService->expects($this->once())
19+
->method('getId');
20+
}
21+
}
22+
23+
?>
24+
-----
25+
<?php
26+
27+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
28+
29+
use PHPUnit\Framework\MockObject\MockObject;
30+
use PHPUnit\Framework\TestCase;
31+
32+
final class SomeTest extends TestCase
33+
{
34+
public function test(): void
35+
{
36+
$someService = $this->createMock(\stdClass::class);
37+
$this->prepareServiceMock($someService);
38+
}
39+
40+
/**
41+
* @param \stdClass&\PHPUnit\Framework\MockObject\MockObject $someService
42+
*/
43+
private function prepareServiceMock(MockObject $someService): void
44+
{
45+
$someService->expects($this->once())
46+
->method('getId');
47+
}
48+
}
49+
50+
?>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
4+
5+
use PHPUnit\Framework\TestCase;
6+
7+
final class SecondParamOnlyTest extends TestCase
8+
{
9+
public function test(): void
10+
{
11+
$builder = self::createMock(\stdClass::class);
12+
13+
$this->getEventListener(new \DateTime('now'), $builder);
14+
}
15+
16+
private function getEventListener(\DateTime $dateTime, \PHPUnit\Framework\MockObject\MockObject $builder): void
17+
{
18+
$builder->expects($this->once())
19+
->method('add');
20+
}
21+
}
22+
23+
?>
24+
-----
25+
<?php
26+
27+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
28+
29+
use PHPUnit\Framework\TestCase;
30+
31+
final class SecondParamOnlyTest extends TestCase
32+
{
33+
public function test(): void
34+
{
35+
$builder = self::createMock(\stdClass::class);
36+
37+
$this->getEventListener(new \DateTime('now'), $builder);
38+
}
39+
40+
/**
41+
* @param \stdClass&\PHPUnit\Framework\MockObject\MockObject $builder
42+
*/
43+
private function getEventListener(\DateTime $dateTime, \PHPUnit\Framework\MockObject\MockObject $builder): void
44+
{
45+
$builder->expects($this->once())
46+
->method('add');
47+
}
48+
}
49+
50+
?>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
4+
5+
use PHPUnit\Framework\MockObject\MockObject;
6+
use PHPUnit\Framework\TestCase;
7+
8+
final class SkipCreateStubTest extends TestCase
9+
{
10+
public function test(): void
11+
{
12+
$someService = $this->createStub(\stdClass::class);
13+
$this->prepareServiceMock($someService);
14+
}
15+
16+
private function prepareServiceMock(MockObject $someService): void
17+
{
18+
$someService->expects($this->once())
19+
->method('getId');
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
4+
5+
use PHPUnit\Framework\MockObject\MockObject;
6+
use PHPUnit\Framework\TestCase;
7+
8+
final class SkipDifferentMockedClassesTest extends TestCase
9+
{
10+
public function testFirst(): void
11+
{
12+
$someService = $this->createMock(\stdClass::class);
13+
$this->prepareServiceMock($someService);
14+
}
15+
16+
public function testSecond(): void
17+
{
18+
$someService = $this->createMock(\DateTime::class);
19+
$this->prepareServiceMock($someService);
20+
}
21+
22+
private function prepareServiceMock(MockObject $someService): void
23+
{
24+
$someService->expects($this->once())
25+
->method('getId');
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
4+
5+
use PHPUnit\Framework\MockObject\MockObject;
6+
use PHPUnit\Framework\TestCase;
7+
8+
final class SkipExistingParamDocTest extends TestCase
9+
{
10+
public function test(): void
11+
{
12+
$someService = $this->createMock(\stdClass::class);
13+
$this->prepareServiceMock($someService);
14+
}
15+
16+
/**
17+
* @param MockObject $someService
18+
*/
19+
private function prepareServiceMock(MockObject $someService): void
20+
{
21+
$someService->expects($this->once())
22+
->method('getId');
23+
}
24+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\AddIntersectionParamToMockObjectParamRector\Fixture;
4+
5+
use PHPUnit\Framework\MockObject\MockObject;
6+
use PHPUnit\Framework\TestCase;
7+
8+
final class SkipNoCallSiteTest extends TestCase
9+
{
10+
private function prepareServiceMock(MockObject $someService): void
11+
{
12+
$someService->expects($this->once())
13+
->method('getId');
14+
}
15+
}

0 commit comments

Comments
 (0)