Completed
Push — master ( caef2d...913bd2 )
by Guillermo A.
01:50
created

RepositoryFactoryTest::testFactoryWithNamespace()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 0
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Test\Repositories;
4
5
use Guillermoandrae\Repositories\AbstractRepository;
6
use Guillermoandrae\Repositories\RepositoryFactory;
7
use PHPUnit\Framework\TestCase;
8
9
class RepositoryFactoryTest extends TestCase
10
{
11
    public function testFactory()
12
    {
13
        $expectedRepository = $this->getRepository('test1');
14
        $actualRepository = RepositoryFactory::factory('test1');
15
        $this->assertEquals($expectedRepository, $actualRepository);
16
    }
17
18
    public function testFactoryWithOptions()
19
    {
20
        $options = [];
21
        $expectedRepository = $this->getRepository('test2', $options);
22
        $actualRepository = RepositoryFactory::factory('test2', $options);
23
        $this->assertEquals($expectedRepository, $actualRepository);
24
    }
25
26
    public function testFactoryWithNamespace()
27
    {
28
        $namespace = 'MyApp';
29
        RepositoryFactory::setNamespace($namespace);
30
        $expectedRepository = $this->getRepository('test1', null, $namespace);
31
        $actualRepository = RepositoryFactory::factory('test1');
32
        $this->assertEquals($expectedRepository, $actualRepository);
33
    }
34
35
    public function testInvalidFactory()
36
    {
37
        $this->expectExceptionMessage('The guillermo repository does not exist');
38
        RepositoryFactory::factory('guillermo');
39
    }
40
41
    private function getRepository(string $alias, $options = null, string $namespace = 'App\Repositories')
42
    {
43
        $className = ucfirst($alias) . 'Repository';
44
        $repository = $this->getMockForAbstractClass(
45
            AbstractRepository::class,
46
            [$options],
47
            $className
48
        );
49
        class_alias($className, sprintf('%s\%s', $namespace, $className));
50
        return $repository;
51
    }
52
}
53