Bug 12603: creating TestBuilder to simplify tests
[koha.git] / t / db_dependent / TestBuilder.t
1 #!/usr/bin/perl
2
3 # This file is part of Koha.
4 #
5 # Copyright 2014 - Biblibre SARL
6 #
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20 use Modern::Perl;
21 use Test::More tests => 40;
22
23 BEGIN {
24     use_ok('t::lib::TestBuilder');
25 }
26
27
28 my $builder = t::lib::TestBuilder->new();
29
30 is( $builder->build(), undef, 'build without arguments returns undef' );
31
32 my @sources    = $builder->schema->sources;
33 my $nb_failure = 0;
34 for my $source (@sources) {
35     eval { $builder->build( { source => $source } ); };
36     $nb_failure++ if ($@);
37 }
38 is( $nb_failure, 0, 'TestBuilder can create a entry for every sources' );
39
40 my $my_overduerules_transport_type = {
41     message_transport_type => {
42         message_transport_type => 'my msg_t_t',
43     },
44     letternumber => 1,
45     branchcode   => {
46         branchcode   => 'codeB',
47         categorycode => 'codeC',
48     },
49     categorycode => undef,
50 };
51 $my_overduerules_transport_type->{categorycode} = $my_overduerules_transport_type->{branchcode};
52 my $overduerules_transport_type = $builder->build({
53     source => 'OverduerulesTransportType',
54     value  => $my_overduerules_transport_type,
55 });
56 is(
57     $overduerules_transport_type->{message_transport_type},
58     $my_overduerules_transport_type->{message_transport_type}->{message_transport_type},
59     'build stores the message_transport_type correctly'
60 );
61 is(
62     $overduerules_transport_type->{letternumber},
63     $my_overduerules_transport_type->{letternumber},
64     'build stores the letternumber correctly'
65 );
66 is(
67     $overduerules_transport_type->{branchcode},
68     $my_overduerules_transport_type->{branchcode}->{branchcode},
69     'build stores the branchcode correctly'
70 );
71 is(
72     $overduerules_transport_type->{categorycode},
73     $my_overduerules_transport_type->{categorycode}->{categorycode},
74     'build stores the categorycode correctly'
75 );
76 is(
77     $overduerules_transport_type->{_fk}->{message_transport_type}->{message_transport_type},
78     $my_overduerules_transport_type->{message_transport_type}->{message_transport_type},
79     'build stores the foreign key message_transport_type correctly'
80 );
81 is(
82     $overduerules_transport_type->{_fk}->{branchcode}->{branchcode},
83     $my_overduerules_transport_type->{branchcode}->{branchcode},
84     'build stores the foreign key branchcode correctly'
85 );
86 is(
87     $overduerules_transport_type->{_fk}->{categorycode}->{categorycode},
88     $my_overduerules_transport_type->{categorycode}->{categorycode},
89     'build stores the foreign key categorycode correctly'
90 );
91 is_deeply(
92     $overduerules_transport_type->{_fk}->{branchcode},
93     $overduerules_transport_type->{_fk}->{categorycode},
94     'build links the branchcode and the categorycode correctly'
95 );
96 isnt(
97     $overduerules_transport_type->{_fk}->{branchcode}->{letter2},
98     undef,
99     'build generates values if they are not given'
100 );
101
102 my $my_user_permission = $t::lib::TestBuilder::default_value->{UserPermission};
103 my $user_permission = $builder->build({
104     source => 'UserPermission',
105 });
106 isnt(
107     $user_permission->{borrowernumber},
108     undef,
109     'build generates a borrowernumber correctly'
110 );
111 is(
112     $user_permission->{module_bit},
113     $my_user_permission->{module_bit}->{module_bit}->{bit},
114     'build stores the default value correctly'
115 );
116 is(
117     $user_permission->{code},
118     $my_user_permission->{module_bit}->{code},
119     'build stores the default value correctly'
120 );
121 is(
122     $user_permission->{borrowernumber},
123     $user_permission->{_fk}->{borrowernumber}->{borrowernumber},
124     'build links the foreign key correctly'
125 );
126 is(
127     $user_permission->{_fk}->{borrowernumber}->{surname},
128     $my_user_permission->{borrowernumber}->{surname},
129     'build stores the foreign key value correctly'
130 );
131 is(
132     $user_permission->{_fk}->{borrowernumber}->{address},
133     $my_user_permission->{borrowernumber}->{address},
134     'build stores the foreign key value correctly'
135 );
136 is(
137     $user_permission->{_fk}->{borrowernumber}->{city},
138     $my_user_permission->{borrowernumber}->{city},
139     'build stores the foreign key value correctly'
140 );
141 is(
142     $user_permission->{_fk}->{borrowernumber}->{_fk}->{branchcode}->{branchcode},
143     $my_user_permission->{borrowernumber}->{branchcode}->{branchcode},
144     'build stores the foreign key value correctly'
145 );
146 is(
147     $user_permission->{_fk}->{borrowernumber}->{_fk}->{branchcode}->{branchname},
148     $my_user_permission->{borrowernumber}->{branchcode}->{branchname},
149     'build stores the foreign key value correctly'
150 );
151 is(
152     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{categorycode},
153     $my_user_permission->{borrowernumber}->{categorycode}->{categorycode},
154     'build stores the foreign key value correctly'
155 );
156 is(
157     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{hidelostitems},
158     $my_user_permission->{borrowernumber}->{categorycode}->{hidelostitems},
159     'build stores the foreign key value correctly'
160 );
161 is(
162     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{category_type},
163     $my_user_permission->{borrowernumber}->{categorycode}->{category_type},
164     'build stores the foreign key value correctly'
165 );
166 is(
167     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{defaultprivacy},
168     $my_user_permission->{borrowernumber}->{categorycode}->{defaultprivacy},
169     'build stores the foreign key value correctly'
170 );
171 is(
172     $user_permission->{_fk}->{borrowernumber}->{privacy},
173     $my_user_permission->{borrowernumber}->{privacy},
174     'build stores the foreign key value correctly'
175 );
176 is(
177     $user_permission->{_fk}->{module_bit}->{_fk}->{module_bit}->{bit},
178     $my_user_permission->{module_bit}->{module_bit}->{bit},
179     'build stores the foreign key value correctly'
180 );
181 is(
182     $user_permission->{_fk}->{module_bit}->{code},
183     $my_user_permission->{module_bit}->{code},
184     'build stores the foreign key value correctly'
185 );
186 is_deeply(
187     $user_permission->{_fk}->{module_bit},
188     $user_permission->{_fk}->{code},
189     'build links the codes correctly'
190 );
191 isnt(
192     $user_permission->{_fk}->{borrowernumber}->{cardnumber},
193     undef,
194     'build generates values if they are not given'
195 );
196 isnt(
197     $user_permission->{_fk}->{borrowernumber}->{_fk}->{branchcode}->{branchaddress1},
198     undef,
199     'build generates values if they are not given'
200 );
201 isnt(
202     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{description},
203     undef,
204     'build generates values if they are not given'
205 );
206 isnt(
207     $user_permission->{_fk}->{module_bit}->{description},
208     undef,
209     'build generates values if they are not given'
210 );
211 isnt(
212     $user_permission->{_fk}->{module_bit}->{_fk}->{module_bit}->{flag},
213     undef,
214     'build generates values if they are not given'
215 );
216
217
218 my $nb_basket = $builder->schema->resultset('Aqbasket')->search();
219 isnt( $nb_basket, 0, 'add stores the generated entries correctly' );
220 $builder->clear( { source => 'Aqbasket' } );
221 $nb_basket = $builder->schema->resultset('Aqbasket')->search();
222 is( $nb_basket, 0, 'clear removes all the entries correctly' );
223
224
225 my $rs_aqbookseller = $builder->schema->resultset('Aqbookseller');
226 my $bookseller = $builder->build({
227     source  => 'Aqbookseller',
228     only_fk => 1,
229 });
230 delete $bookseller->{_fk};
231 my $bookseller_from_db = $rs_aqbookseller->find($bookseller);
232 is( $bookseller_from_db, undef, 'build with only_fk = 1 does not store the entry' );
233 my $bookseller_result = $rs_aqbookseller->create($bookseller);
234 is( $bookseller_result->in_storage, 1, 'build with only_fk = 1 creates the foreign keys correctly' );
235
236 $bookseller = $builder->build({
237     source  => 'Aqbookseller',
238 });
239 delete $bookseller->{_fk};
240 $bookseller_from_db = $rs_aqbookseller->find($bookseller);
241 is( $bookseller_from_db->in_storage, 1, 'build without the parameter only_sk stores the entry correctly' );
242
243 $bookseller = $builder->build({
244     source  => 'Aqbookseller',
245     only_fk => 0,
246 });
247 delete $bookseller->{_fk};
248 $bookseller_from_db = $rs_aqbookseller->find($bookseller);
249 is( $bookseller_from_db->in_storage, 1, 'build with only_fk = 0 stores the entry correctly' );