Skip to content

Commit c0405e1

Browse files
authored
Merge pull request #16 from route4me/recurring_routes
Added support of Recurring Schedules.
2 parents bce16de + 1bb7a77 commit c0405e1

26 files changed

+1590
-2
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ vendor/
33
composer.phar
44
composer.lock
55
phpunit
6+
phpDocumentor.phar
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,320 @@
1+
<?php
2+
3+
namespace UnitTestFiles\Test;
4+
5+
use Route4Me\Constants;
6+
use Route4Me\Route4Me;
7+
use Route4Me\V5\RecurringRoutes\PageInfo;
8+
use Route4Me\V5\RecurringRoutes\RouteSchedule;
9+
use Route4Me\V5\RecurringRoutes\Schedule;
10+
use Route4Me\V5\RecurringRoutes\Schedules;
11+
use Route4Me\V5\Routes\AddonRoutesApi\Route;
12+
use Route4Me\V5\Vehicles\DataTypes\Vehicle;
13+
14+
final class RecurringRoutesUnitTests extends \PHPUnit\Framework\TestCase
15+
{
16+
public static ?Schedule $schedule;
17+
public static ?RouteSchedule $route_schedule;
18+
public static ?string $route_id;
19+
public static ?string $member_id;
20+
public static ?string $vehicle_id;
21+
22+
public static function setUpBeforeClass() : void
23+
{
24+
Route4Me::setApiKey(Constants::API_KEY);
25+
self::$schedule = null;
26+
self::$route_schedule = null;
27+
self::$route_id = null;
28+
self::$member_id = null;
29+
self::$vehicle_id = null;
30+
}
31+
32+
public function testScheduleCanBeCreateEmpty() : void
33+
{
34+
$this->assertInstanceOf(Schedule::class, new Schedule());
35+
}
36+
37+
public function testScheduleCanBeCreateFromArray() : void
38+
{
39+
$this->assertInstanceOf(Schedule::class, new Schedule([
40+
'schedule_uid' => '1',
41+
'name' => 'The best Schedule'
42+
]));
43+
}
44+
45+
public function testRouteScheduleCanBeCreateEmpty() : void
46+
{
47+
$this->assertInstanceOf(RouteSchedule::class, new RouteSchedule());
48+
}
49+
50+
public function testRouteScheduleCanBeCreateFromArray() : void
51+
{
52+
$this->assertInstanceOf(RouteSchedule::class, new RouteSchedule([
53+
'route_id' => '1',
54+
'schedule_uid' => '2'
55+
]));
56+
}
57+
58+
public function testPageInfoCanBeCreateEmpty() : void
59+
{
60+
$this->assertInstanceOf(PageInfo::class, new PageInfo());
61+
}
62+
63+
public function testPageInfoCanBeCreateFromArray() : void
64+
{
65+
$this->assertInstanceOf(PageInfo::class, new PageInfo([
66+
'first' => 'URL_first',
67+
'last' => 'URL_last'
68+
], [
69+
'current_page' => 1,
70+
'last_page' => 15
71+
]));
72+
}
73+
74+
public function testSchedulesCanBeCreateEmpty() : void
75+
{
76+
$this->assertInstanceOf(Schedules::class, new Schedules());
77+
}
78+
79+
public function testCreateScheduleMustReturnScahedule() : void
80+
{
81+
$schedules = new Schedules();
82+
self::$schedule = $schedules->createSchedule([
83+
'name' => 'The bestest schedule',
84+
'schedule_blacklist' => [],
85+
'schedule' => null,
86+
'timezone' => 'UTC'
87+
]);
88+
89+
$this->assertInstanceOf(Schedule::class, self::$schedule);
90+
$this->assertNotNull(self::$schedule->schedule_uid);
91+
$this->assertEquals(self::$schedule->name, 'The bestest schedule');
92+
}
93+
94+
public function testGetScheduleMustReturnScahedule() : void
95+
{
96+
$schedules = new Schedules();
97+
$schedule = $schedules->getSchedule(self::$schedule->schedule_uid);
98+
99+
$this->assertInstanceOf(Schedule::class, $schedule);
100+
$this->assertNotNull(self::$schedule->schedule_uid);
101+
$this->assertEquals(self::$schedule->name, 'The bestest schedule');
102+
}
103+
104+
public function testGetAllSchedulesMustReturnArrayOfScahedules() : void
105+
{
106+
$schedules = new Schedules();
107+
$result = $schedules->getAllSchedules();
108+
109+
$this->assertIsArray($result);
110+
if (count($result) > 0) {
111+
$this->assertInstanceOf(Schedule::class, $result[0]);
112+
}
113+
}
114+
115+
public function testGetSchedulesMustReturnOnePage() : void
116+
{
117+
$schedules = new Schedules();
118+
$result = $schedules->getSchedules();
119+
120+
$this->assertIsArray($result);
121+
$this->assertArrayHasKey('schedules', $result);
122+
if (count($result['schedules']) > 0) {
123+
$this->assertInstanceOf(Schedule::class, $result['schedules'][0]);
124+
}
125+
$this->assertArrayHasKey('page_info', $result);
126+
$this->assertInstanceOf(PageInfo::class, $result['page_info']);
127+
}
128+
129+
public function testUpdateScheduleMustReturnUpdatedScahedule() : void
130+
{
131+
$schedules = new Schedules();
132+
self::$schedule = $schedules->updateSchedule(self::$schedule->schedule_uid, [
133+
'name' => 'The bestest schedule 1'
134+
]);
135+
136+
$this->assertInstanceOf(Schedule::class, self::$schedule);
137+
$this->assertEquals(self::$schedule->name, 'The bestest schedule 1');
138+
}
139+
140+
public function testCreateRouteScheduleMustReturnRouteScahedule() : void
141+
{
142+
$route = new Route;
143+
$routes = $route->getRoutes([
144+
'limit' => 1,
145+
'offset' => 0
146+
]);
147+
148+
if (is_array($routes) && isset($routes[0])) {
149+
self::$route_id = $routes[0]->route_id;
150+
self::$member_id = $routes[0]->member_id;
151+
}
152+
$route = null;
153+
154+
$this->assertNotNull(self::$route_id);
155+
156+
$schedules = new Schedules();
157+
self::$route_schedule = $schedules->createRouteSchedule([
158+
'route_id' => self::$route_id,
159+
'schedule_uid' => self::$schedule->schedule_uid
160+
]);
161+
162+
$this->assertInstanceOf(RouteSchedule::class, self::$route_schedule);
163+
$this->assertNotNull(self::$route_schedule->schedule_uid);
164+
$this->assertEquals(self::$route_schedule->schedule_uid, self::$schedule->schedule_uid);
165+
}
166+
167+
public function testGetRouteScheduleMustReturnRouteScahedule() : void
168+
{
169+
$schedules = new Schedules();
170+
$route_schedule = $schedules->getRouteSchedule(self::$route_id);
171+
172+
$this->assertInstanceOf(RouteSchedule::class, $route_schedule);
173+
$this->assertNotNull($route_schedule->schedule_uid);
174+
}
175+
176+
public function testGetAllRouteSchedulesMustReturnArrayOfRouteScahedules() : void
177+
{
178+
$schedules = new Schedules();
179+
$result = $schedules->getAllRouteSchedules();
180+
181+
$this->assertIsArray($result);
182+
if (count($result) > 0) {
183+
$this->assertInstanceOf(RouteSchedule::class, $result[0]);
184+
}
185+
}
186+
187+
public function testGetRouteSchedulesMustReturnOnePage() : void
188+
{
189+
$schedules = new Schedules();
190+
$result = $schedules->getRouteSchedules();
191+
192+
$this->assertIsArray($result);
193+
$this->assertArrayHasKey('route_schedules', $result);
194+
if (count($result['route_schedules']) > 0) {
195+
$this->assertInstanceOf(RouteSchedule::class, $result['route_schedules'][0]);
196+
}
197+
$this->assertArrayHasKey('page_info', $result);
198+
$this->assertInstanceOf(PageInfo::class, $result['page_info']);
199+
}
200+
201+
public function testUpdateRouteScheduleMustReturnUpdatedRouteScahedule() : void
202+
{
203+
$vehicle = new Vehicle();
204+
$vehicles = $vehicle->getVehiclesPaginatedList([
205+
'with_pagination' => true,
206+
'page' => 1,
207+
'perPage' => 1
208+
]);
209+
210+
if (is_array($vehicles) && isset($vehicles[0]) && is_array($vehicles[0]) && isset($vehicles[0]['vehicle_id'])) {
211+
self::$vehicle_id = $vehicles[0]['vehicle_id'];
212+
}
213+
$vehicle = null;
214+
215+
$this->assertNotNull(self::$vehicle_id);
216+
217+
$schedules = new Schedules();
218+
self::$route_schedule = $schedules->updateRouteSchedule(self::$route_id, [
219+
'schedule_uid' => self::$route_schedule->schedule_uid,
220+
'member_id' => self::$member_id,
221+
'vehicle_id' => self::$vehicle_id
222+
]);
223+
224+
$this->assertInstanceOf(RouteSchedule::class, self::$route_schedule);
225+
$this->assertEquals(self::$route_schedule->member_id, self::$member_id);
226+
}
227+
228+
public function testrReplaceRouteScheduleMustReturnRouteScahedule() : void
229+
{
230+
$schedules = new Schedules();
231+
self::$route_schedule = $schedules->replaceRouteSchedule(self::$route_id, [
232+
'schedule_uid' => self::$route_schedule->schedule_uid,
233+
'member_id' => self::$member_id,
234+
'vehicle_id' => self::$vehicle_id
235+
]);
236+
237+
$this->assertInstanceOf(RouteSchedule::class, self::$route_schedule);
238+
$this->assertEquals(self::$route_schedule->member_id, self::$member_id);
239+
}
240+
241+
public function testGetRouteSchedulePreviewMustReturnArray() : void
242+
{
243+
$schedules = new Schedules();
244+
$start = '2022-01-01';
245+
$end = '2023-12-31';
246+
$result = $schedules->getRouteSchedulePreview(self::$route_id, $start, $end);
247+
248+
$this->assertIsArray($result);
249+
}
250+
251+
public function testIsScheduledRouteCopyMustReturnBool() : void
252+
{
253+
$schedules = new Schedules();
254+
$result = $schedules->isScheduledRouteCopy(self::$route_id);
255+
256+
$this->assertIsBool($result);
257+
}
258+
259+
public function testGetScheduledRoutesCopiesMustReturnArray() : void
260+
{
261+
$schedules = new Schedules();
262+
$route_date = '2023-01-01';
263+
$result = $schedules->getScheduledRoutesCopies(
264+
self::$route_id,
265+
self::$route_schedule->schedule_uid,
266+
$route_date
267+
);
268+
269+
$this->assertIsArray($result);
270+
}
271+
272+
public function testCreateMasterRouteMustReturnBool() : void
273+
{
274+
$schedules = new Schedules();
275+
$result = $schedules->createMasterRoute([
276+
'route_id' => self::$route_id,
277+
'route_name' => 'The Bestest route',
278+
'member_id' => self::$member_id,
279+
'vehicle_id' => self::$vehicle_id,
280+
'name' => 'The bestest schedule',
281+
'schedule_blacklist' => [],
282+
'schedule' => null,
283+
'timezone' => 'UTC'
284+
]);
285+
286+
$this->assertIsBool($result);
287+
}
288+
289+
public function testDeleteRouteScheduleMustReturnTrue() : void
290+
{
291+
$schedules = new Schedules();
292+
$result = $schedules->deleteRouteSchedules(self::$route_id);
293+
294+
$this->assertTrue($result);
295+
self::$route_schedule = null;
296+
}
297+
298+
public function testDeleteScheduleMustReturnDeletedScahedule() : void
299+
{
300+
$schedules = new Schedules();
301+
self::$schedule = $schedules->deleteSchedule(self::$schedule->schedule_uid);
302+
303+
$this->assertInstanceOf(Schedule::class, self::$schedule);
304+
self::$schedule = null;
305+
}
306+
307+
public static function tearDownAfterClass() : void
308+
{
309+
if (!is_null(self::$schedule)) {
310+
$schedules = new Schedules();
311+
$result = $schedules->deleteSchedule(self::$schedule->schedule_uid);
312+
self::assertInstanceOf(Schedule::class, $result);
313+
}
314+
if (!is_null(self::$route_schedule)) {
315+
$schedules = new Schedules();
316+
$result = $schedules->deleteRouteSchedule(self::$route_schedule->route_id);
317+
self::assertInstanceOf(RouteSchedule::class, $result);
318+
}
319+
}
320+
}

composer.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "route4me/route4me-php",
33
"description": "Access Route4Me's logistics-as-a-service API using our PHP SDK",
44
"minimum-stability": "stable",
5-
"version": "1.2.2",
5+
"version": "1.2.3",
66

77
"authors": [
88
{
@@ -17,7 +17,7 @@
1717

1818
"require": {
1919
"php": ">=7",
20-
"ext-json": "*",
20+
"ext-json": "*",
2121
"ext-sockets": "*",
2222
"symfony/process": "*"
2323
},

0 commit comments

Comments
 (0)