Bug 16860: Catch warning t/db_dependent/ClassSource.t
[koha.git] / t / db_dependent / ClassSource.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4
5 use Test::More tests => 25;
6 use Test::Warn;
7
8 use C4::Context;
9
10 BEGIN {
11     use_ok('C4::ClassSource');
12 }
13 can_ok( 'C4::ClassSource',
14     qw( AddClassSortRule
15         AddClassSource
16         GetClassSort
17         GetClassSortRule
18         GetClassSortRules
19         GetClassSource
20         GetClassSources
21         DelClassSortRule
22         DelClassSource
23         GetSourcesForSortRule
24         ModClassSortRule
25         ModClassSource)
26 );
27
28 #Start transaction
29 my $dbh = C4::Context->dbh;
30 $dbh->{RaiseError} = 1;
31 $dbh->{AutoCommit} = 0;
32
33 #Start tests
34 $dbh->do(q|DELETE FROM class_sources|);
35 $dbh->do(q|DELETE FROM class_sort_rules|);
36
37 #Test AddClassSortRule
38 my $countSources  = scalar( keys(%{ GetClassSources() }) );
39 my $countSources2 = scalar( keys(%{ GetClassSortRules() }) );
40 AddClassSortRule( 'sortrule1', 'description1', 'routine1' );
41 AddClassSortRule( 'sortrule2', 'description2', 'routine2' );
42 is(
43     scalar( keys(%{ GetClassSortRules() }) ),
44     $countSources + 2,
45     "SortRule1 and SortRules2 have been added"
46 );
47
48 #Test AddClassSource
49 AddClassSource( 'source1', 'Description_source1', 1, 'sortrule1' );
50 AddClassSource( 'source2', 'Description_source2', 0, 'sortrule1' );
51 is(
52     scalar( keys(%{ GetClassSources() }) ),
53     $countSources2 + 2,
54     "Source1 and source2 have been added"
55 );
56
57 #Test GetClassSortRule
58 is_deeply(
59     GetClassSortRule('sortrule1'),
60     {
61         class_sort_rule => 'sortrule1',
62         description     => 'description1',
63         sort_routine    => 'routine1'
64     },
65     "GetClassSort gives sortrule1's information"
66 );
67 is_deeply( GetClassSortRule(), undef,
68     "GetClassSort without params returns undef" );
69 is_deeply( GetClassSortRule('doesnt_exist'),
70     undef, "GetClassSort with an id which doesn't exist returns undef" );
71
72 #Test GetClassSortRules
73 my $getsortrules = GetClassSortRules();
74 is_deeply(
75     $getsortrules,
76     {
77         sortrule1 => {
78             class_sort_rule => 'sortrule1',
79             description     => 'description1',
80             sort_routine    => 'routine1'
81         },
82         sortrule2 => {
83             class_sort_rule => 'sortrule2',
84             description     => 'description2',
85             sort_routine    => 'routine2'
86         }
87     },
88     "GetClassSortRules returns the id off all SortRule and their information"
89 );
90
91 #Test GetClassSource
92 my $getsource1 = GetClassSource('source1');
93 is_deeply(
94     $getsource1,
95     {
96         cn_source       => 'source1',
97         description     => 'Description_source1',
98         used            => 1,
99         class_sort_rule => 'sortrule1'
100     },
101     "GetClassSource gives source1's information"
102 );
103 is_deeply( GetClassSource(), undef,
104     "GetClassSource without params returns undef" );
105 is_deeply( GetClassSource('doesnt_exist'),
106     undef, "GetClassSource with an id which doesn't exist returns undef" );
107
108 #Test GetClassSources
109 my $getsources = GetClassSources();
110 is_deeply(
111     $getsources,
112     {
113         source1 => {
114             cn_source       => 'source1',
115             description     => 'Description_source1',
116             used            => 1,
117             class_sort_rule => 'sortrule1'
118         },
119         source2 => {
120             cn_source       => 'source2',
121             description     => 'Description_source2',
122             used            => 0,
123             class_sort_rule => 'sortrule1'
124         }
125     },
126     "GetClassSources returns the id off all sources and their information"
127 );
128
129 #Test GetClassSort
130 my $getclassSort;
131 #Note: Create a warning:" attempting to use non-existent class sorting routine $sort_routine"
132 warning_like
133     { $getclassSort = GetClassSort( 'source1', 'sortrule1', 'item1' ) }
134     qr/attempting to use non-existent class sorting routine/,
135     'Non-existent class warning caught';
136 is( $getclassSort, "SORTRULE1_ITEM1",
137 " the sort key corresponding to Source1 and sortrule1 and item1 is SORTRULE1_ITEM1"
138 );
139
140 #Test GetSourcesForSorSortRule
141 my @sources = GetSourcesForSortRule('sortrule1');
142 is_deeply(
143     \@sources,
144     [ 'source1', 'source2' ],
145     "Sortrule1 has source1 and source2"
146 );
147 @sources = GetSourcesForSortRule();
148 is_deeply( \@sources, [],
149     "Without params GetSourcesForSortRule returns an empty array" );
150 @sources = GetSourcesForSortRule('doesnt_exist');
151 is_deeply( \@sources, [],
152     "With a wrong params GetSourcesForSortRule returns an empty array" );
153
154 #Test DelClassSortRule
155 #DelClassSortRule ('sortrule1');
156 #is(scalar (keys (%{ GetClassSortRules() })),1,"SortRule1 has been deleted");#FIXME : impossible if some sources exist
157 DelClassSortRule('sortrule2');
158 is( scalar( keys(%{ GetClassSortRules() }) ), 1, "SortRule2 has been deleted" );
159 DelClassSortRule();
160 is( scalar( keys(%{ GetClassSortRules() }) ),
161     1, "Without params DelClassSortRule doesn't do anything" );
162 DelClassSortRule('doesnt_exist');
163 is( scalar( keys(%{ GetClassSortRules() }) ),
164     1, "With wrong id, DelClassSortRule doesn't do anything" );
165
166 #Test DelClassSource
167 DelClassSource('source2');
168 is( scalar( keys(%{ GetClassSources() }) ), 1, "Source2 has been deleted" );
169 DelClassSource();
170 is( scalar( keys(%{ GetClassSources() }) ),
171     1, "Without params DelClassSource doesn't do anything" );
172 DelClassSource('doesnt_exist');
173 is( scalar( keys(%{ GetClassSources() }) ),
174     1, "With wrong id, DelClassSource doesn't do anything" );
175
176 #Test ModClassSortRule
177 ModClassSortRule( 'sortrule1', 'description1_modified', 'routine1_modified' );
178 is_deeply(
179     GetClassSortRule('sortrule1'),
180     {
181         class_sort_rule => 'sortrule1',
182         description     => 'description1_modified',
183         sort_routine    => 'routine1_modified'
184     },
185     "Sortrule1 has been modified"
186 );
187
188 #Test ModClassSource
189 ModClassSource( 'source1', 'Description_source1_modified', 0, 'sortrule1' );
190 is_deeply(
191     GetClassSource('source1'),
192     {
193         cn_source       => 'source1',
194         description     => 'Description_source1_modified',
195         used            => 0,
196         class_sort_rule => 'sortrule1'
197     },
198     "Source1 has been modified"
199 );
200
201 #End transaction
202 $dbh->rollback;