RepositoryFactoryTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 22
dl 0
loc 45
rs 10
c 0
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testFactory() 0 5 1
A testFactoryWithOptions() 0 6 1
A testFactoryWithNamespace() 0 7 1
A getRepository() 0 10 1
A testInvalidFactory() 0 4 1
1
<?php
2
3
namespace GuillermoandraeTest\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
    /**
27
     * @runInSeparateProcess
28
     */
29
    public function testFactoryWithNamespace()
30
    {
31
        $namespace = 'MyApp';
32
        RepositoryFactory::setNamespace($namespace);
33
        $expectedRepository = $this->getRepository('test1', null, $namespace);
34
        $actualRepository = RepositoryFactory::factory('test1');
35
        $this->assertEquals($expectedRepository, $actualRepository);
36
    }
37
38
    public function testInvalidFactory()
39
    {
40
        $this->expectExceptionMessage('The guillermo repository does not exist');
41
        RepositoryFactory::factory('guillermo');
42
    }
43
44
    private function getRepository(string $alias, $options = null, string $namespace = 'App\Repositories')
45
    {
46
        $className = ucfirst($alias) . 'Repository';
47
        $repository = $this->getMockForAbstractClass(
48
            AbstractRepository::class,
49
            [$options],
50
            $className
51
        );
52
        class_alias($className, sprintf('%s\%s', $namespace, $className));
53
        return $repository;
54
    }
55
}
56