Passed
Push — main ( b1fbff...0e72dc )
by Johny
02:35
created

DummyGeneratorTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 111
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 9
eloc 50
dl 0
loc 111
c 0
b 0
f 0
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DummyGenerator\Test\Generator;
6
7
use DummyGenerator\Container\DefinitionContainer;
8
use DummyGenerator\Definitions\Exception\DefinitionNotFound;
9
use DummyGenerator\Definitions\Extension\ExtensionInterface;
10
use DummyGenerator\DummyGenerator;
11
use DummyGenerator\Strategy\SimpleStrategy;
12
use DummyGenerator\Strategy\UniqueStrategy;
13
use DummyGenerator\Test\Fixtures\BarProvider;
14
use DummyGenerator\Test\Fixtures\BazProvider;
15
use DummyGenerator\Test\Fixtures\FooProvider;
16
use PHPUnit\Framework\TestCase;
17
18
class DummyGeneratorTest extends TestCase
19
{
20
    public function testCanGetExtensionFromGenerator(): void
21
    {
22
        $container = new DefinitionContainer(['some_name' => fn () => new class implements ExtensionInterface {
23
        }]);
24
25
        $generator = new DummyGenerator($container);
26
27
        self::assertInstanceOf(ExtensionInterface::class, $generator->ext('some_name'));
28
    }
29
30
    public function testMissingExtensionThrowsException(): void
31
    {
32
        $container = new DefinitionContainer([]);
33
34
        $generator = new DummyGenerator($container);
35
36
        $this->expectException(DefinitionNotFound::class);
37
        $generator->ext('some_id');
38
    }
39
40
    public function testParseMagicString(): void
41
    {
42
        $container = new DefinitionContainer([]);
43
        $container->add(FooProvider::class, new FooProvider());
44
45
        $generator = new DummyGenerator($container);
46
47
        $parsed = $generator->parse('this is some {{ foo }} magic!');
48
49
        self::assertEquals('this is some foobar magic!', $parsed);
50
    }
51
52
    public function testParseRegularString(): void
53
    {
54
        $container = new DefinitionContainer([]);
55
        $container->add(FooProvider::class, new FooProvider());
56
57
        $generator = new DummyGenerator($container);
58
59
        self::assertEquals('this is not some magic', $generator->parse('this is not some magic'));
60
    }
61
62
    public function testStrategyChange(): void
63
    {
64
        $generator = new DummyGenerator(new DefinitionContainer([]));
65
66
        self::assertTrue($generator->usedStrategy(SimpleStrategy::class));
67
68
        $uniqueGenerator = $generator->withStrategy(new UniqueStrategy(5));
69
70
        self::assertTrue($generator->usedStrategy(SimpleStrategy::class));
71
        self::assertTrue($uniqueGenerator->usedStrategy(UniqueStrategy::class));
72
    }
73
74
    public function testExtensionProcessing(): void
75
    {
76
        $container = new DefinitionContainer([]);
77
        $container->add(FooProvider::class, new FooProvider());
78
79
        $generator = new DummyGenerator($container);
80
81
        self::assertEquals('foobar', $generator->foo());
82
        self::assertEquals('bazastral', $generator->fooManChu('astral'));
83
    }
84
85
    public function testInvalidMethodProcessing(): void
86
    {
87
        $container = new DefinitionContainer([]);
88
        $container->add(BarProvider::class, new BarProvider());
89
90
        $generator = new DummyGenerator($container);
91
92
        self::assertEquals('bar', $generator->bar());
93
94
        $this->expectException(\InvalidArgumentException::class);
95
        self::assertEquals('barfoo', $generator->barbaz());
96
    }
97
98
    public function testOrderOfAddingMatters(): void
99
    {
100
        $container = new DefinitionContainer([]);
101
        $container->add(FooProvider::class, new FooProvider());
102
        $container->add(BarProvider::class, new BarProvider());
103
104
        $generator = new DummyGenerator($container);
105
106
        self::assertEquals('foo', $generator->bar());
107
108
        $container = new DefinitionContainer([]);
109
        $container->add(BarProvider::class, new BarProvider());
110
        $container->add(FooProvider::class, new FooProvider());
111
112
        $generator = new DummyGenerator($container);
113
114
        self::assertEquals('bar', $generator->bar());
115
    }
116
117
    public function testCanOverwriteExtension(): void
118
    {
119
        $container = new DefinitionContainer([]);
120
        $container->add(FooProvider::class, new FooProvider());
121
        $container->add(FooProvider::class, new BazProvider());
122
123
        $generator = new DummyGenerator($container);
124
125
        self::assertEquals('baz', $generator->baz());
126
127
        $this->expectException(\InvalidArgumentException::class);
128
        self::assertEquals('foobar', $generator->foo());
129
    }
130
}
131