Completed
Push — uv-index ( 62e649...44d314 )
by Christian
02:10
created

testParseXMLWithIsJsonException()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 9
rs 9.6666
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
/**
3
 * Copyright Zikula Foundation 2014 - Zikula Application Framework
4
 *
5
 * This work is contributed to the Zikula Foundation under one or more
6
 * Contributor Agreements and licensed to You under the following license:
7
 *
8
 * @license GNU/LGPv3 (or at your option any later version).
9
 * @package OpenWeatherMap-PHP-Api
10
 *
11
 * Please see the NOTICE file distributed with this source code for further
12
 * information regarding copyright and licensing.
13
 */
14
15
namespace Cmfcmf\OpenWeatherMap\Tests\OpenWeatherMap;
16
17
use \Cmfcmf\OpenWeatherMap;
18
use Cmfcmf\OpenWeatherMap\Tests\TestFetcher;
19
20
class OpenWeatherMapExceptionTest extends \PHPUnit_Framework_TestCase
21
{
22
    /**
23
     * @var string
24
     */
25
    protected $apiKey;
26
27
    /**
28
     * @var OpenWeatherMap
29
     */
30
    protected $owm;
31
32
    protected function setUp()
33
    {
34
        $this->apiKey = 'unicorn-rainbow';
35
        $this->owm = new OpenWeatherMap($this->apiKey, new TestFetcher(), false, 600);
36
    }
37
38
    /**
39
     * @expectedException \InvalidArgumentException
40
     */
41
    public function testCacheException()
42
    {
43
        new OpenWeatherMap($this->apiKey, null, true, 600);
44
    }
45
46
    /**
47
     * @expectedException \InvalidArgumentException
48
     */
49
    public function testSecondNotNumericException()
50
    {
51
        new OpenWeatherMap($this->apiKey, null, false, 'I am not numeric');
52
    }
53
54
    /**
55
     * @expectedException \InvalidArgumentException
56
     */
57
    public function testGetWeatherForecastException()
58
    {
59
        $days = 20;
60
        $this->owm->getWeatherForecast('Berlin', 'imperial', 'en', '', $days);
61
    }
62
63
    /**
64
     * @expectedException \InvalidArgumentException
65
     */
66
    public function testGetDailyWeatherForecastException()
67
    {
68
        $days = 20;
69
        $this->owm->getDailyWeatherForecast('Berlin', 'imperial', 'en', '', $days);
70
    }
71
72
    /**
73
     * @expectedException \Cmfcmf\OpenWeatherMap\Exception
74
     */
75
    public function testGetWeatherHistoryException()
76
    {
77
        $this->owm->getWeatherHistory('Berlin', new \DateTime('2015-11-01 00:00:00'), 1, 'hour', 'imperial', 'en', '');
78
    }
79
80
    /**
81
     * @expectedException \Cmfcmf\OpenWeatherMap\Exception
82
     */
83
    public function testGetWeatherHistoryWithEndException()
84
    {
85
        $this->owm->getWeatherHistory('Berlin', new \DateTime('2015-11-01 00:00:00'), new \DateTime('now'), 'hour', 'imperial', 'en', '');
0 ignored issues
show
Documentation introduced by
new \DateTime('now') is of type object<DateTime>, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
86
    }
87
88
     /**
89
      * @expectedException \InvalidArgumentException
90
      */
91
    public function testGetWeatherHistoryInvalidArgumentException()
92
    {
93
        $this->owm->getWeatherHistory('Berlin', new \DateTime('now'), 1, 'wrong-type', 'imperial', 'en', '');
94
    }
95
96
    /**
97
     * @expectedException \InvalidArgumentException
98
     */
99
    public function testGetRawDailyForecastDataInvalidArgumentException()
100
    {
101
        $this->owm->getRawDailyForecastData('Berlin', 'imperial', 'en', '', 'xml', 20);
102
    }
103
104
    /**
105
     * @expectedException \InvalidArgumentException
106
     */
107
    public function testGetRawWeatherHistoryException()
108
    {
109
        $this->owm->getRawWeatherHistory('Berlin', new \DateTime('now'), 1, 'wrong-type', 'imperial', 'en', '');
110
    }
111
112
    /**
113
     * @expectedException \InvalidArgumentException
114
     */
115
    public function testGetRawWeatherHistoryWithEndDateException()
116
    {
117
        $this->owm->getRawWeatherHistory('Berlin', new \DateTime('now'), 'wrong-endOrCount', 'hour', 'imperial', 'en', '');
118
    }
119
120
    /**
121
     * @expectedException \InvalidArgumentException
122
     * @dataProvider      uviExceptionDataProvider
123
     */
124
    public function testGetRawUVIndexWithQueryErrorException($lat, $lon, $dateTime)
125
    {
126
        $this->owm->getRawUVIndexData($lat, $lon, $dateTime);
127
    }
128
129
    /**
130
     * @expectedException \RuntimeException
131
     */
132
    public function testGetRawUVIndexWithoutApiKey()
133
    {
134
        $this->owm->setApiKey(null);
135
        $this->owm->getRawUVIndexData(1.1, 1.1, new \DateTime());
0 ignored issues
show
Documentation introduced by
new \DateTime() is of type object<DateTime>, but the function expects a object<DateTimeInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
136
    }
137
138
    /**
139
     * @expectedException \InvalidArgumentException
140
     */
141
    public function testBuildQueryUrlParameterException()
142
    {
143
        $this->owm->getWeather(true, 'imperial', 'en', '');
0 ignored issues
show
Documentation introduced by
true is of type boolean, but the function expects a array|integer|string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
144
    }
145
146
    /**
147
     * @expectedException \Cmfcmf\OpenWeatherMap\Exception
148
     */
149
    public function testParseXMLException()
150
    {
151
        $answer = 'I am not XML formatted data';
152
        $method = new \ReflectionMethod($this->owm, 'parseXML');
153
        $method->setAccessible(true);
154
        
155
        $method->invoke($this->owm, $answer);
156
    }
157
158
    /**
159
     * @expectedException \Cmfcmf\OpenWeatherMap\Exception
160
     */
161
    public function testParseXMLWithIsJsonException()
162
    {
163
        $answer = array('message' => 'simple json data');
164
        $answer = json_encode($answer);
165
        $method = new \ReflectionMethod($this->owm, 'parseXML');
166
        $method->setAccessible(true);
167
168
        $method->invoke($this->owm, $answer);
169
    }
170
171
    /**
172
     * @expectedException \Cmfcmf\OpenWeatherMap\Exception
173
     */
174
    public function testParseJsonException()
175
    {
176
        $answer = 'I am not a json format data';
177
        $method = new \ReflectionMethod($this->owm, 'parseJson');
178
        $method->setAccessible(true);
179
        
180
        $method->invoke($this->owm, $answer);
181
    }
182
183
    public function uviExceptionDataProvider()
184
    {
185
        return array(
186
            array('error-query-format', 'foo', new \DateTime()),
187
            array(5.4, 1.2, 'foo'),
188
            array(5.4, 12, 'foo'),
189
        );
190
    }
191
}
192