Passed
Pull Request — main (#8)
by Alex
03:11 queued 01:35
created

MoneyTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 73
rs 10
c 0
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testGivenValidDataItReturnsAValidMoneyVO() 0 16 1
A dataProvider() 0 6 1
A testGivenTwoEqualMoneysEqualReturnsTrue() 0 11 1
A testGivenTwoNotEqualMoneysByAmountEqualReturnsFalse() 0 11 1
A testGivenTwoNotEqualMoneysByCurrencyEqualReturnsFalse() 0 11 1
1
<?php
2
3
namespace StraTDeS\VO\Tests\Single;
4
5
use StraTDeS\VO\Single\Currency;
6
use StraTDeS\VO\Single\Money;
7
use PHPUnit\Framework\TestCase;
8
9
class MoneyTest extends TestCase
10
{
11
    public function dataProvider(): array
12
    {
13
        return [
14
            [12456, 124.56, Currency::fromValue(Currency::EUR), 'EUR 124.56'],
15
            [2346656, 23466.56, Currency::fromValue(Currency::USD), 'USD 23,466.56'],
16
            [536435345, 53643.5345, Currency::fromValue(Currency::UYW), 'UYW 53,643.5345'],
17
        ];
18
    }
19
20
    /**
21
     * @dataProvider dataProvider
22
     * @param int $amount
23
     * @param float $amountFloat
24
     * @param Currency $currency
25
     * @param string $formatted
26
     */
27
    public function testGivenValidDataItReturnsAValidMoneyVO(
28
        int $amount,
29
        float $amountFloat,
30
        Currency $currency,
31
        string $formatted
32
    ): void
33
    {
34
        // Act
35
        $money = Money::create($amount, $currency);
36
37
        // Assert
38
        $this->assertInstanceOf(Money::class, $money);
39
        $this->assertEquals($amount, $money->amount());
40
        $this->assertEquals($currency, $money->currency());
41
        $this->assertEquals($amountFloat, $money->amountFloat());
42
        $this->assertEquals($formatted, $money->formatted());
43
    }
44
45
    public function testGivenTwoEqualMoneysEqualReturnsTrue(): void
46
    {
47
        // Arrange
48
        $money1 = Money::create(20000, Currency::fromValue(Currency::EUR));
49
        $money2 = Money::create(20000, Currency::fromValue(Currency::EUR));
50
51
        // Act
52
        $equal = $money1->equal($money2);
53
54
        // Assert
55
        $this->assertTrue($equal);
56
    }
57
58
    public function testGivenTwoNotEqualMoneysByAmountEqualReturnsFalse(): void
59
    {
60
        // Arrange
61
        $money1 = Money::create(20000, Currency::fromValue(Currency::EUR));
62
        $money2 = Money::create(20001, Currency::fromValue(Currency::EUR));
63
64
        // Act
65
        $equal = $money1->equal($money2);
66
67
        // Assert
68
        $this->assertFalse($equal);
69
    }
70
71
    public function testGivenTwoNotEqualMoneysByCurrencyEqualReturnsFalse(): void
72
    {
73
        // Arrange
74
        $money1 = Money::create(20000, Currency::fromValue(Currency::EUR));
75
        $money2 = Money::create(20000, Currency::fromValue(Currency::USD));
76
77
        // Act
78
        $equal = $money1->equal($money2);
79
80
        // Assert
81
        $this->assertFalse($equal);
82
    }
83
}
84