SlugTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 22
dl 0
loc 62
rs 10
c 2
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testGivenAValidSlugAValidVOIsReturned() 0 11 1
A badSlugDataProvider() 0 8 1
A testGivenTwoNotEqualSlugsEqualReturnsFalse() 0 11 1
A testGivenTwoEqualSlugsEqualReturnsTrue() 0 11 1
A testGivenAnInvalidSlugAnExceptionIsThrown() 0 6 1
1
<?php
2
3
namespace StraTDeS\VO\Tests\Single;
4
5
use PHPUnit\Framework\TestCase;
6
use StraTDeS\VO\Single\Slug;
7
8
class SlugTest extends TestCase
9
{
10
    public function testGivenAValidSlugAValidVOIsReturned(): void
11
    {
12
        // Arrange
13
        $slug = "this-is-a-valid-slug";
14
15
        // Act
16
        $slugVO = Slug::fromValue($slug);
17
18
        // Assert
19
        $this->assertInstanceOf(Slug::class, $slugVO);
20
        $this->assertEquals($slug, $slugVO->value());
21
    }
22
23
    public function badSlugDataProvider(): array
24
    {
25
        return [
26
            ['THIS-IS-NOT-AN-SLUG'],
27
            ['$-IS-NOT-AN-SLUG'],
28
            ['THIS IS NOT AN SLUG'],
29
            ['this is not an slug'],
30
            ['THIS-IS-NOT-AN-SLUG'],
31
        ];
32
    }
33
34
    /**
35
     * @dataProvider badSlugDataProvider
36
     * @param string $slug
37
     */
38
    public function testGivenAnInvalidSlugAnExceptionIsThrown(string $slug): void
39
    {
40
        $this->expectException(\InvalidArgumentException::class);
41
        $this->expectExceptionMessage("$slug is not a valid slug. Only lowercase, letters, numbers and dashes are allowed.");
42
43
        Slug::fromValue($slug);
44
    }
45
46
    public function testGivenTwoEqualSlugsEqualReturnsTrue(): void
47
    {
48
        // Arrange
49
        $slug1 = Slug::fromValue("this-is-a-valid-slug");
50
        $slug2 = Slug::fromValue("this-is-a-valid-slug");
51
52
        // Act
53
        $equal = $slug1->equal($slug2);
54
55
        // Assert
56
        $this->assertTrue($equal);
57
    }
58
59
    public function testGivenTwoNotEqualSlugsEqualReturnsFalse(): void
60
    {
61
        // Arrange
62
        $slug1 = Slug::fromValue("this-is-a-valid-slug");
63
        $slug2 = Slug::fromValue("this-is-a-different-slug");
64
65
        // Act
66
        $equal = $slug1->equal($slug2);
67
68
        // Assert
69
        $this->assertFalse($equal);
70
    }
71
}
72