Passed
Branch master (e17e02)
by Jacques
02:12
created

UtilsTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
eloc 37
c 1
b 0
f 0
dl 0
loc 67
rs 10

3 Methods

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