UtilsTest::amountConversionProvider()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 20
rs 9.6666
cc 1
nc 1
nop 0
1
<?php declare(strict_types=1);
2
3
namespace OfxParserTest;
4
5
use PHPUnit\Framework\TestCase;
6
use OfxParser\Utils;
7
8
/**
9
 * Fake class for DateTime callback.
10
 */
11
final class MyDateTime extends \DateTime { }
12
13
/**
14
 * @covers OfxParser\Utils
15
 */
16
final class UtilsTest extends TestCase
17
{
18
    /**
19
     * @return array<int, array<string|float>>
20
     */
21
    public function amountConversionProvider(): array
22
    {
23
        return [
24
            '1000.00' => ['1000.00', 1000.0],
25
            '1000,00' => ['1000,00', 1000.0],
26
            '1,000.00' => ['1,000.00', 1000.0],
27
            '1.000,00' => ['1.000,00', 1000.0],
28
            '-1000.00' => ['-1000.00', -1000.0],
29
            '-1000,00' => ['-1000,00', -1000.0],
30
            '-1,000.00' => ['-1,000.00', -1000.0],
31
            '-1.000,00' => ['-1.000,00', -1000.0],
32
            '1' => ['1', 1.0],
33
            '10' => ['10', 10.0],
34
            '100' => ['100', 1.0], // @todo this is weird behaviour, should not really expect this
35
            '+1' => ['+1', 1.0],
36
            '+10' => ['+10', 10.0],
37
            '+1000.00' => ['+1000.00', 1000.0],
38
            '+1000,00' => ['+1000,00', 1000.0],
39
            '+1,000.00' => ['+1,000.00', 1000.0],
40
            '+1.000,00' => ['+1.000,00', 1000.0],
41
        ];
42
    }
43
44
    /**
45
     * @param string $input
46
     * @param float $output
47
     * @dataProvider amountConversionProvider
48
     */
49
    public function testCreateAmountFromStr(string $input, float $output): void
50
    {
51
        $actual = Utils::createAmountFromStr($input);
52
        self::assertSame($output, $actual);
53
    }
54
55
    public function testCreateDateTimeFromOFXDateFormats(): void
56
    {
57
        // October 5, 2008, at 1:22 and 124 milliseconds pm, Easter Standard Time
58
        $expectedDateTime = new \DateTime('2008-10-05 13:22:00');
59
60
        // Test OFX Date Format YYYYMMDDHHMMSS.XXX[gmt offset:tz name]
61
        $DateTimeOne = Utils::createDateTimeFromStr('20081005132200.124[-5:EST]');
62
        self::assertSame($expectedDateTime->getTimestamp(), $DateTimeOne->getTimestamp());
63
64
        // Test YYYYMMDD
65
        $DateTimeTwo = Utils::createDateTimeFromStr('20081005');
66
        self::assertSame($expectedDateTime->format('Y-m-d'), $DateTimeTwo->format('Y-m-d'));
67
68
        // Test YYYYMMDDHHMMSS
69
        $DateTimeThree = Utils::createDateTimeFromStr('20081005132200');
70
        self::assertSame($expectedDateTime->getTimestamp(), $DateTimeThree->getTimestamp());
71
72
        // Test YYYYMMDDHHMMSS.XXX
73
        $DateTimeFour = Utils::createDateTimeFromStr('20081005132200.124');
74
        self::assertSame($expectedDateTime->getTimestamp(), $DateTimeFour->getTimestamp());
75
76
        // Test empty datetime
77
        $DateTimeFive = Utils::createDateTimeFromStr('');
78
        self::assertNull($DateTimeFive);
79
80
        // Test DateTime factory callback
81
        Utils::$fnDateTimeFactory = function($format) { return new MyDateTime($format); };
82
        $DateTimeSix = Utils::createDateTimeFromStr('20081005');
83
        self::assertSame($expectedDateTime->format('Y-m-d'), $DateTimeSix->format('Y-m-d'));
84
        self::assertInstanceOf(\OfxParserTest\MyDateTime::class, $DateTimeSix);
85
        Utils::$fnDateTimeFactory = null;
86
    }
87
}
88