http://www.phing.info/

Source Code Coverage

Designed for use with PHPUnit, Xdebug and Phing.

Methods: 8 LOC: 285 Statements: 125
Legend: executednot executeddead code
Source file Statements Methods Total coverage
CriterionTest.php 100.0% 62.5% 97.7%
   
1
<?php
2
/**
3
 * Unit test class for Searching through changesets with Criterion objects.
4
 *
5
 * PHP Version 5
6
 *
7
 * @category   Services
8
 * @package    Services_OpenStreetMap
9
 * @subpackage UnitTesting
10
 * @author     Ken Guest <kguest@php.net>
11
 * @license    BSD http://www.opensource.org/licenses/bsd-license.php
12
 * @version    Release: @package_version@
13
 * @link       CriterionTest.php
14
 */
15
16
$version = '@package_version@';
17
if (strstr($version, 'package_version')) {
18
    set_include_path(dirname(dirname(__FILE__)) . ':' . get_include_path());
19
}
20
21
require_once 'Services/OpenStreetMap.php';
22
23
require_once 'HTTP/Request2.php';
24
require_once 'HTTP/Request2/Adapter/Mock.php';
25
require_once 'PHPUnit/Framework/TestCase.php';
26
27
28
/**
29
 * Unit test class for searching through changesets using Criterion objects.
30
 *
31
 * @category   Services
32
 * @package    Services_OpenStreetMap
33
 * @subpackage UnitTesting
34
 * @author     Ken Guest <kguest@php.net>
35
 * @license    BSD http://www.opensource.org/licenses/bsd-license.php
36
 * @link       CriterionTest.php
37
 */
38
class CriterionTest extends PHPUnit_Framework_TestCase
39
{
40
    /**
41
     * Search by user id.
42
     *
43
     * @return void
44
     */
45
    public function testSearchByUser()
46
    {
47 1
        $mock = new HTTP_Request2_Adapter_Mock();
48 1
        $mock->addResponse(fopen(__DIR__ . '/responses/capabilities.xml', 'rb'));
49 1
        $mock->addResponse(fopen(__DIR__ . '/responses/changesets_11324.xml', 'rb'));
50
51
        $config = array(
52 1
            'adapter' => $mock,
53
            'server'  => 'http://api06.dev.openstreetmap.org/'
54 1
        );
55 1
        $osm = new Services_OpenStreetMap($config);
56 1
        $changesets = $osm->searchChangesets(
57 1
            array(new Services_OpenStreetMap_Criterion('user', 11324))
58 1
        );
59 1
        $this->assertInstanceOf('Services_OpenStreetMap_Changesets', $changesets);
60 1
        $diff = false;
61 1
        foreach ($changesets as $changeset) {
62 1
            if ($changeset->getUid() != 11324) {
63
                $diff = true;
64
            }
65 1
        }
66 1
        $this->assertFalse($diff, 'Unexpected UID present in changeset data');
67
    }
68
69
    /**
70
     * Searching by an unrecognised constraint type ('uid') should throw an
71
     * exception.
72
     *
73
     * @expectedException        Services_OpenStreetMap_InvalidArgumentException
74
     * @expectedExceptionMessage Unknown constraint type
75
     *
76
     * @return void
77
     */
78
    public function testSearchInvalid()
79
    {
80 1
        $mock = new HTTP_Request2_Adapter_Mock();
81 1
        $mock->addResponse(fopen(__DIR__ . '/responses/capabilities.xml', 'rb'));
82
83
        $config = array(
84 1
            'adapter'  => $mock,
85 1
            'server'   => 'http://api06.dev.openstreetmap.org/',
86 1
        );
87 1
        $osm = new Services_OpenStreetMap($config);
88 1
        $changesets = $osm->searchChangesets(
89 1
            array(new Services_OpenStreetMap_Criterion('uid', 11324))
90
        );
91
    }
92
93
    /**
94
     * Search by a user's display_name.
95
     *
96
     * @return void
97
     */
98
    public function testSearchByDisplayName()
99
    {
100 1
        $mock = new HTTP_Request2_Adapter_Mock();
101 1
        $mock->addResponse(fopen(__DIR__ . '/responses/capabilities.xml', 'rb'));
102 1
        $mock->addResponse(fopen(__DIR__ . '/responses/changesets_11324.xml', 'rb'));
103
104
        $config = array(
105 1
            'adapter'  => $mock,
106 1
            'server'   => 'http://api06.dev.openstreetmap.org/',
107 1
        );
108 1
        $osm = new Services_OpenStreetMap($config);
109 1
        $changesets = $osm->searchChangesets(
110 1
            array(new Services_OpenStreetMap_Criterion('display_name', 'kenguest'))
111 1
        );
112 1
        $this->assertInstanceOf('Services_OpenStreetMap_Changesets', $changesets);
113
    }
114
115
    /**
116
     * Check that an exception is thrown if attempting to search by both
117
     * user id and display_name
118
     *
119
     * @expectedException        Services_OpenStreetMap_RuntimeException
120
     * @expectedExceptionMessage Can't supply both user and display_name criteria
121
     *
122
     * @return void
123
     */
124
    public function testSearchByDisplayNameAndUser()
125
    {
126 1
        $mock = new HTTP_Request2_Adapter_Mock();
127 1
        $mock->addResponse(fopen(__DIR__ . '/responses/capabilities.xml', 'rb'));
128 1
        $mock->addResponse(fopen(__DIR__ . '/responses/changesets_11324.xml', 'rb'));
129
130
        $config = array(
131 1
            'adapter'  => $mock,
132 1
            'server'   => 'http://api06.dev.openstreetmap.org/',
133 1
        );
134 1
        $osm = new Services_OpenStreetMap($config);
135 1
        $displayName = new Services_OpenStreetMap_Criterion(
136 1
            'display_name',
137
            'kenguest'
138 1
        );
139 1
        $this->assertEquals($displayName->type(), 'display_name');
140 1
        $user = new Services_OpenStreetMap_Criterion('user', 11324);
141 1
        $changesets = $osm->searchChangesets(array($displayName, $user));
142
        $this->assertInstanceOf('Services_OpenStreetMap_Changesets', $changesets);
143
    }
144
145
    /**
146
     * Search for changesets focused on a specific area/bounding box.
147
     *
148
     * @return void
149
     */
150
    public function testSearchByBbox()
151
    {
152 1
        $mock = new HTTP_Request2_Adapter_Mock();
153 1
        $mock->addResponse(fopen(__DIR__ . '/responses/capabilities.xml', 'rb'));
154 1
        $mock->addResponse(fopen(__DIR__ . '/responses/changesets_11324.xml', 'rb'));
155
156
        $config = array(
157 1
            'adapter' => $mock,
158 1
            'server'  => 'http://api06.dev.openstreetmap.org/',
159 1
        );
160 1
        $osm = new Services_OpenStreetMap($config);
161 1
        $changesets = $osm->searchChangesets(
162
            array(
163 1
                new Services_OpenStreetMap_Criterion(
164 1
                    'bbox',
165 1
                    -8.0590275,
166 1
                    52.9347449,
167 1
                    -7.9966939,
168
                    52.9611999
169 1
                )
170 1
            )
171 1
        );
172 1
        $this->assertInstanceOf('Services_OpenStreetMap_Changesets', $changesets);
173
    }
174
175
    /**
176
     * test searching on multiple criteria: changesets by specific user id,
177
     * focused on a certain area (bbox) which have been closed.
178
     *
179
     * @return void
180
     */
181
    public function testSearchByMultipleCriteria()
182
    {
183 1
        $mock = new HTTP_Request2_Adapter_Mock();
184 1
        $mock->addResponse(fopen(__DIR__ . '/responses/capabilities.xml', 'rb'));
185 1
        $mock->addResponse(fopen(__DIR__ . '/responses/changesets_11324.xml', 'rb'));
186
187
        $config = array(
188 1
            'adapter'  => $mock,
189 1
            'server'   => 'http://api06.dev.openstreetmap.org/',
190 1
        );
191 1
        $osm = new Services_OpenStreetMap($config);
192
193 1
        $user = new Services_OpenStreetMap_Criterion('user', 11324);
194 1
        $this->assertEquals($user->type(), 'user');
195 1
        $this->assertEquals($user->query(), 'user=11324');
196
197 1
        $bbox = new Services_OpenStreetMap_Criterion(
198 1
            'bbox',
199 1
            -8.0590275,
200 1
            52.9347449,
201 1
            -7.9966939,
202
            52.9611999
203 1
        );
204 1
        $this->assertEquals($bbox->type(), 'bbox');
205 1
        $this->assertEquals(
206 1
            $bbox->query(),
207
            'bbox=-8.0590275,52.9347449,-7.9966939,52.9611999'
208 1
        );
209
210 1
        $closed = new Services_OpenStreetMap_Criterion('closed');
211 1
        $this->assertEquals($closed->type(), 'closed');
212 1
        $this->assertEquals($closed->query(), 'closed');
213
214 1
        $changesets = $osm->searchChangesets(array($user, $bbox, $closed));
215 1
        $this->assertInstanceOf('Services_OpenStreetMap_Changesets', $changesets);
216
    }
217
218
    /**
219
     * Test searching changesets for those by a specific person via
220
     * display_name and created within a certain timespan.
221
     *
222
     * @return void
223
     */
224
    public function testTimeAfterOnly()
225
    {
226 1
        $mock = new HTTP_Request2_Adapter_Mock();
227 1
        $mock->addResponse(fopen(__DIR__ . '/responses/capabilities.xml', 'rb'));
228 1
        $mock->addResponse(
229 1
            fopen(
230 1
                __DIR__ . '/responses/changeset_search_timespan.xml',
231
                'rb'
232 1
            )
233 1
        );
234
235
        $config = array(
236 1
            'adapter'  => $mock,
237 1
            'server'   => 'http://api06.dev.openstreetmap.org/',
238 1
        );
239 1
        $osm = new Services_OpenStreetMap($config);
240
241 1
        $time = '17 November 2011';
242 1
        $time2 = '29 November 2011';
243
244 1
        $displayName = new Services_OpenStreetMap_Criterion(
245 1
            'display_name',
246
            'kenguest'
247 1
        );
248 1
        $this->assertEquals($displayName->query(), 'display_name=kenguest');
249 1
        $this->assertEquals($displayName->type(), 'display_name');
250
251 1
        $c = new Services_OpenStreetMap_Criterion('time', $time, $time2);
252 1
        $this->assertEquals(
253 1
            $c->query(),
254
            'time=2011-11-17T00%3A00%3A00Z%2C2011-11-29T00%3A00%3A00Z'
255 1
        );
256 1
        $this->assertEquals($c->type(), 'time');
257
258 1
        $changesets = $osm->searchChangesets(array($displayName, $c));
259 1
        $this->assertInstanceOf('Services_OpenStreetMap_Changesets', $changesets);
260
    }
261
262
    /**
263
     * user value must be numeric.
264
     *
265
     * @expectedException        Services_OpenStreetMap_InvalidArgumentException
266
     * @expectedExceptionMessage User UID must be numeric
267
     *
268
     * @return void
269
     */
270
    public function testInvalidUserValue()
271
    {
272 1
        $mock = new HTTP_Request2_Adapter_Mock();
273 1
        $mock->addResponse(fopen(__DIR__ . '/responses/capabilities.xml', 'rb'));
274
275
        $config = array(
276 1
            'adapter'  => $mock,
277 1
            'server'   => 'http://api06.dev.openstreetmap.org/',
278 1
        );
279 1
        $osm = new Services_OpenStreetMap($config);
280
281 1
        $user = new Services_OpenStreetMap_Criterion('user', 'mustbenumeric');
282
    }
283
}
284
// vim:set et ts=4 sw=4:
285
?>


Report generated at 2012-10-02T18:40:35+01:00