Lines 51-57
my $base_url = $s->base_url;
Link Here
|
51 |
my $builder = t::lib::TestBuilder->new; |
51 |
my $builder = t::lib::TestBuilder->new; |
52 |
|
52 |
|
53 |
subtest 'Search patrons' => sub { |
53 |
subtest 'Search patrons' => sub { |
54 |
plan tests => 19; |
54 |
plan tests => 23; |
55 |
|
55 |
|
56 |
if ( Koha::Patrons->search({surname => {-like => "test_patron_%"}})->count ) { |
56 |
if ( Koha::Patrons->search({surname => {-like => "test_patron_%"}})->count ) { |
57 |
BAIL_OUT("Cannot run this test, data we need to create already exist in the DB"); |
57 |
BAIL_OUT("Cannot run this test, data we need to create already exist in the DB"); |
Lines 142-163
subtest 'Search patrons' => sub {
Link Here
|
142 |
C4::Context->set_preference('PatronsPerPage', $PatronsPerPage); |
142 |
C4::Context->set_preference('PatronsPerPage', $PatronsPerPage); |
143 |
$driver->get( $base_url . "/members/members-home.pl" ); |
143 |
$driver->get( $base_url . "/members/members-home.pl" ); |
144 |
my @adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option'); |
144 |
my @adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option'); |
|
|
145 |
is( scalar @adv_options, 13, 'All standard fields are searchable if DefaultPatronSearchFields not set'); |
146 |
is( $adv_options[0]->get_value(), 'firstname,surname,othernames,cardnumber,userid', 'Standard search uses hard coded list when DefaultPatronSearchFields not set'); |
145 |
my @filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option'); |
147 |
my @filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option'); |
146 |
is( scalar @adv_options, 11, 'All standard fields are searchable if DefaultPatronSearchFields not set'); |
148 |
is( scalar @filter_options, 13, 'All standard fields are searchable by filter if DefaultPatronSearchFields not set'); |
147 |
is( scalar @filter_options, 11, 'All standard fields are searchable by filter if DefaultPatronSearchFields not set'); |
149 |
is( $filter_options[0]->get_value(), 'firstname,surname,othernames,cardnumber,userid', 'Standard filter uses hard coded list when DefaultPatronSearchFields not set'); |
148 |
C4::Context->set_preference('DefaultPatronSearchFields',"initials"); |
150 |
C4::Context->set_preference('DefaultPatronSearchFields',"firstname,initials"); |
149 |
$driver->get( $base_url . "/members/members-home.pl" ); |
151 |
$driver->get( $base_url . "/members/members-home.pl" ); |
150 |
@adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option'); |
152 |
@adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option'); |
|
|
153 |
is( scalar @adv_options, 13, 'New option added when DefaultPatronSearchFields is populated with a field'); |
154 |
is( $adv_options[0]->get_value(), 'firstname,initials', 'Standard search uses DefaultPatronSearchFields when populated'); |
151 |
@filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option'); |
155 |
@filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option'); |
152 |
is( scalar @adv_options, 12, 'New option added when DefaultPatronSearchFields is populated with a field'); |
156 |
is( scalar @filter_options, 13, 'New filter option added when DefaultPatronSearchFields is populated with a field'); |
153 |
is( scalar @filter_options, 12, 'New filter option added when DefaultPatronSearchFields is populated with a field'); |
157 |
is( $filter_options[0]->get_value(), 'firstname,initials', 'Standard filter uses DefaultPatronSearchFields when populated'); |
154 |
C4::Context->set_preference('DefaultPatronSearchFields',"initials,horses"); |
158 |
C4::Context->set_preference('DefaultPatronSearchFields',"firstname,initials,horses"); |
155 |
$driver->get( $base_url . "/members/members-home.pl" ); |
159 |
$driver->get( $base_url . "/members/members-home.pl" ); |
156 |
@adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option'); |
160 |
@adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option'); |
157 |
@filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option'); |
161 |
@filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option'); |
158 |
is( scalar @adv_options, 12, 'Invalid option not added when DefaultPatronSearchFields is populated with an invalid field'); |
162 |
is( scalar @adv_options, 13, 'Invalid option not added when DefaultPatronSearchFields is populated with an invalid field'); |
159 |
is( scalar @filter_options, 12, 'Invalid filter option not added when DefaultPatronSearchFields is populated with an invalid field'); |
163 |
is( scalar @filter_options, 13, 'Invalid filter option not added when DefaultPatronSearchFields is populated with an invalid field'); |
|
|
164 |
# NOTE: We should probably ensure the bad field is removed from 'standard' search here, else searches are broken |
160 |
C4::Context->set_preference('DefaultPatronSearchFields',""); |
165 |
C4::Context->set_preference('DefaultPatronSearchFields',""); |
|
|
166 |
$driver->get( $base_url . "/members/members-home.pl" ); |
161 |
$s->fill_form( { search_patron_filter => 'test_patron' } ); |
167 |
$s->fill_form( { search_patron_filter => 'test_patron' } ); |
162 |
$s->submit_form; |
168 |
$s->submit_form; |
163 |
my $first_patron = $patrons[0]; |
169 |
my $first_patron = $patrons[0]; |
Lines 190-196
subtest 'Search patrons' => sub {
Link Here
|
190 |
"Modify patron %s %s (%s) %s (%s) (%s) › Patrons › Koha", |
196 |
"Modify patron %s %s (%s) %s (%s) (%s) › Patrons › Koha", |
191 |
$first_patron->title, $first_patron->firstname, $first_patron->othernames, $first_patron->surname, $first_patron->cardnumber, |
197 |
$first_patron->title, $first_patron->firstname, $first_patron->othernames, $first_patron->surname, $first_patron->cardnumber, |
192 |
$first_patron->category->description, |
198 |
$first_patron->category->description, |
193 |
) |
199 |
), |
|
|
200 |
'Page title is correct after following modification link' |
194 |
); |
201 |
); |
195 |
|
202 |
|
196 |
$driver->get( $base_url . "/members/members-home.pl" ); |
203 |
$driver->get( $base_url . "/members/members-home.pl" ); |
Lines 200-210
subtest 'Search patrons' => sub {
Link Here
|
200 |
|
207 |
|
201 |
$s->driver->find_element('//*[@id="'.$table_id.'_filter"]//input')->send_keys('test_patron'); |
208 |
$s->driver->find_element('//*[@id="'.$table_id.'_filter"]//input')->send_keys('test_patron'); |
202 |
$s->wait_for_ajax; |
209 |
$s->wait_for_ajax; |
203 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', $PatronsPerPage, 26, $total_number_of_patrons) ); |
210 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', $PatronsPerPage, 26, $total_number_of_patrons), 'Searching in standard brings back correct results' ); |
204 |
|
211 |
|
205 |
$s->driver->find_element('//table[@id="'.$table_id.'"]//th[@data-filter="libraries"]/select/option[@value="'.$library->branchcode.'"]')->click; |
212 |
$s->driver->find_element('//table[@id="'.$table_id.'"]//th[@data-filter="libraries"]/select/option[@value="'.$library->branchcode.'"]')->click; |
206 |
$s->wait_for_ajax; |
213 |
$s->wait_for_ajax; |
207 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', $PatronsPerPage, 25, $total_number_of_patrons) ); |
214 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', $PatronsPerPage, 25, $total_number_of_patrons), 'Filtering on library works in combination with main search' ); |
208 |
|
215 |
|
209 |
# Reset the filters |
216 |
# Reset the filters |
210 |
$driver->find_element('//form[@id="patron_search_form"]//*[@id="clear_search"]')->click(); |
217 |
$driver->find_element('//form[@id="patron_search_form"]//*[@id="clear_search"]')->click(); |
Lines 212-225
subtest 'Search patrons' => sub {
Link Here
|
212 |
$s->wait_for_ajax; |
219 |
$s->wait_for_ajax; |
213 |
|
220 |
|
214 |
# And make sure all the patrons are present |
221 |
# And make sure all the patrons are present |
215 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries', $PatronsPerPage, $total_number_of_patrons) ); |
222 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries', $PatronsPerPage, $total_number_of_patrons), 'Resetting filters works as expected' ); |
216 |
|
223 |
|
217 |
# Search on non-searchable attribute, we expect no result! |
224 |
# Search on non-searchable attribute, we expect no result! |
218 |
$s->fill_form( { search_patron_filter => 'test_attr_1' } ); |
225 |
$s->fill_form( { search_patron_filter => 'test_attr_1' } ); |
219 |
$s->submit_form; |
226 |
$s->submit_form; |
220 |
$s->wait_for_ajax; |
227 |
$s->wait_for_ajax; |
221 |
|
228 |
|
222 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('No entries to show (filtered from %s total entries)', $total_number_of_patrons) ); |
229 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('No entries to show (filtered from %s total entries)', $total_number_of_patrons), 'Searching on a non-searchable attribute returns no results' ); |
223 |
|
230 |
|
224 |
# clear form |
231 |
# clear form |
225 |
$driver->find_element('//form[@id="patron_search_form"]//*[@id="clear_search"]')->click(); |
232 |
$driver->find_element('//form[@id="patron_search_form"]//*[@id="clear_search"]')->click(); |
Lines 228-246
subtest 'Search patrons' => sub {
Link Here
|
228 |
$s->submit_form; |
235 |
$s->submit_form; |
229 |
$s->wait_for_ajax; |
236 |
$s->wait_for_ajax; |
230 |
|
237 |
|
231 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', 2, 2, $total_number_of_patrons) ); |
238 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', 2, 2, $total_number_of_patrons), 'Searching on a searchable attribute returns correct results' ); |
232 |
|
239 |
|
233 |
# Refine search and search for test_patron in all the data using the DT global search |
240 |
# Refine search and search for test_patron in all the data using the DT global search |
234 |
# No change in result expected, still 2 patrons |
241 |
# No change in result expected, still 2 patrons |
235 |
$s->driver->find_element('//*[@id="'.$table_id.'_filter"]//input')->send_keys('test_patron'); |
242 |
$s->driver->find_element('//*[@id="'.$table_id.'_filter"]//input')->send_keys('test_patron'); |
236 |
$s->wait_for_ajax; |
243 |
$s->wait_for_ajax; |
237 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', 2, 2, $total_number_of_patrons) ); |
244 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', 2, 2, $total_number_of_patrons), 'Refining with DataTables search works to further filter the original query' ); |
238 |
|
245 |
|
239 |
# Adding the surname of the first patron in the "Name" column |
246 |
# Adding the surname of the first patron in the "Name" column |
240 |
# We expect only 1 result |
247 |
# We expect only 1 result |
241 |
$s->driver->find_element('//table[@id="'.$table_id.'"]//input[@placeholder="Name search"]')->send_keys($patrons[0]->surname); |
248 |
$s->driver->find_element('//table[@id="'.$table_id.'"]//input[@placeholder="Name search"]')->send_keys($patrons[0]->surname); |
242 |
$s->wait_for_ajax; |
249 |
$s->wait_for_ajax; |
243 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', 1, 1, $total_number_of_patrons) ); |
250 |
is( $driver->find_element('//div[@id="'.$table_id.'_info"]')->get_text, sprintf('Showing 1 to %s of %s entries (filtered from %s total entries)', 1, 1, $total_number_of_patrons), 'Refining with header filters works to further filter the original query' ); |
244 |
|
251 |
|
245 |
push @cleanup, $_ for @patrons; |
252 |
push @cleanup, $_ for @patrons; |
246 |
push @cleanup, $library; |
253 |
push @cleanup, $library; |
247 |
- |
|
|