Passed
Push — master ( e1c5c8...a48a63 )
by Guillermo A.
08:16
created

RepositoryFactoryTest::testFactoryWithOptions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
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