ResourceRegistryBuilderTest::testHasResource()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 6
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gorynych\Tests\Resource;
6
7
use Gorynych\Resource\ResourceRegistryBuilder;
8
use PHPUnit\Framework\TestCase;
9
use Symfony\Component\Config\FileLocator;
10
11
class ResourceRegistryBuilderTest extends TestCase
12
{
13
    public function testHasResource(): void
14
    {
15
        $builder = $this->setUpBuilder();
16
17
        $this->assertTrue($builder->hasResource('TestResource'));
18
        $this->assertFalse($builder->hasResource('FooResource'));
19
    }
20
21
    public function testAppendsResource(): void
22
    {
23
        $this->assertTrue(
24
            $this->setUpBuilder()->appendResource('FooResource')->hasResource('FooResource')
25
        );
26
    }
27
28
    /**
29
     * @dataProvider provideOperationsToMerge
30
     * @param string[] $operationsToMerge
31
     * @param string[] $expectedOperations
32
     */
33
    public function testMergesOperations(array $operationsToMerge, array $expectedOperations): void
34
    {
35
        $builder = $this->setUpBuilder();
36
        $builder->selectResource('TestResource')->mergeOperations(...$operationsToMerge);
37
38
        $this->assertSame($expectedOperations, $builder->getRegistry()['TestResource']);
39
    }
40
41
    public function testThrowsBadMethodCallOnNotSelectedResource(): void
42
    {
43
        $this->expectException(\BadMethodCallException::class);
44
45
        $this->setUpBuilder()->mergeOperations('FooOperation', 'BarOperations');
46
    }
47
48
    /**
49
     * @return \Generator<array>
50
     */
51
    public function provideOperationsToMerge(): \Generator
52
    {
53
        yield 'two new operations' => [
54
            ['FooOperation', 'BarOperation'],
55
            ['TestOperation', 'FooOperation', 'BarOperation'],
56
        ];
57
58
        yield 'one new operation and one already registered' => [
59
            ['TestOperation', 'FooOperation'],
60
            ['TestOperation', 'FooOperation'],
61
        ];
62
    }
63
64
    private function setUpBuilder(): ResourceRegistryBuilder
65
    {
66
        return new ResourceRegistryBuilder(new FileLocator(__DIR__ . '/Resource'));
67
    }
68
}
69