Test Setup Failed
Push — master ( d1af2b...414f7e )
by Andrey
03:32
created

ExchangeRatesProviderTest   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 136
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 11
c 1
b 0
f 0
lcom 1
cbo 4
dl 0
loc 136
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getProvider() 0 5 1
A testGetAllRatesExchanges() 0 13 2
A testGetRatesExchanges() 0 20 3
A testGetRateExchange() 0 17 2
A testGetRatesExchangesDynamic() 0 22 2
A assertRate() 0 9 1
1
<?php
2
/**
3
 * (c) itmedia.by <[email protected]>
4
 */
5
6
namespace Submarine\NbrbExchangeRatesBundle\Tests\Provider;
7
8
9
use Submarine\NbrbExchangeRatesBundle\Client\ApiClient;
10
use Submarine\NbrbExchangeRatesBundle\Exception\UndefinedCurrencyException;
11
use Submarine\NbrbExchangeRatesBundle\ExchangeRate;
12
use Submarine\NbrbExchangeRatesBundle\Provider\ExchangeRatesProvider;
13
use Submarine\NbrbExchangeRatesBundle\Tests\Client\ApiClientTest;
14
15
class ExchangeRatesProviderTest extends \PHPUnit_Framework_TestCase
16
{
17
18
    private function getProvider()
19
    {
20
        $apiClient = new ApiClient(ApiClientTest::URL_RATES, ApiClientTest::URL_RATES_DYNAMIC, 3, 3);
21
        return new ExchangeRatesProvider($apiClient, true, false);
22
    }
23
24
25
    private $ratesList = [
26
        'USD' => [
27
            'code' => 'USD',
28
            'num_code' => 840,
29
            'scale' => 1,
30
            'name' => 'Доллар США',
31
            'rate' => 19958
32
        ],
33
        'EUR' => [
34
            'code' => 'EUR',
35
            'num_code' => 978,
36
            'scale' => 1,
37
            'name' => 'Евро',
38
            'rate' => 22747
39
        ],
40
        'PLN' => [
41
            'code' => 'PLN',
42
            'num_code' => 985,
43
            'scale' => 1,
44
            'name' => 'Злотый',
45
            'rate' => 5305.16
46
        ],
47
    ];
48
49
    private $dynamicRates = [
50
        'USD' => [
51
            '04/12/2016' => 19958,
52
            '04/13/2016' => 19864,
53
            '04/14/2016' => 19849,
54
            '04/15/2016' => 19989,
55
            '04/16/2016' => 19907,
56
        ]
57
    ];
58
59
60
    public function testGetAllRatesExchanges()
61
    {
62
        $provider = $this->getProvider();
63
64
        $date = new \DateTime();
65
        $date->setDate(2016, 4, 12);
66
        $rates = $provider->getAllRatesExchanges($date);
67
68
        foreach ($this->ratesList as $key => $value) {
69
            $rate = $rates[$key];
70
            $this->assertRate($rate, $date, $value);
71
        }
72
    }
73
74
75
    public function testGetRatesExchanges()
76
    {
77
        $provider = $this->getProvider();
78
79
        $date = new \DateTime();
80
        $date->setDate(2016, 4, 12);
81
        $rates = $provider->getRatesExchanges(['USD', 'PLN'], $date);
82
        foreach ($rates as $rate) {
83
            $pattern = $this->ratesList[$rate->getCharCode()];
84
            $this->assertRate($rate, $date, $pattern);
85
        }
86
87
        // Fail
88
        try {
89
            $provider->getRatesExchanges(['USD', 'HUI'], $date);
90
            $this->assertTrue(false);
91
        } catch (UndefinedCurrencyException $exc) {
92
            $this->assertTrue(true);
93
        }
94
    }
95
96
97
    public function testGetRateExchange()
98
    {
99
        $provider = $this->getProvider();
100
101
        $date = new \DateTime();
102
        $date->setDate(2016, 4, 12);
103
        $rate = $provider->getRateExchange('USD', $date);
104
        $this->assertRate($rate, $date, $this->ratesList['USD']);
105
106
        // Fail
107
        try {
108
            $provider->getRateExchange('HUI', $date);
109
            $this->assertTrue(false);
110
        } catch (UndefinedCurrencyException $exc) {
111
            $this->assertTrue(true);
112
        }
113
    }
114
115
116
    public function testGetRatesExchangesDynamic()
117
    {
118
        $provider = $this->getProvider();
119
120
        $start = new \DateTime();
121
        $start->setDate(2016, 4, 12);
122
123
        $end = new \DateTime();
124
        $end->setDate(2016, 4, 16);
125
126
        $code = 'USD';
127
        $rates = $provider->getRatesExchangesDynamic($code, $start, $end);
128
129
        foreach ($rates as $rate) {
130
            $date = $rate->getDate()->format('m/d/Y');
131
132
            $this->assertTrue(isset($this->dynamicRates[$code][$date]));
133
            $this->assertTrue($rate->getRate() == $this->dynamicRates[$code][$date]);
134
        }
135
136
137
    }
138
139
140
    private function assertRate(ExchangeRate $rate, \DateTime $date, $value)
141
    {
142
        $this->assertTrue($rate->getNumCode() === $value['num_code']);
143
        $this->assertTrue($rate->getScale() === $value['scale']);
144
        $this->assertTrue($rate->getName() === $value['name']);
145
        $this->assertTrue($rate->getRate() == $value['rate']);
146
        $this->assertTrue($rate->getCharCode() === $value['code']);
147
        $this->assertTrue($rate->getDate()->format('dmy') === $date->format('dmy'));
148
    }
149
150
}