Input validation tests for importTaxData.

This commit is contained in:
Colin Kuskie 2008-02-18 21:23:43 +00:00
parent 95a327ea62
commit c613e38995
7 changed files with 115 additions and 8 deletions

View file

@ -147,8 +147,15 @@ sub getItems {
Import tax information from the specified file in CSV format. The
first line of the file should contain the name of the columns, in
any order. The following lines will contain tax information. Blank
lines and anything following a '#' sign will be ignored.
any order. The first line may not contain comments in it, or
before it.
The following lines will contain tax information. Blank
lines and anything following a '#' sign will be ignored from
the second line of the file, on to the end.
Returns 1 if the import has taken place. This is to help you know
if old data has been deleted and new has been inserted.
=cut
@ -174,12 +181,15 @@ sub importTaxData {
my $line = 1;
while (my $taxRow = <$table>) {
chomp $taxRow;
$taxRow =~ s/\s*#.+$//;
next unless $taxRow;
my @taxRow = WebGUI::Text::splitCSV($taxRow);
croak qq{Error on line $line in file $filePath}
unless scalar @taxRow == 3;
push @taxData, [ @taxRow ];
}
##Okay, if we got this far, then the data looks fine.
return unless scalar @taxData;
$self->session->db->beginTransaction;
$self->session->db->write('delete from tax');
foreach my $taxRow (@taxData) {
@ -188,7 +198,7 @@ sub importTaxData {
$self->add(\%taxRow);
}
$self->session->db->commit;
return;
return 1;
}
#-------------------------------------------------------------------

View file

@ -29,7 +29,7 @@ my $session = WebGUI::Test->session;
#----------------------------------------------------------------------------
# Tests
my $tests = 34;
my $tests = 45;
plan tests => 1 + $tests;
#----------------------------------------------------------------------------
@ -244,13 +244,95 @@ SKIP: {
}
$taxer->importTaxData($taxFile);
my $expectedTaxData = [
{
field => 'state',
value => 'Wisconsin',
taxRate => 5.0,
},
{
field => 'code',
value => 53701,
taxRate => 0.5,
},
];
ok(
$taxer->importTaxData(
$taxFile
),
'Good tax data inserted',
);
$taxIterator = $taxer->getItems;
is($taxIterator->rows, 4, 'import: Old data deleted, new data imported');
is($taxIterator->rows, 2, 'import: Old data deleted, new data imported');
my @goodTaxData = _grabTaxData($taxIterator);
cmp_bag(
\@goodTaxData,
$expectedTaxData,
'Correct data inserted.',
);
ok(
$taxer->importTaxData(
WebGUI::Test->getTestCollateralPath('taxTables/orderedTaxTable.csv')
),
'Reordered tax data inserted',
);
$taxIterator = $taxer->getItems;
is($taxIterator->rows, 2, 'import: Old data deleted, new data imported again');
my @orderedTaxData = _grabTaxData($taxIterator);
cmp_bag(
\@orderedTaxData,
$expectedTaxData,
'Correct data inserted, with CSV in different columnar order.',
);
ok(
$taxer->importTaxData(
WebGUI::Test->getTestCollateralPath('taxTables/commentedTaxTable.csv')
),
'Commented tax data inserted',
);
$taxIterator = $taxer->getItems;
is($taxIterator->rows, 2, 'import: Old data deleted, new data imported the third time');
my @orderedTaxData = _grabTaxData($taxIterator);
cmp_bag(
\@orderedTaxData,
$expectedTaxData,
'Correct data inserted, with comments in the CSV file',
);
ok(
! $taxer->importTaxData(
WebGUI::Test->getTestCollateralPath('taxTables/emptyTaxTable.csv')
),
'Empty tax data not inserted',
);
my $failure;
eval {
$failure = $taxer->importTaxData(
WebGUI::Test->getTestCollateralPath('taxTables/badTaxTable.csv')
);
};
ok (!$failure, 'Tax data not imported');
like($@, qr{Error on line \d+ in file},
'importTaxData: error handling when the CSV data is missing an entry on 1 line');
}
sub _grabTaxData {
my $tax = shift;
my @taxData = ();
while (my $taxRow = $tax->hashRef) {
delete $taxRow->{'taxId'};
push @taxData, $taxRow;
}
return @taxData;
}
#----------------------------------------------------------------------------
# Cleanup

View file

@ -0,0 +1,3 @@
field,value,taxRate
state,5.0
code,53701,0.5
1 field,value,taxRate
2 state,5.0
3 code,53701,0.5

View file

@ -0,0 +1,8 @@
taxRate,value,field
#header lines above
#This is just a zip code.
0.5,53701,code
5.0,Wisconsin,state #Wisconsin is expensive!
1 taxRate,value,field
2 #header lines above
3 #This is just a zip code.
4 0.5,53701,code
5 5.0,Wisconsin,state #Wisconsin is expensive!

View file

@ -0,0 +1,3 @@
field,value,taxRate
#state,Wisconsin,5.0
#code,53701,0.5
1 field value taxRate
2 #state Wisconsin 5.0
3 #code 53701 0.5

View file

@ -1,5 +1,3 @@
field,value,taxRate
country,USA,0.1
state,Wisconsin,5.0
city,Madcity-Baby,0.5
code,53701,0.5

1 field value taxRate
country USA 0.1
2 state Wisconsin 5.0
city Madcity-Baby 0.5
3 code 53701 0.5

View file

@ -0,0 +1,3 @@
taxRate,value,field
5.0,Wisconsin,state
0.5,53701,code
1 taxRate value field
2 5.0 Wisconsin state
3 0.5 53701 code