Passed
Push — master ( 43534e...6dc374 )
by Alex
01:15 queued 12s
created

testResolveEventNameWillResolveObjectEventName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
c 0
b 0
f 0
dl 0
loc 7
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ArpTest\EventDispatcher\Resolver;
6
7
use Arp\EventDispatcher\Resolver\EventNameAwareInterface;
8
use Arp\EventDispatcher\Resolver\EventNameResolver;
9
use Arp\EventDispatcher\Resolver\EventNameResolverInterface;
10
use Arp\EventDispatcher\Resolver\Exception\EventNameResolverException;
11
use PHPUnit\Framework\TestCase;
12
13
/**
14
 * @author  Alex Patterson <[email protected]>
15
 * @package ArpTest\EventDispatcher\Resolver
16
 */
17
final class EventNameProviderTest extends TestCase
18
{
19
    /**
20
     * Assert that the EventNameResolver implements EventNameResolverInterface
21
     *
22
     * @covers \Arp\EventDispatcher\Resolver\EventNameResolver
23
     */
24
    public function testImplementsEventNameResolverInterface(): void
25
    {
26
        $resolver = new EventNameResolver();
27
28
        $this->assertInstanceOf(EventNameResolverInterface::class, $resolver);
29
    }
30
31
    /**
32
     * Assert that when providing a string to resolveEventName() we will return the same string.
33
     *
34
     * @param string $eventName The event name string to test.
35
     *
36
     * @dataProvider getResolveEventNameWillResolveStringEventNameData
37
     * @covers \Arp\EventDispatcher\Resolver\EventNameResolver::resolveEventName
38
     */
39
    public function testResolveEventNameWillResolveStringEventName(string $eventName): void
40
    {
41
        $resolver = new EventNameResolver();
42
43
        $this->assertSame($eventName, $resolver->resolveEventName($eventName));
44
    }
45
46
    /**
47
     * @return array
48
     */
49
    public function getResolveEventNameWillResolveStringEventNameData(): array
50
    {
51
        return [
52
            ['FooEvent'],
53
            ['BarEvent'],
54
            ['HelloWorld'],
55
        ];
56
    }
57
58
    /**
59
     * Assert that the class name of the object provided to resolveEventName() will return the FQCN.
60
     *
61
     * @covers \Arp\EventDispatcher\Resolver\EventNameResolver::resolveEventName
62
     */
63
    public function testResolveEventNameWillResolveObjectEventName(): void
64
    {
65
        $resolver = new EventNameResolver();
66
67
        $event = new \stdClass();
68
69
        $this->assertSame(get_class($event), $resolver->resolveEventName($event));
70
    }
71
72
    /**
73
     * Assert that the event name will resolve to the FQCN of the provided object when calling resolveEventName().
74
     *
75
     * @covers \Arp\EventDispatcher\Resolver\EventNameResolver::resolveEventName
76
     */
77
    public function testResolveEventNameWillResolveEventNameAwareEventName(): void
78
    {
79
        $resolver = new EventNameResolver();
80
81
        $eventName = 'FooEvent';
82
        $event = $this->getMockForAbstractClass(EventNameAwareInterface::class);
83
84
        $event->expects($this->once())
85
            ->method('getEventName')
86
            ->willReturn($eventName);
87
88
        $this->assertSame($eventName, $resolver->resolveEventName($event));
89
    }
90
91
    /**
92
     * Assert that a InvalidArgumentException is thrown when passing an invalid argument to resolveEventName().
93
     *
94
     * @covers \Arp\EventDispatcher\Resolver\EventNameResolver::resolveEventName
95
     */
96
    public function testResolveEventNameWillThrowInvalidArgumentException(): void
97
    {
98
        $resolver = new EventNameResolver();
99
100
        $event = 1.1; // float is invalid.
101
102
        $this->expectException(EventNameResolverException::class);
103
        $this->expectExceptionMessage(sprintf(
104
            'The \'event\' argument must be of type \'string\' or \'object\'; \'%s\' provided in \'%s::%s\'.',
105
            gettype($event),
106
            EventNameResolver::class,
107
            'resolveEventName'
108
        ));
109
110
        $resolver->resolveEventName($event);
111
    }
112
}
113