Csv Helper Modul.
[kivitendo-erp.git] / t / helper / csv.t
1 use Test::More;
2 use SL::Dispatcher;
3 use utf8;
4
5 use_ok 'SL::Helper::Csv';
6 my $csv;
7
8 $csv = SL::Helper::Csv->new(
9   file   => \"Kaffee;\n",
10   header => [ 'description' ],
11 );
12
13 isa_ok $csv->_csv, 'Text::CSV';
14 isa_ok $csv->_io, 'IO::File';
15 isa_ok $csv->parse, 'SL::Helper::Csv', 'parsing returns self';
16 is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'simple case works';
17
18 $csv->class('SL::DB::Part');
19
20 is $csv->get_objects->[0]->description, 'Kaffee', 'get_object works';
21 ####
22
23 SL::Dispatcher::pre_startup_setup();
24
25 $::form = Form->new;
26 $::myconfig{numberformat} = '1.000,00';
27 $::myconfig{dateformat} = 'dd.mm.yyyy';
28 $::locale = Locale->new('de');
29
30 $csv = SL::Helper::Csv->new(
31   file   => \"Kaffee;0.12;12,2;1,5234\n",
32   header => [ 'description', 'sellprice', 'lastcost_as_number', 'listprice' ],
33   header_acc => { listprice => 'listprice_as_number' },
34   class  => 'SL::DB::Part',
35 );
36 $csv->parse;
37
38 is $csv->get_objects->[0]->sellprice, 0.12, 'numeric attr works';
39 is $csv->get_objects->[0]->lastcost, 12.2, 'attr helper works';
40 is $csv->get_objects->[0]->listprice, 1.5234, 'header_acc works';
41
42 #####
43
44
45 $csv = SL::Helper::Csv->new(
46   file   => \<<EOL,
47 description,sellprice,lastcost_as_number,listprice,
48 Kaffee,0.12,'12,2','1,5234'
49 EOL
50   sep_char => ',',
51   quote_char => "'",
52   header_acc => { listprice => 'listprice_as_number' },
53   class  => 'SL::DB::Part',
54 );
55 $csv->parse;
56 is scalar @{ $csv->get_objects }, 1, 'auto header works';
57 is $csv->get_objects->[0]->description, 'Kaffee', 'get_object works on auto header';
58
59 #####
60
61
62 $csv = SL::Helper::Csv->new(
63   file   => \<<EOL,
64 ;;description;sellprice;lastcost_as_number;
65 #####;Puppy;Kaffee;0.12;12,2;1,5234
66 EOL
67   class  => 'SL::DB::Part',
68 );
69 $csv->parse;
70 is scalar @{ $csv->get_objects }, 1, 'bozo header doesn\'t blow things up';
71
72 #####
73
74 $csv = SL::Helper::Csv->new(
75   file   => \<<EOL,
76 description;partnumber;sellprice;lastcost_as_number;
77 Kaffee;;0.12;12,2;1,5234
78 Beer;1123245;0.12;12,2;1,5234
79 EOL
80   class  => 'SL::DB::Part',
81 );
82 $csv->parse;
83 is scalar @{ $csv->get_objects }, 2, 'multiple objects work';
84 is $csv->get_objects->[0]->description, 'Kaffee', 'first object';
85 is $csv->get_objects->[1]->partnumber, '1123245', 'second object';
86
87 ####
88
89 $csv = SL::Helper::Csv->new(
90   file   => \<<EOL,
91 description;partnumber;sellprice;lastcost_as_number;
92 Kaffee;;0.12;1,221.52
93 Beer;1123245;0.12;1.5234
94 EOL
95   numberformat => '1,000.00',
96   class  => 'SL::DB::Part',
97 );
98 $csv->parse;
99 is $csv->get_objects->[0]->lastcost, '1221.52', 'formatnumber';
100
101 ######
102
103 $csv = SL::Helper::Csv->new(
104   file   => \<<EOL,
105 "description;partnumber;sellprice;lastcost_as_number;
106 Kaffee;;0.12;1,221.52
107 Beer;1123245;0.12;1.5234
108 EOL
109   numberformat => '1,000.00',
110   class  => 'SL::DB::Part',
111 );
112 is $csv->parse, undef, 'broken csv header won\'t get parsed';
113
114
115 done_testing();
116 # vim: ft=perl