X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fhelper%2Fcsv.t;h=95ca14b36344c733d0e5f43015a4d5c3177bfd24;hb=45ee0662e55cf328d365c1662694cc1b333c723d;hp=99da3d38d466df451a1e0b0ac7540d59b90219b0;hpb=f74b0dac7a8e55cc7a67c4a03a3ee229415b3fbd;p=kivitendo-erp.git diff --git a/t/helper/csv.t b/t/helper/csv.t index 99da3d38d..95ca14b36 100644 --- a/t/helper/csv.t +++ b/t/helper/csv.t @@ -1,4 +1,4 @@ -use Test::More tests => 84; +use Test::More tests => 91; use lib 't'; use utf8; @@ -141,7 +141,7 @@ EOL profile => [{class => 'SL::DB::Part'}], ); $csv->parse; -is $csv->get_objects->[0]->lastcost, '1221.52', 'ignore_unkown_columns works'; +is $csv->get_objects->[0]->lastcost, '1221.52', 'ignore_unknown_columns works'; ##### @@ -382,6 +382,39 @@ $csv->parse; is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'without profile and class works'; ##### + +$csv = SL::Helper::Csv->new( + file => \<parse; +is_deeply $csv->get_data, [ {partnumber => 1, description => 'Kaffee'}, {partnumber => '', description => ' '}, {partnumber => 3, description => 'Tee'} ], 'ignoring empty lines works (header in csv file)'; + +##### + +$csv = SL::Helper::Csv->new( + file => \< ['description', 'partnumber'], +); +ok $csv->parse; +is_deeply $csv->get_data, [ {partnumber => 1, description => 'Kaffee'}, {partnumber => '', description => ' '}, {partnumber => 3, description => 'Tee'} ], 'ignoring empty lines works'; + +##### + $csv = SL::Helper::Csv->new( file => \"Kaffee;1,50\nSchoke;0,89\n", header => [ @@ -596,7 +629,7 @@ EOL ignore_unknown_columns => 1, ); ok !$csv->parse, 'multiplex check detects incosistent datatype field position'; -is_deeply( ($csv->errors)[0], [ 0, 'datatype field must be at the same position for all datatypes for multiplexed data', 0, 0 ], 'multiplex data with inconsistent datatype field posiotion throws error'); +is_deeply( ($csv->errors)[0], [ undef, 0, 'datatype field must be at the same position for all datatypes for multiplexed data', 0, 0 ], 'multiplex data with inconsistent datatype field posiotion throws error'); ##### @@ -726,6 +759,36 @@ ok $csv->get_objects->[0], 'multiplex: empty path gets ignored in object creatio ##### +$csv = SL::Helper::Csv->new( + file => \< 1, + profile => [ { class => 'SL::DB::Customer', row_ident => 'C' }, + { class => 'SL::DB::Part', row_ident => 'P' }, + ], +); +$csv->parse; +is_deeply $csv->get_data, [ + {datatype => 'C', customernumber => 1000, name => 'Meier'}, + {datatype => 'P', partnumber => 1, description => 'Kaffee'}, + {datatype => 'C', customernumber => undef, name => undef}, + {datatype => 'P', partnumber => '', description => ' '}, + {datatype => 'C', customernumber => 2000, name => 'Meister'}, + {datatype => 'P', partnumber => '3', description => 'Tee'}, +], 'ignoring empty lines works (multiplex data)'; + +##### + # Mappings # simple case $csv = SL::Helper::Csv->new( @@ -809,9 +872,33 @@ $csv->parse; is $csv->get_objects->[0]->sellprice, 4.99, 'case insensitive mapping with profile works'; +# self-mapping with profile +$csv = SL::Helper::Csv->new( + file => \"sellprice\n4,99", # " # make emacs happy + case_insensitive_header => 1, + profile => [{ + profile => { sellprice => 'sellprice_as_number' }, + mapping => { sellprice => 'sellprice' }, + class => 'SL::DB::Part', + }], +); +$csv->parse; +is $csv->get_objects->[0]->sellprice, 4.99, 'self-mapping with profile works'; + +# self-mapping without profile +$csv = SL::Helper::Csv->new( + file => \"sellprice\n4.99", # " # make emacs happy + case_insensitive_header => 1, + profile => [{ + mapping => { sellprice => 'sellprice' }, + class => 'SL::DB::Part', + }], +); +$csv->parse; +is $csv->get_objects->[0]->sellprice, 4.99, 'self-mapping without profile works'; + # vim: ft=perl # set emacs to perl mode # Local Variables: # mode: perl # End: -