Passed
Push — 1.0.0 ( a05234...c494be )
by Alex
01:28
created

GenderCollectionTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

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

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testGivenValidCurrenciesAValidCurrencyCollectionIsReturned() 0 35 3
A testGivenAValueByOffsetReturnsAValidValue() 0 11 1
A testGivenAnInvalidValueItThrowsAnException() 0 9 1
1
<?php
2
3
namespace StraTDeS\VO\Tests\Collection;
4
5
use StraTDeS\VO\Collection\CurrencyCollection;
6
use PHPUnit\Framework\TestCase;
7
use StraTDeS\VO\Collection\GenderCollection;
8
use StraTDeS\VO\Single\Currency;
9
use StraTDeS\VO\Single\Gender;
10
11
class GenderCollectionTest extends TestCase
12
{
13
    public function testGivenValidCurrenciesAValidCurrencyCollectionIsReturned(): void
14
    {
15
        // Arrange
16
        $gender1 = Gender::fromValue(Gender::MALE);
17
        $gender2 = Gender::fromValue(Gender::FEMALE);
18
        $gender3 = Gender::fromValue(Gender::MALE);
19
        $genderArray = [
20
            $gender1,
21
            $gender2,
22
            $gender3
23
        ];
24
25
        // Act
26
        $genderCollection = GenderCollection::create();
27
        $genderCollection->add($gender1);
28
        $genderCollection->add($gender2);
29
        $genderCollection->add($gender3);
30
31
        // Assert
32
        $this->assertInstanceOf(GenderCollection::class, $genderCollection);
33
        $this->assertEquals($gender1, $genderCollection[0]);
34
        $this->assertEquals($gender2, $genderCollection[1]);
35
        $this->assertEquals($gender3, $genderCollection[2]);
36
        $this->assertEquals(
37
            $genderArray,
38
            $genderCollection->items()
39
        );
40
        $this->assertEquals(3, count($genderCollection));
41
42
        for($i = 0; $i < 3; $i++) {
43
            $this->assertEquals($genderArray[$i], $genderCollection[$i]);
44
        }
45
46
        foreach($genderCollection as $key => $currency) {
47
            $this->assertInstanceOf(Gender::class, $currency);
48
        }
49
    }
50
51
    public function testGivenAValueByOffsetReturnsAValidValue(): void
52
    {
53
        // Arrange
54
        $gender1 = Gender::fromValue(Gender::MALE);
55
56
        // Act
57
        $genderCollection = GenderCollection::create();
58
        $genderCollection[0] = $gender1;
59
60
        // Assert
61
        $this->assertEquals($gender1, $genderCollection[0]);
62
    }
63
64
    public function testGivenAnInvalidValueItThrowsAnException(): void
65
    {
66
        $this->expectException(\InvalidArgumentException::class);
67
        $this->expectExceptionMessage("Provided value is not a valid " . Gender::class);
68
69
        $gender1 = new \stdClass();
70
71
        $genderCollection = GenderCollection::create();
72
        $genderCollection->add($gender1);
73
    }
74
}
75