#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use Test::More tests => 67;
use Test::Fatal;
BEGIN {
use_ok('Travel::Routing::DE::VRR');
}
require_ok('Travel::Routing::DE::VRR');
sub efa_conf {
my $ret = {
efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2',
origin => ['Essen', 'HBf'],
destination => ['Koeln', 'HBf'],
rm_base => 'http://efa.vrr.de/vrr/',
sm_base => 'http://efa.vrr.de/download/envmaps/',
lwp_options => {},
submit => 0,
};
foreach my $p (@_) {
$ret->{$p->[0]} = $p->[1];
}
return $ret;
}
sub efa_new {
return new_ok(
'Travel::Routing::DE::VRR' => [%{efa_conf(@_)}]
);
}
sub is_efa_post {
my ($ck, $cv, @post) = @_;
my $efa = efa_new([$ck, $cv]);
my $ok = 1;
is_deeply(
$efa->{'config'}, efa_conf([$ck, $cv]),
"$ck => $cv: conf ok",
);
foreach my $ref (@post) {
my ($key, $value) = @{$ref};
if (not defined $efa->{'post'}->{"key"} and
not defined $value) {
next;
}
if ($efa->{'post'}->{"$key"} ne $value) {
$ok = 0;
last;
}
}
ok(
$ok,
"$ck => $cv: POST okay",
);
}
sub is_efa_err {
my ($ck, $cv, $exception) = @_;
isa_ok(
exception { Travel::Routing::DE::VRR->new(%{efa_conf([$ck, $cv])}) },
$exception,
"$ck => $cv"
);
}
is_efa_post('ignored', 'ignored');
my $efa;
is_efa_post(
'via', ['MH', 'HBf'],
['place_via', 'MH'],
['name_via', 'HBf'],
['type_via', 'stop'],
);
is_efa_post(
'origin', ['D', 'Fuerstenwall 232', 'address'],
['place_origin', 'D'],
['name_origin', 'Fuerstenwall 232'],
['type_origin', 'address'],
);
is_efa_post(
'departure_time', '22:23',
['itdTripDateTimeDepArr', 'dep'],
['itdTimeHour', '22'],
['itdTimeMinute', '23'],
);
is_efa_post(
'arrival_time', '16:38',
['itdTripDateTimeDepArr', 'arr'],
['itdTimeHour', '16'],
['itdTimeMinute', '38'],
);
is_efa_post(
'date', '2.10.2009',
['itdDateDay', '2'],
['itdDateMonth', '10'],
['itdDateYear', '2009'],
);
is_efa_post(
'date', '26.12.',
['itdDateDay', '26'],
['itdDateMonth', '12'],
['itdDateYear', (localtime(time))[5] + 1900],
);
is_efa_post(
'exclude', [qw[zug]],
['inclMOT_0', undef],
);
is_efa_post(
'exclude', [qw[stadtbus schiff ast]],
['inclMOT_5', undef],
['inclMOT_9', undef],
['inclMOT_10', undef],
);
is_efa_post(
'select_interchange_by', 'speed',
['routeType', 'LEASTTIME'],
);
is_efa_post(
'select_interchange_by', 'waittime',
['routeType', 'LEASTINTERCHANGE'],
);
is_efa_post(
'select_interchange_by', 'distance',
['routeType', 'LEASTWALKING'],
);
is_efa_post(
'train_type', 'local',
['lineRestriction', 403],
);
is_efa_post(
'train_type', 'ic',
['lineRestriction', 401],
);
is_efa_post(
'train_type', 'ice',
['lineRestriction', 400],
);
is_efa_post(
'walk_speed', 'normal',
['changeSpeed', 'normal'],
);
is_efa_post(
'max_interchanges', 5,
['maxChanges', 5],
);
is_efa_post(
'use_near_stops', 1,
['useProxFootSearch', 1],
);
is_efa_post(
'with_bike', 1,
['bikeTakeAlong', 1],
);
is_efa_err(
'departure_time', '37:00',
'Travel::Routing::DE::EFA::Exception::Setup',
);
is_efa_err(
'departure_time', '07',
'Travel::Routing::DE::EFA::Exception::Setup',
);
is_efa_err(
'train_type', 'invalid',
'Travel::Routing::DE::EFA::Exception::Setup',
);
is_efa_err(
'walk_speed', 'invalid',
'Travel::Routing::DE::EFA::Exception::Setup',
);
is_efa_err(
'select_interchange_by', 'invalid',
'Travel::Routing::DE::EFA::Exception::Setup',
);
is_efa_err(
'exclude', [qw[sonstige invalid]],
'Travel::Routing::DE::EFA::Exception::Setup',
);
is_efa_err(
'date', '42.5.2003',
'Travel::Routing::DE::EFA::Exception::Setup',
);
is_efa_err(
'date', '7.',
'Travel::Routing::DE::EFA::Exception::Setup',
);