Passed
Pull Request — main (#37)
by Jesús
11:23 queued 08:20
created

test_single_optional_parameter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 5
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace GacelaTest\Unit\Router\Validators;
6
7
use Gacela\Router\Validators\PathPatternGenerator;
8
use PHPUnit\Framework\TestCase;
9
10
final class PathPatternGeneratorTest extends TestCase
11
{
12
    public function test_empty_path_returns_root_pattern(): void
13
    {
14
        $pattern = PathPatternGenerator::generate('');
15
16
        self::assertSame('#^/?$#', $pattern);
17
    }
18
19
    public function test_simple_static_path(): void
20
    {
21
        $pattern = PathPatternGenerator::generate('users');
22
23
        self::assertSame('#^/users$#', $pattern);
24
    }
25
26
    public function test_single_mandatory_parameter(): void
27
    {
28
        $pattern = PathPatternGenerator::generate('users/{id}');
29
30
        self::assertSame('#^/users/([^\/]+)$#', $pattern);
31
    }
32
33
    public function test_single_optional_parameter(): void
34
    {
35
        $pattern = PathPatternGenerator::generate('users/{id?}');
36
37
        self::assertSame('#^/users/?([^\/]+)?$#', $pattern);
38
    }
39
40
    public function test_multiple_mandatory_parameters(): void
41
    {
42
        $pattern = PathPatternGenerator::generate('posts/{postId}/comments/{commentId}');
43
44
        self::assertSame('#^/posts/([^\/]+)/comments/([^\/]+)$#', $pattern);
45
    }
46
47
    public function test_mixed_mandatory_and_optional_parameters(): void
48
    {
49
        $pattern = PathPatternGenerator::generate('posts/{id}/comments/{commentId?}');
50
51
        self::assertSame('#^/posts/([^\/]+)/comments/?([^\/]+)?$#', $pattern);
52
    }
53
}
54