5 use Test
::More tests
=> 25;
8 use List
::Util
qw( shuffle );
11 my $dbh = C4
::Context
->dbh;
12 $dbh->{AutoCommit
} = 0;
13 $dbh->{RaiseError
} = 1;
15 use_ok
('Koha::DateUtils');
16 use_ok
('C4::Search::History');
19 my $previous_sessionid = "PREVIOUS_SESSIONID";
20 my $current_sessionid = "CURRENT_SESSIONID";
22 my $query_cgi_b = q{idx=kw&idx=ti&idx=au%2Cwrdl&q=word1é&q=word2è&q=word3à&do=Search&sort_by=author_az};
23 my $query_cgi_a = q{op=do_search&type=opac&authtypecode=NP&operator=start&value=Harry&marclist=match&and_or=and&orderby=HeadingAsc};
26 my $added = add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
27 is
( $added, 9, '9 searches are added' );
30 my $searches_for_userid = C4
::Search
::History
::get
({
33 is
( scalar(@
$searches_for_userid), 9, 'There are 9 searches in all' );
35 my $searches_for_current_session = C4
::Search
::History
::get
({
37 sessionid
=> $current_sessionid,
39 is
( scalar(@
$searches_for_current_session), 5, 'There are 5 searches for the current session' );
41 my $searches_for_previous_sessions = C4
::Search
::History
::get
({
43 sessionid
=> $current_sessionid,
46 is
( scalar(@
$searches_for_previous_sessions), 4, 'There are 4 searches for previous sessions' );
48 my $authority_searches_for_current_session = C4
::Search
::History
::get
({
50 sessionid
=> $current_sessionid,
53 is
( scalar(@
$authority_searches_for_current_session), 3, 'There are 3 authority searches for the current session' );
55 my $authority_searches_for_previous_session = C4
::Search
::History
::get
({
57 sessionid
=> $current_sessionid,
61 is
( scalar(@
$authority_searches_for_previous_session), 2, 'There are 2 authority searches for previous sessions' );
63 my $biblio_searches_for_userid = C4
::Search
::History
::get
({
67 is
( scalar(@
$biblio_searches_for_userid), 4, 'There are 5 searches for the current session' );
69 my $authority_searches_for_userid = C4
::Search
::History
::get
({
73 is
( scalar(@
$authority_searches_for_userid), 5, 'There are 4 searches for previous sessions' );
75 delete_all
( $userid );
78 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
79 C4
::Search
::History
::delete({
81 sessionid
=> $current_sessionid,
84 my $all = C4
::Search
::History
::get
({userid
=> $userid});
85 is
( scalar(@
$all), 6, 'There are 6 searches in all after deleting current biblio searches' );
86 delete_all
( $userid );
88 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
89 C4
::Search
::History
::delete({
91 sessionid
=> $current_sessionid,
95 $all = C4
::Search
::History
::get
({userid
=> $userid});
96 is
( scalar(@
$all), 7, 'There are 7 searches in all after deleting previous authority searches' );
97 delete_all
( $userid );
99 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
100 C4
::Search
::History
::delete({
102 sessionid
=> $current_sessionid,
105 $all = C4
::Search
::History
::get
({userid
=> $userid});
106 is
( scalar(@
$all), 5, 'There are 5 searches in all after deleting all previous searches' );
107 delete_all
( $userid );
109 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
110 C4
::Search
::History
::delete({
112 sessionid
=> $current_sessionid,
114 $all = C4
::Search
::History
::get
({userid
=> $userid});
115 is
( scalar(@
$all), 4, 'There are 5 searches in all after deleting all searches for a sessionid' );
116 delete_all
( $userid );
118 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
119 C4
::Search
::History
::delete({
122 $all = C4
::Search
::History
::get
({userid
=> $userid});
123 is
( scalar(@
$all), 0, 'There are 0 search after deleting all searches for a userid' );
124 delete_all
( $userid );
126 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
127 warning_like
{ C4
::Search
::History
::delete({}) }
128 qr/^ERROR: userid, id or interval is required for history deletion/,
129 'Calling delete without userid raises warning';
130 $all = C4
::Search
::History
::get
({userid
=> $userid});
131 is
( scalar(@
$all), 9, 'There are still 9 searches after calling delete without userid' );
132 delete_all
( $userid );
134 # Delete (with a given id)
135 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
136 $all = C4
::Search
::History
::get
({ userid
=> $userid });
138 my $ids = [ shuffle
map { $_->{id
} } @
$all ];
139 for my $id ( @
$ids[ 0 .. 4 ] ) {
140 C4
::Search
::History
::delete({ id
=> $id });
142 $all = C4
::Search
::History
::get
({ userid
=> $userid });
143 is
( scalar(@
$all), 4, 'There are 4 searches after calling 5 times delete with id' );
144 delete_all
( $userid );
146 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
147 $all = C4
::Search
::History
::get
({ userid
=> $userid });
149 $ids = [ shuffle
map { $_->{id
} } @
$all ];
150 C4
::Search
::History
::delete({ id
=> [ @
$ids[0..4] ] });
151 $all = C4
::Search
::History
::get
({ userid
=> $userid });
152 is
( scalar(@
$all), 4, 'There are 4 searches after calling delete with 5 ids' );
154 delete_all
( $userid );
156 # Test delete with interval
157 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
158 C4
::Search
::History
::delete({
162 $all = C4
::Search
::History
::get
({userid
=> $userid});
163 is
( scalar(@
$all), 9, 'There are still 9 searches after calling delete with an interval = 10 days' );
164 C4
::Search
::History
::delete({
168 $all = C4
::Search
::History
::get
({userid
=> $userid});
169 is
( scalar(@
$all), 8, 'There are still 8 searches after calling delete with an interval = 6 days' );
170 C4
::Search
::History
::delete({
174 $all = C4
::Search
::History
::get
({userid
=> $userid});
175 is
( scalar(@
$all), 2, 'There are still 2 searches after calling delete with an interval = 2 days' );
176 delete_all
( $userid );
178 add
( $userid, $current_sessionid, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a );
179 C4
::Search
::History
::delete({
184 $all = C4
::Search
::History
::get
({userid
=> $userid});
185 is
( scalar(@
$all), 8, 'There are still 9 searches after calling delete with an interval = 5 days for biblio' );
186 C4
::Search
::History
::delete({
191 $all = C4
::Search
::History
::get
({userid
=> $userid});
192 is
( scalar(@
$all), 6, 'There are still 6 searches after calling delete with an interval = 5 days for authority' );
193 C4
::Search
::History
::delete({
197 $all = C4
::Search
::History
::get
({userid
=> $userid});
198 is
( scalar(@
$all), 0, 'There is no search after calling delete with an interval = -1 days' );
200 delete_all
( $userid );
203 my ( $userid, $current_session_id, $previous_sessionid, $total, $query_cgi_b, $query_cgi_a ) = @_;
205 my $days_ago_2 = dt_from_string
()->add_duration( DateTime
::Duration
->new( days
=> -2 ) );
206 my $days_ago_4 = dt_from_string
()->add_duration( DateTime
::Duration
->new( days
=> -4 ) );
207 my $days_ago_6 = dt_from_string
()->add_duration( DateTime
::Duration
->new( days
=> -6 ) );
208 my $days_ago_8 = dt_from_string
()->add_duration( DateTime
::Duration
->new( days
=> -8 ) );
210 my $query_desc_b1_p = q{first previous biblio search};
211 my $first_previous_biblio_search = {
213 sessionid
=> $previous_sessionid,
214 query_desc
=> $query_desc_b1_p,
215 query_cgi
=> $query_cgi_b,
221 my $query_desc_a1_p = q{first previous authority search};
222 my $first_previous_authority_search = {
224 sessionid
=> $previous_sessionid,
225 query_desc
=> $query_desc_a1_p,
226 query_cgi
=> $query_cgi_a,
232 my $query_desc_b2_p = q{second previous biblio search};
233 my $second_previous_biblio_search = {
235 sessionid
=> $previous_sessionid,
236 query_desc
=> $query_desc_b2_p,
237 query_cgi
=> $query_cgi_b,
243 my $query_desc_a2_p = q{second previous authority search};
244 my $second_previous_authority_search = {
246 sessionid
=> $previous_sessionid,
247 query_desc
=> $query_desc_a2_p,
248 query_cgi
=> $query_cgi_a,
255 my $query_desc_b1_c = q{first current biblio search};
257 my $first_current_biblio_search = {
259 sessionid
=> $current_sessionid,
260 query_desc
=> $query_desc_b1_c,
261 query_cgi
=> $query_cgi_b,
267 my $query_desc_a1_c = q{first current authority search};
268 my $first_current_authority_search = {
270 sessionid
=> $current_sessionid,
271 query_desc
=> $query_desc_a1_c,
272 query_cgi
=> $query_cgi_a,
278 my $query_desc_b2_c = q{second current biblio search};
279 my $second_current_biblio_search = {
281 sessionid
=> $current_sessionid,
282 query_desc
=> $query_desc_b2_c,
283 query_cgi
=> $query_cgi_b,
289 my $query_desc_a2_c = q{second current authority search};
290 my $second_current_authority_search = {
292 sessionid
=> $current_sessionid,
293 query_desc
=> $query_desc_a2_c,
294 query_cgi
=> $query_cgi_a,
300 my $query_desc_a3_c = q{third current authority search};
301 my $third_current_authority_search = {
303 sessionid
=> $current_sessionid,
304 query_desc
=> $query_desc_a3_c,
305 query_cgi
=> $query_cgi_a,
313 $r += C4
::Search
::History
::add
( $first_current_biblio_search );
314 $r += C4
::Search
::History
::add
( $first_current_authority_search );
315 $r += C4
::Search
::History
::add
( $second_current_biblio_search );
316 $r += C4
::Search
::History
::add
( $second_current_authority_search );
317 $r += C4
::Search
::History
::add
( $first_previous_biblio_search );
318 $r += C4
::Search
::History
::add
( $first_previous_authority_search );
319 $r += C4
::Search
::History
::add
( $second_previous_biblio_search );
320 $r += C4
::Search
::History
::add
( $second_previous_authority_search );
321 $r += C4
::Search
::History
::add
( $third_current_authority_search );
327 C4
::Search
::History
::delete({