Bug 14985: dbms expects a iso formatted date
[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
22 use Test::More tests => 41;
23
24 use Koha::Database;
25
26 BEGIN {
27     use_ok('t::lib::TestBuilder');
28 }
29
30 my $schema  = Koha::Database->new->schema;
31 $schema->storage->txn_begin;
32
33 my $builder = t::lib::TestBuilder->new();
34
35 is( $builder->build(), undef, 'build without arguments returns undef' );
36
37 my @sources    = $builder->schema->sources;
38 my @source_in_failure;
39 for my $source (@sources) {
40     eval { $builder->build( { source => $source } ); };
41     push @source_in_failure, $source if $@;
42 }
43 is( @source_in_failure, 0, 'TestBuilder should be able to create an object for every sources' );
44 if ( @source_in_failure ) {
45     diag ("The following sources have not been generated correctly: " . join ', ', @source_in_failure)
46 }
47
48 my $my_overduerules_transport_type = {
49     message_transport_type => {
50         message_transport_type => 'my msg_t_t',
51     },
52     letternumber => 1,
53     branchcode   => {
54         branchcode   => 'codeB',
55         categorycode => 'codeC',
56     },
57     categorycode => undef,
58 };
59 $my_overduerules_transport_type->{categorycode} = $my_overduerules_transport_type->{branchcode};
60 my $overduerules_transport_type = $builder->build({
61     source => 'OverduerulesTransportType',
62     value  => $my_overduerules_transport_type,
63 });
64 is(
65     $overduerules_transport_type->{message_transport_type},
66     $my_overduerules_transport_type->{message_transport_type}->{message_transport_type},
67     'build stores the message_transport_type correctly'
68 );
69 is(
70     $overduerules_transport_type->{letternumber},
71     $my_overduerules_transport_type->{letternumber},
72     'build stores the letternumber correctly'
73 );
74 is(
75     $overduerules_transport_type->{branchcode},
76     $my_overduerules_transport_type->{branchcode}->{branchcode},
77     'build stores the branchcode correctly'
78 );
79 is(
80     $overduerules_transport_type->{categorycode},
81     $my_overduerules_transport_type->{categorycode}->{categorycode},
82     'build stores the categorycode correctly'
83 );
84 is(
85     $overduerules_transport_type->{_fk}->{message_transport_type}->{message_transport_type},
86     $my_overduerules_transport_type->{message_transport_type}->{message_transport_type},
87     'build stores the foreign key message_transport_type correctly'
88 );
89 is(
90     $overduerules_transport_type->{_fk}->{branchcode}->{branchcode},
91     $my_overduerules_transport_type->{branchcode}->{branchcode},
92     'build stores the foreign key branchcode correctly'
93 );
94 is(
95     $overduerules_transport_type->{_fk}->{categorycode}->{categorycode},
96     $my_overduerules_transport_type->{categorycode}->{categorycode},
97     'build stores the foreign key categorycode correctly'
98 );
99 is_deeply(
100     $overduerules_transport_type->{_fk}->{branchcode},
101     $overduerules_transport_type->{_fk}->{categorycode},
102     'build links the branchcode and the categorycode correctly'
103 );
104 isnt(
105     $overduerules_transport_type->{_fk}->{branchcode}->{letter2},
106     undef,
107     'build generates values if they are not given'
108 );
109
110 my $my_user_permission = $t::lib::TestBuilder::default_value->{UserPermission};
111 my $user_permission = $builder->build({
112     source => 'UserPermission',
113 });
114 isnt(
115     $user_permission->{borrowernumber},
116     undef,
117     'build generates a borrowernumber correctly'
118 );
119 is(
120     $user_permission->{module_bit},
121     $my_user_permission->{module_bit}->{module_bit}->{bit},
122     'build stores the default value correctly'
123 );
124 is(
125     $user_permission->{code},
126     $my_user_permission->{module_bit}->{code},
127     'build stores the default value correctly'
128 );
129 is(
130     $user_permission->{borrowernumber},
131     $user_permission->{_fk}->{borrowernumber}->{borrowernumber},
132     'build links the foreign key correctly'
133 );
134 is(
135     $user_permission->{_fk}->{borrowernumber}->{surname},
136     $my_user_permission->{borrowernumber}->{surname},
137     'build stores the foreign key value correctly'
138 );
139 is(
140     $user_permission->{_fk}->{borrowernumber}->{address},
141     $my_user_permission->{borrowernumber}->{address},
142     'build stores the foreign key value correctly'
143 );
144 is(
145     $user_permission->{_fk}->{borrowernumber}->{city},
146     $my_user_permission->{borrowernumber}->{city},
147     'build stores the foreign key value correctly'
148 );
149 is(
150     $user_permission->{_fk}->{borrowernumber}->{_fk}->{branchcode}->{branchcode},
151     $my_user_permission->{borrowernumber}->{branchcode}->{branchcode},
152     'build stores the foreign key value correctly'
153 );
154 is(
155     $user_permission->{_fk}->{borrowernumber}->{_fk}->{branchcode}->{branchname},
156     $my_user_permission->{borrowernumber}->{branchcode}->{branchname},
157     'build stores the foreign key value correctly'
158 );
159 is(
160     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{categorycode},
161     $my_user_permission->{borrowernumber}->{categorycode}->{categorycode},
162     'build stores the foreign key value correctly'
163 );
164 is(
165     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{hidelostitems},
166     $my_user_permission->{borrowernumber}->{categorycode}->{hidelostitems},
167     'build stores the foreign key value correctly'
168 );
169 is(
170     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{category_type},
171     $my_user_permission->{borrowernumber}->{categorycode}->{category_type},
172     'build stores the foreign key value correctly'
173 );
174 is(
175     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{defaultprivacy},
176     $my_user_permission->{borrowernumber}->{categorycode}->{defaultprivacy},
177     'build stores the foreign key value correctly'
178 );
179 is(
180     $user_permission->{_fk}->{borrowernumber}->{privacy},
181     $my_user_permission->{borrowernumber}->{privacy},
182     'build stores the foreign key value correctly'
183 );
184 is(
185     $user_permission->{_fk}->{module_bit}->{_fk}->{module_bit}->{bit},
186     $my_user_permission->{module_bit}->{module_bit}->{bit},
187     'build stores the foreign key value correctly'
188 );
189 is(
190     $user_permission->{_fk}->{module_bit}->{code},
191     $my_user_permission->{module_bit}->{code},
192     'build stores the foreign key value correctly'
193 );
194 is_deeply(
195     $user_permission->{_fk}->{module_bit},
196     $user_permission->{_fk}->{code},
197     'build links the codes correctly'
198 );
199 isnt(
200     $user_permission->{_fk}->{borrowernumber}->{cardnumber},
201     undef,
202     'build generates values if they are not given'
203 );
204 isnt(
205     $user_permission->{_fk}->{borrowernumber}->{_fk}->{branchcode}->{branchaddress1},
206     undef,
207     'build generates values if they are not given'
208 );
209 isnt(
210     $user_permission->{_fk}->{borrowernumber}->{_fk}->{categorycode}->{description},
211     undef,
212     'build generates values if they are not given'
213 );
214 isnt(
215     $user_permission->{_fk}->{module_bit}->{description},
216     undef,
217     'build generates values if they are not given'
218 );
219 isnt(
220     $user_permission->{_fk}->{module_bit}->{_fk}->{module_bit}->{flag},
221     undef,
222     'build generates values if they are not given'
223 );
224
225
226 my $nb_basket = $builder->schema->resultset('Aqbasket')->search();
227 isnt( $nb_basket, 0, 'add stores the generated entries correctly' );
228 $builder->clear( { source => 'Aqbasket' } );
229 $nb_basket = $builder->schema->resultset('Aqbasket')->search();
230 is( $nb_basket, 0, 'clear removes all the entries correctly' );
231
232
233 my $rs_aqbookseller = $builder->schema->resultset('Aqbookseller');
234 my $bookseller = $builder->build({
235     source  => 'Aqbookseller',
236     only_fk => 1,
237 });
238 delete $bookseller->{_fk};
239 my $bookseller_from_db = $rs_aqbookseller->find($bookseller);
240 is( $bookseller_from_db, undef, 'build with only_fk = 1 does not store the entry' );
241 my $bookseller_result = $rs_aqbookseller->create($bookseller);
242 is( $bookseller_result->in_storage, 1, 'build with only_fk = 1 creates the foreign keys correctly' );
243
244 $bookseller = $builder->build({
245     source  => 'Aqbookseller',
246 });
247 ok( length( $bookseller->{phone} ) <= 30, 'The length for a generated string should not be longer than the size of the DB field' );
248 delete $bookseller->{_fk};
249 $bookseller_from_db = $rs_aqbookseller->find($bookseller);
250 is( $bookseller_from_db->in_storage, 1, 'build without the parameter only_sk stores the entry correctly' );
251
252 $bookseller = $builder->build({
253     source  => 'Aqbookseller',
254     only_fk => 0,
255 });
256 delete $bookseller->{_fk};
257 $bookseller_from_db = $rs_aqbookseller->find($bookseller);
258 is( $bookseller_from_db->in_storage, 1, 'build with only_fk = 0 stores the entry correctly' );
259
260 $schema->storage->txn_rollback;
261
262 1;