Passed
Pull Request — master (#4)
by Alex
02:36
created

testImplementsQueryServiceInterface()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ArpTest\DoctrineEntityRepository\Query;
6
7
use Arp\DoctrineEntityRepository\Query\QueryService;
8
use Arp\DoctrineEntityRepository\Query\QueryServiceInterface;
9
use Arp\Entity\EntityInterface;
10
use Doctrine\ORM\EntityManagerInterface;
11
use Doctrine\ORM\QueryBuilder;
12
use PHPUnit\Framework\MockObject\MockObject;
13
use PHPUnit\Framework\TestCase;
14
use Psr\Log\LoggerInterface;
15
16
/**
17
 * @author  Alex Patterson <[email protected]>
18
 * @package ArpTest\DoctrineEntityRepository\Query
19
 */
20
final class QueryServiceTest extends TestCase
21
{
22
    /**
23
     * @var string
24
     */
25
    private $entityName;
26
27
    /**
28
     * @var EntityManagerInterface|MockObject
29
     */
30
    private $entityManager;
31
32
    /**
33
     * @var LoggerInterface|MockObject
34
     */
35
    private $logger;
36
37
    /**
38
     * Setup the test case dependencies.
39
     */
40
    public function setUp(): void
41
    {
42
        $this->entityName = EntityInterface::class;
43
44
        $this->entityManager = $this->getMockForAbstractClass(EntityManagerInterface::class);
45
46
        $this->logger = $this->getMockForAbstractClass(LoggerInterface::class);
47
    }
48
49
    /**
50
     * Assert that the QueryService implements QueryServiceInterface
51
     *
52
     * @covers \Arp\DoctrineEntityRepository\Query\QueryService::__construct
53
     */
54
    public function testImplementsQueryServiceInterface(): void
55
    {
56
        $queryService = new QueryService($this->entityName, $this->entityManager, $this->logger);
57
58
        $this->assertInstanceOf(QueryServiceInterface::class, $queryService);
59
    }
60
61
    /**
62
     * Assert that a query builder is returned without an alias.
63
     *
64
     * @covers \Arp\DoctrineEntityRepository\Query\QueryService::createQueryBuilder
65
     */
66
    public function testCreateQueryBuilderWillReturnQueryBuilderWithoutAlias(): void
67
    {
68
        $queryService = new QueryService($this->entityName, $this->entityManager, $this->logger);
69
70
        /** @var QueryBuilder|MockObject $queryBuilder */
71
        $queryBuilder = $this->createMock(QueryBuilder::class);
72
73
        $this->entityManager->expects($this->once())
74
            ->method('createQueryBuilder')
75
            ->willReturn($queryBuilder);
76
77
        $queryBuilder->expects($this->never())->method('select');
78
        $queryBuilder->expects($this->never())->method('from');
79
80
        $this->assertInstanceOf(QueryBuilder::class, $queryService->createQueryBuilder());
81
    }
82
83
    /**
84
     * Assert that a query builder is returned with the provided $alias
85
     *
86
     * @covers \Arp\DoctrineEntityRepository\Query\QueryService::createQueryBuilder
87
     */
88
    public function testCreateQueryBuilderWillReturnQueryBuilderWithAlias(): void
89
    {
90
        $queryService = new QueryService($this->entityName, $this->entityManager, $this->logger);
91
92
        $alias = 'foo';
93
94
        /** @var QueryBuilder|MockObject $queryBuilder */
95
        $queryBuilder = $this->createMock(QueryBuilder::class);
96
97
        $this->entityManager->expects($this->once())
98
            ->method('createQueryBuilder')
99
            ->willReturn($queryBuilder);
100
101
        $queryBuilder->expects($this->once())
102
            ->method('select')
103
            ->with($alias)
104
            ->willReturn($queryBuilder);
105
106
        $queryBuilder->expects($this->once())
107
            ->method('from')
108
            ->with($this->entityName, $alias);
109
110
        $this->assertInstanceOf(QueryBuilder::class, $queryService->createQueryBuilder($alias));
111
    }
112
}
113