]> wagnertech.de Git - mfinanz.git/blob - t/controllers/helpers/parse_filter.t
03d5d1514cea3dc413217936553ddce3a18a1701
[mfinanz.git] / t / controllers / helpers / parse_filter.t
1 use lib 't';
2
3 use Test::More tests => 13;
4 use Test::Deep;
5 use Data::Dumper;
6
7 use_ok 'Support::TestSetup';
8 use_ok 'SL::Controller::Helper::ParseFilter';
9
10 Support::TestSetup::login();
11 my ($filter, $expected);
12
13 sub test ($$$) {
14   my $got = { parse_filter($_[0]) };
15   cmp_deeply(
16     $got,
17     $_[1],
18     $_[2]
19   ) or do {
20     print STDERR "expected => ", Dumper($_[1]), "\ngot: => ", Dumper($got), $/;
21   }
22 }
23
24 test { }, {
25 }, 'minimal test';
26
27 test {
28   name => 'Test',
29   whut => 'moof',
30 }, {
31   query => [ %{{
32     name => 'Test',
33     whut => 'moof'
34   }} ],
35 }, 'basic test';
36
37 test {
38   customer => {
39     name => 'rainer',
40   }
41 }, {
42   query => [ 'customer.name' => 'rainer' ],
43   with_objects => [ 'customer' ],
44 }, 'joining customers';
45
46 test {
47   customer => {
48     chart => {
49       accno => 'test',
50     }
51   }
52 }, {
53   query => [ 'customer.chart.accno' => 'test' ],
54   with_objects => bag( 'customer', 'chart' ),
55 }, 'nested joins';
56
57 test {
58   'customer:substr' => 'Meyer'
59 }, {
60   query => [ customer => '%Meyer%' ]
61 }, 'simple filter substr';
62
63 test {
64   'customer::ilike' => 'Meyer'
65 }, {
66   query => [ customer => { ilike => 'Meyer' } ]
67 }, 'simple method ilike';
68
69 test {
70   customer => {
71     chart => {
72       'accno:tail::like' => '1200'
73     }
74   },
75 },
76 {
77   query => [ 'customer.chart.accno' => { like => '%1200' } ],
78   with_objects => bag('customer', 'chart' ),
79 }, 'all together';
80
81
82 test {
83   customer => {
84     name => 'test',
85   },
86   invoice => {
87     customer => {
88       name => 'test',
89     },
90   },
91 }, {
92   'query' => [ %{{
93                'invoice.customer.name'  => 'test',
94                'customer.name'          => 'test',
95              }} ],
96   'with_objects' => bag( 'invoice', 'customer' )
97 }, 'object in more than one relationship';
98
99 test {
100   'orddate:date::' => 'lt',
101   'orddate:date' => '20.3.2010',
102 }, {
103     'query' => [
104                  'orddate' => { 'lt' => isa('DateTime') }
105                ]
106
107 }, 'method dispatch and date constructor';
108
109 test {
110   id => [
111     123, 125, 157
112   ]
113 }, {
114   query => [ id => [ 123,125,157 ] ],
115 }, 'arrays as value';
116
117 test {
118   'sellprice:number' => [
119     '123,4', '2,34', '0,4',
120   ]
121 }, {
122   query => [
123     sellprice => [ 123.4, 2.34, 0.4 ],
124   ],
125 }, 'arrays with filter';
126