View | Details | Raw Unified | Return to bug 10855
Collapse All | Expand All

(-)a/t/db_dependent/AdditionalField.t (-1 / +271 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
3
use Modern::Perl;
4
use Test::More tests => 34;
5
6
use C4::Context;
7
use Koha::AdditionalField;
8
9
my $dbh = C4::Context->dbh;
10
$dbh->{AutoCommit} = 0;
11
$dbh->{RaiseError} = 1;
12
13
$dbh->do( q|DELETE FROM additional_fields| );
14
$dbh->do( q|DELETE FROM additional_field_values| );
15
16
my $afs = Koha::AdditionalField->all;
17
is( scalar( @$afs ), 0, "all: there is no additional field" );
18
19
my $af1_name = q|af1|;
20
my $af1 = Koha::AdditionalField->new({
21
    tablename => 'subscription',
22
    name => $af1_name,
23
    authorised_values_category => '',
24
    marcfield => '',
25
    searchable => 1,
26
});
27
is ( $af1->name, $af1_name, "new: name value is kept" );
28
29
$af1->insert;
30
like ( $af1->id, qr|^\d+$|, "new: populate id value" );
31
32
my $af2_name = q|af2|;
33
my $af2_marcfield = q|200$a|;
34
my $af2_searchable = 1;
35
my $af2_tablename = q|subscription|;
36
my $af2_avc = q|LOST|;
37
my $af2 = Koha::AdditionalField->new({
38
    tablename => $af2_tablename,
39
    name => $af2_name,
40
    authorised_value_category => $af2_avc,
41
    marcfield => $af2_marcfield,
42
    searchable => $af2_searchable,
43
});
44
$af2->insert;
45
my $af2_id = $af2->id;
46
$af2 = Koha::AdditionalField->new({ id => $af2_id })->fetch;
47
is( ref($af2) , q|Koha::AdditionalField|, "fetch: return an object" );
48
is( $af2->id, $af2_id, "fetch: id for af2" );
49
is( $af2->tablename, $af2_tablename, "fetch: tablename for af2" );
50
is( $af2->name, $af2_name, "fetch: name for af2" );
51
is( $af2->authorised_value_category, $af2_avc, "fetch: authorised_value_category for af2" );
52
is( $af2->marcfield, $af2_marcfield, "fetch: marcfield for af2" );
53
is( $af2->searchable, $af2_searchable, "fetch: searchable for af2" );
54
55
my $af3 = Koha::AdditionalField->new({
56
    tablename => 'a_table',
57
    name => q|af3|,
58
    authorised_value_category => '',
59
    marcfield => '',
60
    searchable => 1,
61
});
62
$af3->insert;
63
64
my $af_common = Koha::AdditionalField->new({
65
    tablename => 'subscription',
66
    name => q|common|,
67
    authorised_value_category => '',
68
    marcfield => '',
69
    searchable => 1,
70
});
71
$af_common->insert;
72
73
# update
74
$af3->{tablename} = q|another_table|;
75
$af3->{name} = q|af3_mod|;
76
$af3->{authorised_value_category} = q|LOST|;
77
$af3->{marcfield} = q|200$a|;
78
$af3->{searchable} = 0;
79
my $updated = $af3->update;
80
$af3 = Koha::AdditionalField->new({ id => $af3->id })->fetch;
81
is( $updated, 1, "update: return number of affected rows" );
82
is( $af3->tablename, q|a_table|, "update: tablename is *not* updated, there is no sense to copy a field to another table" );
83
is( $af3->name, q|af3_mod|, "update: name" );
84
is( $af3->authorised_value_category, q|LOST|, "update: authorised_value_category" );
85
is( $af3->marcfield, q|200$a|, "update: marcfield" );
86
is( $af3->searchable, q|0|, "update: searchable" );
87
88
# fetch all
89
$afs = Koha::AdditionalField->all;
90
is( scalar( @$afs ), 4, "all: got 4 additional fields" );
91
$afs = Koha::AdditionalField->all({tablename => 'subscription'});
92
is( scalar( @$afs ), 3, "all: got 3 additional fields for the subscription table" );
93
$afs = Koha::AdditionalField->all({searchable => 1});
94
is( scalar( @$afs ), 3, "all: got 3 searchable additional fields" );
95
$af3->delete;
96
$afs = Koha::AdditionalField->all;
97
is( scalar( @$afs ), 3, "all: got 3 additional fields after deleting one" );
98
99
100
# Testing additional field values
101
102
## Creating 2 subscriptions
103
use C4::Acquisition;
104
use C4::Biblio;
105
use C4::Budgets;
106
use C4::Serials;
107
108
my $booksellerid = C4::Bookseller::AddBookseller(
109
    {
110
        name => "my vendor",
111
        address1 => "bookseller's address",
112
        phone => "0123456",
113
        active => 1
114
    }
115
);
116
117
my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, '');
118
my $budgetid;
119
my $bpid = AddBudgetPeriod({
120
    budget_period_startdate => '01-01-2015',
121
    budget_period_enddate   => '12-31-2015',
122
    budget_description      => "budget desc"
123
});
124
125
my $budget_id = AddBudget({
126
    budget_code        => "ABCD",
127
    budget_amount      => "123.132",
128
    budget_name        => "Périodiques",
129
    budget_notes       => "This is a note",
130
    budget_description => "Serials",
131
    budget_active      => 1,
132
    budget_period_id   => $bpid
133
});
134
135
my $subscriptionid1 = NewSubscription(
136
    undef,      "",     undef, undef, $budget_id, $biblionumber, '01-01-2013',undef,
137
    undef,      undef,  undef, undef, undef,      undef,         undef,  undef,
138
    undef,      undef,  undef, undef, undef,      undef,         undef,  undef,
139
    undef,      undef,  undef, undef, undef,      undef,         undef,  1,
140
    "notes",    undef,  undef, undef, undef,      undef,         undef,  0,
141
    "intnotes", 0,      undef, undef, 0,          undef,         '31-12-2013',
142
);
143
144
my $subscriptionid2 = NewSubscription(
145
    undef,      "",     undef, undef, $budget_id, $biblionumber, '01-01-2013',undef,
146
    undef,      undef,  undef, undef, undef,      undef,         undef,  undef,
147
    undef,      undef,  undef, undef, undef,      undef,         undef,  undef,
148
    undef,      undef,  undef, undef, undef,      undef,         undef,  1,
149
    "notes",    undef,  undef, undef, undef,      undef,         undef,  0,
150
    "intnotes", 0,      undef, undef, 0,          undef,         '31-12-2013',
151
);
152
153
# insert
154
my $af1_values = {
155
    $subscriptionid1 => "value_for_af1_$subscriptionid1",
156
    $subscriptionid2 => "value_for_af1_$subscriptionid2",
157
};
158
$af1->{values} = $af1_values;
159
$af1->insert_values;
160
161
my $af2_values = {
162
    $subscriptionid1 => "old_value_for_af2_$subscriptionid1",
163
    $subscriptionid2 => "old_value_for_af2_$subscriptionid2",
164
};
165
$af2->{values} = $af2_values;
166
$af2->insert_values;
167
my $new_af2_values = {
168
    $subscriptionid1 => "value_for_af2_$subscriptionid1",
169
    $subscriptionid2 => "value_for_af2_$subscriptionid2",
170
};
171
$af2->{values} = $new_af2_values;
172
$af2->insert_values; # Insert should replace old values
173
174
my $common_values = {
175
    $subscriptionid1 => 'common_value',
176
    $subscriptionid2 => 'common_value',
177
};
178
179
$af_common->{values} = $common_values;
180
$af_common->insert_values;
181
182
# fetch_values
183
$af1 = Koha::AdditionalField->new({ id => $af1->id })->fetch;
184
$af2 = Koha::AdditionalField->new({ id => $af2->id })->fetch;
185
186
$af1->fetch_values;
187
is_deeply ( $af1->values, {$subscriptionid1 => qq|value_for_af1_$subscriptionid1|, $subscriptionid2 => qq|value_for_af1_$subscriptionid2| }, "fetch_values: without argument, returns 2 records" );
188
$af1->fetch_values({ record_id => $subscriptionid1 });
189
is_deeply ( $af1->values, {$subscriptionid1 => qq|value_for_af1_$subscriptionid1|}, "fetch_values: values for af1 and subscription1" );
190
$af2->fetch_values({ record_id => $subscriptionid2 });
191
is_deeply ( $af2->values, {$subscriptionid2 => qq|value_for_af2_$subscriptionid2|}, "fetch_values: values for af2 and subscription2" );
192
193
# fetch_all_values
194
eval{
195
    $af1->fetch_all_values;
196
};
197
like ( $@, qr|^BAD CALL|, 'fetch_all_values: fail if called with a blessed object' );
198
199
my $fetched_values = Koha::AdditionalField->fetch_all_values({ tablename => 'subscription' });
200
my $expected_values = {
201
    $subscriptionid1 => {
202
        $af1_name => qq|value_for_af1_$subscriptionid1|,
203
        $af2_name => qq|value_for_af2_$subscriptionid1|,
204
        'common' => q|common_value|,
205
    },
206
    $subscriptionid2 => {
207
        $af1_name => qq|value_for_af1_$subscriptionid2|,
208
        $af2_name => qq|value_for_af2_$subscriptionid2|,
209
        'common' => q|common_value|,
210
    }
211
};
212
is_deeply ( $fetched_values, $expected_values, "fetch_all_values: values for table subscription" );
213
214
my $expected_values_1 = {
215
    $subscriptionid1 => {
216
        $af1_name => qq|value_for_af1_$subscriptionid1|,
217
        $af2_name => qq|value_for_af2_$subscriptionid1|,
218
        common => q|common_value|,
219
    }
220
};
221
my $fetched_values_1 = Koha::AdditionalField->fetch_all_values({ tablename => 'subscription', record_id => $subscriptionid1 });
222
is_deeply ( $fetched_values_1, $expected_values_1, "fetch_all_values: values for subscription1" );
223
224
# get_matching_record_ids
225
eval{
226
    $af1->get_matching_record_ids;
227
};
228
like ( $@, qr|^BAD CALL|, 'get_matching_record_ids: fail if called with a blessed object' );
229
230
my $matching_record_ids = Koha::AdditionalField->get_matching_record_ids;
231
is_deeply ( $matching_record_ids, [], "get_matching_record_ids: return [] if no argument given" );
232
$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription' });
233
is_deeply ( $matching_record_ids, [], "get_matching_record_ids: return [] if no field given" );
234
235
my $fields = [
236
    {
237
        name => $af1_name,
238
        value => qq|value_for_af1_$subscriptionid1|
239
    }
240
];
241
$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription', fields => $fields });
242
is_deeply ( $matching_record_ids, [ $subscriptionid1 ], "get_matching_record_ids: field $af1_name: value_for_af1_$subscriptionid1 matches subscription1" );
243
244
$fields = [
245
    {
246
        name => $af1_name,
247
        value => qq|value_for_af1_$subscriptionid1|
248
    },
249
    {
250
        name => $af2_name,
251
        value => qq|value_for_af2_$subscriptionid1|,
252
    }
253
];
254
$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription', fields => $fields });
255
is_deeply ( $matching_record_ids, [ $subscriptionid1 ], "get_matching_record_ids: fields $af1_name:value_for_af1_$subscriptionid1 and $af2_name:value_for_af2_$subscriptionid1 match subscription1" );
256
257
$fields = [
258
    {
259
        name => 'common',
260
        value => q|common_value|,
261
    }
262
];
263
$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription', fields => $fields });
264
my $exists = grep /$subscriptionid1/, @$matching_record_ids;
265
is ( $exists, 1, "get_matching_record_ids: field common: common_value matches subscription1" );
266
$exists = grep /$subscriptionid2/, @$matching_record_ids;
267
is ( $exists, 1, "get_matching_record_ids: field common: common_value matches subscription2 too" );
268
$exists = grep /not_existent_id/, @$matching_record_ids;
269
is ( $exists, 0, "get_matching_record_ids: field common: common_value does not inexistent id" );
270
271
$dbh->rollback;

Return to bug 10855