Update WorkdaysBetween to use full template.

master
rpohankar 2016-05-16 18:05:38 +00:00
parent 7e3ce87792
commit 13aaca2500
2 changed files with 141 additions and 218 deletions

View File

@ -37,11 +37,19 @@ handle remainder => sub {
my $number = $workdays == 1 ? 'Workday' : 'Workdays';
return "There $verb $workdays $number between $start_str and $end_str.",
structured_answer => {
input => [$start_str, $end_str],
operation => "$number between",
result => $workdays
};
# structured_answer => {
# input => [$start_str, $end_str],
# operation => "$number between",
# result => $workdays
# };
structured_answer => {
data => {
title => $workdays,
subtitle => "Workdays between $start_str - $end_str"
},
templates => {
group => "text"
}
};
};
1;

View File

@ -11,225 +11,140 @@ use Test::MockTime qw( :all );
zci answer_type => 'workdays_between';
zci is_cached => 0;
my @six_to_ten = (
'There are 5 Workdays between 06 Jan 2014 and 10 Jan 2014.',
structured_answer => {
input => ['06 Jan 2014', '10 Jan 2014'],
operation => 'Workdays between',
result => 5,
});
my @twentyfourteen = (
'There are 251 Workdays between 01 Jan 2014 and 01 Jan 2015.',
structured_answer => {
input => ['01 Jan 2014', '01 Jan 2015'],
operation => 'Workdays between',
result => 251,
});
my @twoohoh = (
'There are 253 Workdays between 31 Jan 2000 and 31 Jan 2001.',
structured_answer => {
input => ['31 Jan 2000', '31 Jan 2001'],
operation => 'Workdays between',
result => 253,
});
my @midjune = (
'There are 12 Workdays between 05 Jun 2014 and 20 Jun 2014.',
structured_answer => {
input => ['05 Jun 2014', '20 Jun 2014'],
operation => 'Workdays between',
result => 12,
});
my @midjan = (
'There are 6 Workdays between 06 Jan 2014 and 13 Jan 2014.',
structured_answer => {
input => ['06 Jan 2014', '13 Jan 2014'],
operation => 'Workdays between',
result => 6,
});
my @somejan = (
'There are 5 Workdays between 06 Jan 2014 and 12 Jan 2014.',
structured_answer => {
input => ['06 Jan 2014', '12 Jan 2014'],
operation => 'Workdays between',
result => 5,
});
my @somesat = (
'There are 2 Workdays between 11 Jan 2014 and 14 Jan 2014.',
structured_answer => {
input => ['11 Jan 2014', '14 Jan 2014'],
operation => 'Workdays between',
result => 2,
});
my @somesun = (
'There are 2 Workdays between 12 Jan 2014 and 14 Jan 2014.',
structured_answer => {
input => ['12 Jan 2014', '14 Jan 2014'],
operation => 'Workdays between',
result => 2,
});
my @latejun = (
'There are 5 Workdays between 16 Jun 2014 and 20 Jun 2014.',
structured_answer => {
input => ['16 Jun 2014', '20 Jun 2014'],
operation => 'Workdays between',
result => 5,
});
my @sameday = (
'There is 1 Workday between 03 Jan 2014 and 03 Jan 2014.',
structured_answer => {
input => ['03 Jan 2014', '03 Jan 2014'],
operation => 'Workday between',
result => 1,
});
my @samedaywknd = (
'There are 0 Workdays between 04 Jan 2014 and 04 Jan 2014.',
structured_answer => {
input => ['04 Jan 2014', '04 Jan 2014'],
operation => 'Workdays between',
result => 0,
});
my @weekend_middle = (
'There are 2 Workdays between 03 Jan 2014 and 06 Jan 2014.',
structured_answer => {
input => ['03 Jan 2014', '06 Jan 2014'],
operation => 'Workdays between',
result => 2,
});
sub build_structured_answer {
my ($start_str, $end_str, $workdays, $regex) = @_;
ddg_goodie_test(
['DDG::Goodie::WorkdaysBetween'],
my $verb = 'are';
my $number = 'Workdays';
my $response = re(qr/There $verb $workdays $number between $start_str and $end_str./);
my $subtitle = re(qr/Workdays between $start_str - $end_str/);
my $title = re($workdays);
# Standard work week
'Workdays between 01/06/2014 01/10/2014' => test_zci(@six_to_ten),
'Workdays between 01/06/2014 01/10/2014 inclusive' => test_zci(@six_to_ten),
# Ending date first
'Workdays between 01/10/2014 01/06/2014' => test_zci(@six_to_ten),
'Workdays between 01/10/2014 01/06/2014 inclusive' => test_zci(@six_to_ten),
# Ending date on a weekend
'Workdays between 01/06/2014 01/12/2014' => test_zci(@somejan),
'Workdays between 01/06/2014 01/12/2014 inclusive' => test_zci(@somejan),
# Including the weekend
'Workdays between 01/06/2014 01/13/2014' => test_zci(@midjan),
'Workdays between 01/06/2014 01/13/2014 inclusive' => test_zci(@midjan),
# Including the weekend -- Backwards
'Workdays between 01/13/2014 01/06/2014' => test_zci(@midjan),
'Workdays between 01/13/2014 01/06/2014 inclusive' => test_zci(@midjan),
# Starting on a Saturday
'Workdays between 01/11/2014 01/14/2014' => test_zci(@somesat),
'Workdays between 01/11/2014 01/14/2014 inclusive' => test_zci(@somesat),
# Starting on a Sunday
'Workdays between 01/12/2014 01/14/2014' => test_zci(@somesun),
'Workdays between 01/12/2014 01/14/2014 inclusive' => test_zci(@somesun),
# Workdays in a year
'Workdays between 01/01/2014 01/01/2015' => test_zci(@twentyfourteen),
'Workdays between 01/01/2014 01/01/2015 inclusive' => test_zci(@twentyfourteen),
# Business Days
'business days between 01/06/2014 01/10/2014' => test_zci(@six_to_ten),
'business days between 01/06/2014 01/10/2014 inclusive' => test_zci(@six_to_ten),
# Month and Date are backwards
'Workdays between 16/06/2014 20/06/2014' => test_zci(@latejun),
'Workdays between 5/06/2014 20/06/2014' => test_zci(@midjune),
'Workdays between 20/06/2014 5/06/2014' => test_zci(@midjune),
# Single digit days and months
'Workdays between 1/6/2014 1/10/2014' => test_zci(@six_to_ten),
'Workdays between 1/6/2014 1/10/2014 inclusive' => test_zci(@six_to_ten),
# Workdays in a year - Dash format
'Workdays between 01-01-2014 01-01-2015' => test_zci(@twentyfourteen),
'Workdays between 01-01-2014 01-01-2015 inclusive' => test_zci(@twentyfourteen),
# Business Days - Dash format
'business days between 01-06-2014 01-10-2014' => test_zci(@six_to_ten),
'business days between 01-06-2014 01-10-2014 inclusive' => test_zci(@six_to_ten),
# Month and Date are backwards - Dash format
'Workdays between 16-06-2014 20-06-2014' => test_zci(@latejun),
'Workdays between 5-06-2014 20-06-2014' => test_zci(@midjune),
'Workdays between 20-06-2014 5-06-2014' => test_zci(@midjune),
# Single digit days and months - Dash format
'Workdays between 1-6-2014 1-10-2014' => test_zci(@six_to_ten),
'Workdays between 1-6-2014 1-10-2014 inclusive' => test_zci(@six_to_ten),
# Unambiguous date format
'Workdays between jan 6 2014 jan 10 2014' => test_zci(@six_to_ten),
'Workdays between jan 6 2014 jan 10 2014 inclusive' => test_zci(@six_to_ten),
# Unambiguous date format with comma separator
'Workdays between jan 6, 2014 jan 10, 2014' => test_zci(@six_to_ten),
'Workdays between jan 6, 2014 jan 10, 2014 inclusive' => test_zci(@six_to_ten),
# Same day
'Workdays between jan 3, 2014 jan 3, 2014' => test_zci(@sameday),
'Workdays between jan 3, 2014 jan 3, 2014 inclusive' => test_zci(@sameday),
# Same day on a weekend
'Workdays between jan 4, 2014 jan 4, 2014' => test_zci(@samedaywknd),
'Workdays between jan 4, 2014 jan 4, 2014 inclusive' => test_zci(@samedaywknd),
# Weekend in the middle
'Workdays between jan 3, 2014 jan 6, 2014' => test_zci(@weekend_middle),
'Workdays between jan 3, 2014 jan 6, 2014 inclusive' => test_zci(@weekend_middle),
# "to"
'Workdays between jan 3, 2014 to jan 6, 2014' => test_zci(@weekend_middle),
'Workdays between jan 3, 2014 to jan 6, 2014 inclusive' => test_zci(@weekend_middle),
'Workdays between 01/31/2000 01/31/2001' => test_zci(@twoohoh),
'Workdays between 01/31/2000 01/31/2001 inclusive' => test_zci(@twoohoh),
'Workdays between 01/31/2000 and 01/31/2001 inclusive' => test_zci(@twoohoh),
'Workdays between jan 3 2013 and jan 4 2013' => test_zci(
"There are 2 Workdays between 03 Jan 2013 and 04 Jan 2013.",
if(!$regex) {
$verb = $workdays == 1 ? 'is' : 'are';
$number = $workdays == 1 ? 'Workday' : 'Workdays';
$response = "There $verb $workdays $number between $start_str and $end_str.";
$title = $workdays;
$subtitle = "Workdays between $start_str - $end_str";
}
return $response,
structured_answer => {
input => ['03 Jan 2013', '04 Jan 2013'],
operation => 'Workdays between',
result => 2,
}
),
data => {
title => $title,
subtitle => $subtitle
},
templates => {
group => "text"
}
};
}
# Invalid input
'Workdays between 01/2014 01/2015' => undef,
'Workdays between 01/2014/01' => undef,
'Workdays between 01/01/2014 inclusive' => undef,
'Workdays between 01/01/2014' => undef,
'Workdays between 20/01/2014 inclusive' => undef,
'Workdays between 19/19/2014 20/24/2015' => undef,
'Workdays between 19/19/2014 20/24/2015 inclusive' => undef,
'Workdays from FEB 30 2014 to March 24 2014' => undef,
);
sub build_test{ test_zci(build_structured_answer(@_)) }
set_fixed_time("2015-01-11T09:45:56");
ddg_goodie_test(
[qw(
DDG::Goodie::WorkdaysBetween
)],
'business days between jan 10 and jan 20' => test_zci(
re(qr"There are [1-9] Workdays between 10 Jan [0-9]{4} and 20 Jan [0-9]{4}\."),
structured_answer => {
input => ignore(),
operation => 'Workdays between',
result => re(qr/[1-9]/),
}
),
'business days between january and february' => test_zci(
re(qr"There are [1-9][0-9] Workdays between 01 Jan [0-9]{4} and 01 Feb [0-9]{4}\."),
structured_answer => {
input => ignore(),
operation => 'Workdays between',
result => re(qr/[1-9][0-9]/),
}
),
ddg_goodie_test(
[qw(DDG::Goodie::WorkdaysBetween)],
'Workdays between 01/31/2000 01/31/2001' => build_test('31 Jan 2000', '31 Jan 2001', 253),
'Workdays between 01/31/2000 and 01/31/2001 inclusive' => build_test('31 Jan 2000', '31 Jan 2001', 253),
'Workdays between 01/31/2000 01/31/2001 inclusive' => build_test('31 Jan 2000', '31 Jan 2001', 253),
'Workdays between jan 3 2013 and jan 4 2013' => build_test('03 Jan 2013', '04 Jan 2013', 2),
#weekend in the middle with to
'Workdays between jan 3, 2014 to jan 6, 2014 inclusive' => build_test('03 Jan 2014', '06 Jan 2014', 2),
'Workdays between jan 3, 2014 to jan 6, 2014' => build_test('03 Jan 2014', '06 Jan 2014', 2),
#weekend in the middle
'Workdays between jan 3, 2014 jan 6, 2014' => build_test('03 Jan 2014', '06 Jan 2014', 2),
'Workdays between jan 3, 2014 jan 6, 2014 inclusive' => build_test('03 Jan 2014', '06 Jan 2014', 2),
#same day on a weekend
'Workdays between jan 4, 2014 jan 4, 2014' => build_test('04 Jan 2014', '04 Jan 2014', 0),
'Workdays between jan 4, 2014 jan 4, 2014 inclusive' => build_test('04 Jan 2014', '04 Jan 2014', 0),
# Same day
'Workdays between jan 3, 2014 jan 3, 2014' => build_test('03 Jan 2014', '03 Jan 2014', 1),
'Workdays between jan 3, 2014 jan 3, 2014 inclusive' => build_test('03 Jan 2014', '03 Jan 2014', 1),
# Unambiguous date format with comma separator
'Workdays between jan 6, 2014 jan 10, 2014' => build_test('06 Jan 2014', '10 Jan 2014', 5),
'Workdays between jan 6, 2014 jan 10, 2014 inclusive' => build_test('06 Jan 2014', '10 Jan 2014', 5),
# Unambiguous date format
'Workdays between jan 6 2014 jan 10 2014' => build_test('06 Jan 2014', '10 Jan 2014', 5),
'Workdays between jan 6 2014 jan 10 2014 inclusive' => build_test('06 Jan 2014', '10 Jan 2014', 5),
# Single digit days and months - Dash format
'Workdays between 1-6-2014 1-10-2014' => build_test('06 Jan 2014', '10 Jan 2014', 5),
'Workdays between 1-6-2014 1-10-2014 inclusive' => build_test('06 Jan 2014', '10 Jan 2014', 5),
# Month and Date are backwards - Dash format
'Workdays between 16-06-2014 20-06-2014' => build_test('16 Jun 2014', '20 Jun 2014', 5),
'Workdays between 5-06-2014 20-06-2014' => build_test('05 Jun 2014', '20 Jun 2014', 12),
'Workdays between 20-06-2014 5-06-2014' => build_test('05 Jun 2014', '20 Jun 2014', 12),
# Business Days - Dash format
'business days between 01-06-2014 01-10-2014' => build_test('06 Jan 2014', '10 Jan 2014', 5),
'business days between 01-06-2014 01-10-2014 inclusive' => build_test('06 Jan 2014', '10 Jan 2014', 5),
# Workdays in a year - Dash format
'Workdays between 01-01-2014 01-01-2015' => build_test('01 Jan 2014', '01 Jan 2015', 251),
'Workdays between 01-01-2014 01-01-2015 inclusive' => build_test('01 Jan 2014', '01 Jan 2015', 251),
# Single digit days and months
'Workdays between 1/6/2014 1/10/2014' => build_test('06 Jan 2014', '10 Jan 2014', 5),
'Workdays between 1/6/2014 1/10/2014 inclusive' => build_test('06 Jan 2014', '10 Jan 2014', 5),
# Month and Date are backwards
'Workdays between 16/06/2014 20/06/2014' => build_test('16 Jun 2014', '20 Jun 2014', 5),
'Workdays between 5/06/2014 20/06/2014' => build_test('05 Jun 2014', '20 Jun 2014', 12),
'Workdays between 20/06/2014 5/06/2014' => build_test('05 Jun 2014', '20 Jun 2014', 12),
# Workdays in a year
'Workdays between 01/01/2014 01/01/2015' => build_test('01 Jan 2014', '01 Jan 2015', 251),
'Workdays between 01/01/2014 01/01/2015 inclusive' => build_test('01 Jan 2014', '01 Jan 2015', 251),
# Starting on a Sunday
'Workdays between 01/12/2014 01/14/2014' => build_test('12 Jan 2014', '14 Jan 2014', 2),
'Workdays between 01/12/2014 01/14/2014 inclusive' => build_test('12 Jan 2014', '14 Jan 2014', 2),
# Starting on a Saturday
'Workdays between 01/11/2014 01/14/2014' => build_test('11 Jan 2014', '14 Jan 2014', 2),
'Workdays between 01/11/2014 01/14/2014 inclusive' => build_test('11 Jan 2014', '14 Jan 2014', 2),
# Including the weekend -- Backwards
'Workdays between 01/13/2014 01/06/2014' => build_test('06 Jan 2014', '13 Jan 2014', 6),
'Workdays between 01/13/2014 01/06/2014 inclusive' => build_test('06 Jan 2014', '13 Jan 2014', 6),
# Including the weekend
'Workdays between 01/06/2014 01/13/2014' => build_test('06 Jan 2014', '13 Jan 2014', 6),
'Workdays between 01/06/2014 01/13/2014 inclusive' => build_test('06 Jan 2014', '13 Jan 2014', 6),
# Standard work week
'Workdays between 01/06/2014 01/10/2014' => build_test('06 Jan 2014', '10 Jan 2014', 5),
'Workdays between 01/06/2014 01/10/2014 inclusive' => build_test('06 Jan 2014', '10 Jan 2014', 5),
# Ending date first
'Workdays between 01/10/2014 01/06/2014' => build_test('06 Jan 2014', '10 Jan 2014', 5),
'Workdays between 01/10/2014 01/06/2014 inclusive' => build_test('06 Jan 2014', '10 Jan 2014', 5),
# Ending date on a weekend
'Workdays between 01/06/2014 01/12/2014' => build_test('06 Jan 2014', '12 Jan 2014', 5),
'Workdays between 01/06/2014 01/12/2014 inclusive' => build_test('06 Jan 2014', '12 Jan 2014', 5),
'business days between jan 10 and jan 20' => build_test(qr/10 Jan [0-9]{4}/, qr/20 Jan [0-9]{4}/, qr/[1-9]/, 'true'),
'business days between january and february' => build_test(qr/01 Jan [0-9]{4}/, qr/01 Feb [0-9]{4}/, qr/[1-9][0-9]/, 'true'),
# Invalid input
'Workdays between 01/2014 01/2015' => undef,
'Workdays between 01/2014/01' => undef,
'Workdays between 01/01/2014 inclusive' => undef,
'Workdays between 01/01/2014' => undef,
'Workdays between 20/01/2014 inclusive' => undef,
'Workdays between 19/19/2014 20/24/2015' => undef,
'Workdays between 19/19/2014 20/24/2015 inclusive' => undef,
'Workdays from FEB 30 2014 to March 24 2014' => undef,
);
done_testing;