Completed
Branch master (4d68bf)
by John
02:46
created

FieldParserDateOffsetTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 112
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 70
dl 0
loc 112
rs 10
c 0
b 0
f 0
wmc 5
1
<?php
2
3
namespace Graze\CiffRenderer\Test\Parser\FieldParser;
4
5
use Mockery as m;
6
use Graze\CiffRenderer\Test\AbstractFieldParserTest;
7
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDateOffset;
8
use \SimpleXMLElement;
9
use \DateTimeImmutable;
10
use Graze\CiffRenderer\DateFormatter\DateFormatterInterface;
11
use Graze\CiffRenderer\DateFormatter\DateFormatterFactory;
12
13
class FieldParserDateOffsetTest extends AbstractFieldParserTest
14
{
15
    /**
16
     * @var DateTimeImmutable
17
     */
18
    private $dateTimeNow;
19
20
    /**
21
     * @var DateFormatterFactory
22
     */
23
    private $dateFormatterFactory;
24
25
    public function setUp()
26
    {
27
        $this->dateTimeNow = m::mock(DateTimeImmutable::class);
28
        $this->dateFormatterFactory = m::mock(DateFormatterFactory::class);
29
30
        parent::setUp();
31
    }
32
33
    /**
34
     * @return SimpleXMLElement
35
     */
36
    private function getXmlField()
37
    {
38
        return new SimpleXMLElement(
39
            '<Field Name="i am field name">
40
                <FldType>OffsetDateText</FldType>
41
                <Displayed>1</Displayed>
42
                <X>4200</X>
43
                <Y>250</Y>
44
                <W>3775</W>
45
                <H>450</H>
46
                <Ln>1</Ln>
47
                <CalcData><![CDATA[31/07/18]]></CalcData>
48
                <Data>
49
                    <Object Static="0" Parse="1">
50
                        <DataType>3</DataType>
51
                        <Default><![CDATA[i am date format]]></Default>
52
                        <OffsetDate SrcOffset="lifetime"/>
53
                    </Object>
54
                </Data>
55
                <Text>
56
                    <Font>
57
                        <Pitch>10</Pitch>
58
                    </Font>
59
                </Text>
60
            </Field>'
61
        );
62
    }
63
64
    /**
65
     * @return FieldParserDateOffset
66
     */
67
    protected function getParser()
68
    {
69
        if (!$this->parser) {
70
            // we require a more complex header for this test as the DateOffset is used
71
            $xmlHeader = new SimpleXMLElement(
72
                '<Header>
73
                    <DateOffset Name="lifetime">
74
                        <DefaultOffset>
75
                            <Day>130</Day>
76
                        </DefaultOffset>
77
                    </DateOffset>
78
                </Header>'
79
            );
80
81
            $this->parser = new FieldParserDateOffset(
82
                $this->dateTimeNow,
83
                $this->dateFormatterFactory,
84
                $this->fieldParserRegistry,
85
                $xmlHeader,
86
                $this->getXmlField(),
87
                $this->scale
88
            );
89
        }
90
91
        return $this->parser;
92
    }
93
94
    public function testGetText()
95
    {
96
        $offsetDays = 130;
97
        $offset = new \DateInterval('P' . $offsetDays . 'D');
98
99
        $dateOffset = m::mock(\DateTime::class);
100
        $this->dateTimeNow
101
            ->shouldReceive('add')
102
            ->with(equalTo($offset))
103
            ->andReturn($dateOffset)
104
            ->once()
105
            ->getMock();
106
107
        $dateFormat = 'i am date format';
108
109
        $text = 'i am text';
110
        $dateFormatter = m::mock(DateFormatterInterface::class)
111
            ->shouldReceive('format')
112
            ->with($dateOffset, $dateFormat)
113
            ->andReturn($text)
114
            ->once()
115
            ->getMock();
116
117
        $this->dateFormatterFactory
118
            ->shouldReceive('getFormatter')
119
            ->with($dateFormat)
120
            ->andReturn($dateFormatter)
121
            ->getMock();
122
123
        $this->assertEquals($text, $this->parser->getText());
124
    }
125
}
126