Skip to content

Commit 3d11c04

Browse files
authored
Add test for RequireQueryBuilderOnRepositoryRule (#221)
1 parent 0a5f91e commit 3d11c04

File tree

11 files changed

+97
-5
lines changed

11 files changed

+97
-5
lines changed

src/Rules/Doctrine/RequireQueryBuilderOnRepositoryRule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ final class RequireQueryBuilderOnRepositoryRule implements Rule
2222
/**
2323
* @var string
2424
*/
25-
private const ERROR_MESSAGE = 'Avoid calling ->createQueryBuilder() directly on EntityManager as it requires select() + from() calls with specific values. Use $repository->createQueryBuilder() to be safe instead';
25+
public const ERROR_MESSAGE = 'Avoid calling ->createQueryBuilder() directly on EntityManager as it requires select() + from() calls with specific values. Use $repository->createQueryBuilder() to be safe instead';
2626

2727
public function getNodeType(): string
2828
{

stubs/Doctrine/ORM/EntityManagerInterface.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,11 @@
88

99
interface EntityManagerInterface
1010
{
11+
/**
12+
* @param class-string $class
13+
* @return EntityRepository
14+
*/
1115
public function getRepository(string $class): object;
16+
17+
public function createQueryBuilder();
1218
}

stubs/Doctrine/ORM/EntityRepository.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,7 @@
88

99
class EntityRepository
1010
{
11+
public function createQueryBuilder()
12+
{
13+
}
1114
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireQueryBuilderOnRepositoryRule\Fixture;
6+
7+
use Doctrine\ORM\EntityManagerInterface;
8+
use Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireQueryBuilderOnRepositoryRule\Source\RandomEntity;
9+
10+
final class ReportOnEntityManager
11+
{
12+
public function process(EntityManagerInterface $entityManager)
13+
{
14+
$someRepository = $entityManager->createQueryBuilder();
15+
}
16+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireQueryBuilderOnRepositoryRule\Fixture;
6+
7+
use Doctrine\ORM\EntityManagerInterface;
8+
use Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireQueryBuilderOnRepositoryRule\Source\RandomEntity;
9+
10+
final class SkipCreateQueryBuilderOnRepository
11+
{
12+
public function process(EntityManagerInterface $entityManager)
13+
{
14+
$someRepository = $entityManager->getRepository(RandomEntity::class);
15+
16+
$queryBuilder = $someRepository
17+
->createQueryBuilder();
18+
}
19+
20+
public function directlyOnCall(EntityManagerInterface $entityManager)
21+
{
22+
$queryBuilder = $entityManager->getRepository(RandomEntity::class)
23+
->createQueryBuilder();
24+
}
25+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireQueryBuilderOnRepositoryRule;
6+
7+
use Iterator;
8+
use PHPStan\Rules\Rule;
9+
use PHPStan\Testing\RuleTestCase;
10+
use PHPUnit\Framework\Attributes\DataProvider;
11+
use Symplify\PHPStanRules\Rules\Doctrine\RequireQueryBuilderOnRepositoryRule;
12+
13+
final class RequireQueryBuilderOnRepositoryRuleTest extends RuleTestCase
14+
{
15+
#[DataProvider('provideData')]
16+
public function testRule(string $filePath, array $expectedErrorsWithLines): void
17+
{
18+
$this->analyse([$filePath], $expectedErrorsWithLines);
19+
}
20+
21+
public static function provideData(): Iterator
22+
{
23+
yield [__DIR__ . '/Fixture/SkipCreateQueryBuilderOnRepository.php', []];
24+
25+
yield [__DIR__ . '/Fixture/ReportOnEntityManager.php', [
26+
[RequireQueryBuilderOnRepositoryRule::ERROR_MESSAGE, 14],
27+
]];
28+
}
29+
30+
protected function getRule(): Rule
31+
{
32+
return new RequireQueryBuilderOnRepositoryRule();
33+
}
34+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireQueryBuilderOnRepositoryRule\Source;
4+
5+
class RandomEntity
6+
{
7+
8+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireServiceRepositoryParentRuleTest\Fixture;
5+
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireServiceRepositoryParentRule\Fixture;
66

77
use Doctrine\Bundle\MongoDBBundle\Repository\ServiceDocumentRepositoryInterface;
88

tests/Rules/Doctrine/RequireServiceRepositoryParentRuleTest/Fixture/SkipServiceRepository.php renamed to tests/Rules/Doctrine/RequireServiceRepositoryParentRule/Fixture/SkipServiceRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireServiceRepositoryParentRuleTest\Fixture;
5+
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireServiceRepositoryParentRule\Fixture;
66

77
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
88

tests/Rules/Doctrine/RequireServiceRepositoryParentRuleTest/Fixture/SomeRepository.php renamed to tests/Rules/Doctrine/RequireServiceRepositoryParentRule/Fixture/SomeRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireServiceRepositoryParentRuleTest\Fixture;
5+
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireServiceRepositoryParentRule\Fixture;
66

77
final class SomeRepository
88
{
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireServiceRepositoryParentRuleTest;
5+
namespace Symplify\PHPStanRules\Tests\Rules\Doctrine\RequireServiceRepositoryParentRule;
66

77
use Iterator;
88
use PHPStan\Rules\Rule;

0 commit comments

Comments
 (0)