Passed
Push — master ( 3949e5...920751 )
by Maurício
08:08
created

TriggerNameTest::testValidName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpMyAdmin\Tests\Triggers;
6
7
use PhpMyAdmin\Triggers\InvalidTriggerName;
8
use PhpMyAdmin\Triggers\TriggerName;
9
use PHPUnit\Framework\TestCase;
10
11
use function str_repeat;
12
13
/**
14
 * @covers \PhpMyAdmin\Triggers\InvalidTriggerName
15
 * @covers \PhpMyAdmin\Triggers\TriggerName
16
 */
17
final class TriggerNameTest extends TestCase
18
{
19
    /** @dataProvider providerForTestValidNames */
20
    public function testValidName(string $validName): void
21
    {
22
        $name = TriggerName::fromValue($validName);
23
        $this->assertEquals($validName, $name->getName());
24
        $this->assertEquals($validName, (string) $name);
25
    }
26
27
    /** @dataProvider providerForTestValidNames */
28
    public function testTryFromValueValidName(string $validName): void
29
    {
30
        $name = TriggerName::tryFromValue($validName);
31
        $this->assertNotNull($name);
32
        $this->assertEquals($validName, $name->getName());
33
        $this->assertEquals($validName, (string) $name);
34
    }
35
36
    /** @return iterable<int, string[]> */
37
    public static function providerForTestValidNames(): iterable
38
    {
39
        yield ['name'];
40
        yield ['0'];
41
        yield [str_repeat('a', 64)];
42
    }
43
44
    /** @dataProvider providerForTestInvalidNames */
45
    public function testInvalidNames(mixed $name, string $exceptionMessage): void
46
    {
47
        $this->assertNull(TriggerName::tryFromValue($name));
48
        $this->expectException(InvalidTriggerName::class);
49
        $this->expectExceptionMessage($exceptionMessage);
50
        TriggerName::fromValue($name);
51
    }
52
53
    /**
54
     * @return iterable<string, mixed[]>
55
     * @psalm-return iterable<string, array{mixed, non-empty-string}>
56
     */
57
    public static function providerForTestInvalidNames(): iterable
58
    {
59
        yield 'null' => [null, 'The trigger name must not be empty.'];
60
        yield 'integer' => [1, 'The trigger name must not be empty.'];
61
        yield 'array' => [['trigger_name'], 'The trigger name must not be empty.'];
62
        yield 'empty string' => ['', 'The trigger name must not be empty.'];
63
        yield 'too long name' => [str_repeat('a', 65), 'The trigger name cannot be longer than 64 characters.'];
64
        yield 'trailing space' => ['a ', 'The trigger name cannot end with a space character.'];
65
    }
66
}
67