Bugzilla – Attachment 66504 Details for
Bug 19182
Item search in intranet and OPAC selenium test
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 19182 - Selenium test for searching for an item in the intranet and OPAC
Bug-19182---Selenium-test-for-searching-for-an-ite.patch (text/plain), 11.79 KB, created by
Alex Buckley
on 2017-08-27 01:49:16 UTC
(
hide
)
Description:
Bug 19182 - Selenium test for searching for an item in the intranet and OPAC
Filename:
MIME Type:
Creator:
Alex Buckley
Created:
2017-08-27 01:49:16 UTC
Size:
11.79 KB
patch
obsolete
>From a88fb9050dd25109bde4c1836014417067667edc Mon Sep 17 00:00:00 2001 >From: Alex Buckley <alexbuckley@catalyst.net.nz> >Date: Thu, 20 Jul 2017 18:25:41 +0000 >Subject: [PATCH] Bug 19182 - Selenium test for searching for an item in the > intranet and OPAC > >This Selenium test goes through the process of creating a category and >patron user (as is completed in the basic_workflow.t test). Then this >newly created patron user is used to create a new biblio and add items >to that biblio. > >The item search functionality in the intranet and OPAC is used to try to >find the biblio. If results to the item search query are displayed >then the test outputs 'Found item in inranet' and 'Found item in >OPAC' are shown > >Test plan (this test plan includes how to install Selenium as well as how to run this test, for the benefit of people who have not got Selenium installed on their machines): > >1. wget >https://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.0.jar > >2. vim /etc/apt/sources.list.d/firefox.list > >3. Paste into the file: >deb http://packages.linuxmint.com debian import > >4. sudo apt-get update > >5. sudo apt-get install firefox > >6. sudo apt-get install xvfb > >7. Set the SELENIUM_PATH vartiable: >SELENIUM_PATH=/home/vagrant/kohaclone/selenium-server-standalone-2.53.0.jar > >8. Xvfb :1 -screen 0 1024x768x24 2>&1 >/dev/null & > >9. DISPLAY=:1 java -jar $SELENIUM_PATH > >Note: This will start up the selenium server. Everytime you want to shut >down this terminal window and want to restart Selenium just run the step >9 command to restart the Selenium server > >10. Open a new terminal window and write in: >git clone https://github.com/gempesaw/Selenium-Remote-Driver --branch >build/master --single-branch --depth 1 > >11. cd Selenium-Remote-Driver > >12. perl Makefile.PL > >13. make > >14. make test > >15. sudo make install > >16. Now everything is installed and you can et up for running the >selenium tests > >17. Create a superlibrarian user with the username koha and password >koha > >18. If your usual port configuration for the intranet and OPAC is 8081 >and 8080 respectively then set the staffClientBaseURL and OPACBaseURL >system preferences to localhost:8080 and localhost:80 respectively > >19. Ensure your catalogue is empty > >20. Clear and rebuild your Koha index: >sudo koha-shell <instancename> > >21. export the PERL5LIB variable > >22. zebraidx -c /etc/koha/sites/<instancename>/zebra-authorities-dom.cfg >-g iso2709 -d authorities init > >23. zebraidx -c /etc/koha/sites/<instancename>/zebra-biblios.cfg -g >iso2709 -d biblios init > >24. exit > >25. sudo su > >26. sudo koha-rebuild-zebra -f -v <instancename> > >27. exit > >28. sudo koha-shell <instancename> > >29. perl t/db_dependent/selenium/authenticate.t > >30. The test should pass. >Note: The time_diff comments in the test output showing what the test is >doing > >Note: If you have issues with installing Selenium and >Selenium::Remote::Driver please write a comment on the bug report and I >will be more than happy to create a screencapture video showing all the >steps > >Sponsored-By: Catalyst IT >--- > t/db_dependent/selenium/itemsearch.t | 221 +++++++++++++++++++++++++++++++++++ > 1 file changed, 221 insertions(+) > create mode 100644 t/db_dependent/selenium/itemsearch.t > >diff --git a/t/db_dependent/selenium/itemsearch.t b/t/db_dependent/selenium/itemsearch.t >new file mode 100644 >index 0000000..56cbfaa >--- /dev/null >+++ b/t/db_dependent/selenium/itemsearch.t >@@ -0,0 +1,221 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha. >+# >+#Copyright (C) 2017 Catalyst IT >+# >+# Koha is free software; you can redistribute it and/or modify it >+# under the terms of the GNU General Public License as published by >+# the Free Software Foundation; either version 3 of the License, or >+# (at your option) any later version. >+# >+# Koha is distributed in the hope that it will be useful, but >+# WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+# GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License >+# along with Koha; if not, see <http://www.gnu.org/licenses>. >+ >+#This Selenium test is to test the search functionality of the intranet and OPAC. A new biblio is created and items added to that biblio. >+# >+#Then an item search for the name of the biblio 'test_biblio' is performed in the intranet and OPAC, if results to the item search query are displayed then the test output 'Found item in inranet' and 'Found item in OPAC' are shown >+ >+#Note: If you are testing this on kohadevbox with selenium installed in kohadevbox then you need to set the staffClientBaseURL to localhost:8080 and the OPACBaseURL to localhost:80 >+ >+use Modern::Perl; >+ >+use Time::HiRes qw(gettimeofday); >+use C4::Context; >+use C4::Biblio qw( AddBiblio ); # We shouldn't use it >+ >+use Test::More tests => 12; >+use MARC::Record; >+use MARC::Field; >+ >+my $dbh = C4::Context->dbh; >+my $login = 'koha'; >+my $password = 'koha'; >+my $base_url= 'http://'.C4::Context->preference("staffClientBaseURL")."/cgi-bin/koha/"; >+my $opac_url= C4::Context->preference("OPACBaseURL"); >+ >+my $number_of_biblios_to_insert = 3; >+our $sample_data = { >+ category => { >+ categorycode => 'test_cat', >+ description => 'test cat description', >+ enrolmentperiod => '12', >+ category_type => 'A' >+ }, >+ patron => { >+ surname => 'test_patron_surname', >+ cardnumber => '4242424242', >+ userid => 'test_username', >+ password => 'password', >+ password2 => 'password' >+ }, >+}; >+ >+my $patronusername="test_username"; >+my $patronpassword="password"; >+ >+our ( $borrowernumber, $start, $prev_time, $cleanup_needed ); >+ >+SKIP: { >+ eval { require Selenium::Remote::Driver; }; >+ skip "Selenium::Remote::Driver is needed for selenium tests.", 20 if $@; >+ >+ $cleanup_needed = 1; >+ >+ open my $fh, '>>', '/tmp/output.txt'; >+ >+# Go to the mainpage and log in as default user >+ my $driver = Selenium::Remote::Driver->new; >+ $start = gettimeofday; >+ $prev_time = $start; >+ $driver->get($base_url."mainpage.pl"); >+ like( $driver->get_title(), qr(Log in to Koha), ); >+ auth( $driver, $login, $password ); >+ time_diff("main"); >+ >+#Create a patron category >+ $driver->get($base_url.'admin/categories.pl'); >+ like( $driver->get_title(), qr(Patron categories), ); >+ $driver->find_element('//a[@id="newcategory"]')->click; >+ like( $driver->get_title(), qr(New category), ); >+ fill_form( $driver, $sample_data->{category} ); >+ $driver->find_element('//fieldset[@class="action"]/input[@type="submit"]')->click; >+ >+#Add a patron >+ time_diff("add patron category"); >+ $driver->get($base_url.'/members/memberentry.pl?op=add&categorycode='.$sample_data->{category}{categorycode}); >+ like( $driver->get_title(), qr(Add .*$sample_data->{category}{description}), ); >+ fill_form( $driver, $sample_data->{patron} ); >+ $driver->find_element('//button[@id="saverecord"]')->click; >+ like( $driver->get_title(), qr(Patron details for $sample_data->{patron}{surname}), ); >+ time_diff("add patron"); >+ >+#Make new biblio >+ $borrowernumber = $dbh->selectcol_arrayref(q|SELECT borrowernumber FROM borrowers WHERE userid=?|, {}, $sample_data->{patron}{userid} )->[0]; >+ >+ my @biblionumbers; >+ for my $i ( 1 .. $number_of_biblios_to_insert ) { >+ my $biblio = MARC::Record->new(); >+ my $title = 'test biblio '.$i; >+ if ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) { >+ $biblio->append_fields( >+ MARC::Field->new('200', ' ', ' ', a => 'test biblio '.$i), >+ MARC::Field->new('200', ' ', ' ', f => 'test author '.$i), >+ ); >+ } else { >+ $biblio->append_fields( >+ MARC::Field->new('245', ' ', ' ', a => 'test biblio '.$i), >+ MARC::Field->new('100', ' ', ' ', a => 'test author '.$i), >+ ); >+ } >+ my ($biblionumber, $biblioitemnumber) = AddBiblio($biblio, ''); >+ push @biblionumbers, $biblionumber; >+ } >+ >+ time_diff("add biblio"); >+ >+#Add items to the biblio >+ my $itemtype = $dbh->selectcol_arrayref(q|SELECT itemtype FROM itemtypes|); >+ $itemtype = $itemtype->[0]; >+ >+ for my $biblionumber ( @biblionumbers ) { >+ $driver->get($base_url."/cataloguing/additem.pl?biblionumber=$biblionumber"); >+ like( $driver->get_title(), qr(test biblio \d+ by test author), ); >+ my $form = $driver->find_element('//form[@name="f"]'); >+ my $inputs = $driver->find_child_elements($form, '//input[@type="text"]'); >+ for my $input ( @$inputs ) { >+ next if $input->is_hidden(); >+ >+ my $id = $input->get_attribute('id'); >+ next unless $id =~ m|^tag_952_subfield|; >+ >+ $input->send_keys('t_value_bib'.$biblionumber); >+ } >+ >+ $driver->find_element('//input[@name="add_submit"]')->click; >+ like( $driver->get_title(), qr($biblionumber.*Items) ); >+ >+ $dbh->do(q|UPDATE items SET notforloan=0 WHERE biblionumber=?|, {}, $biblionumber ); >+ $dbh->do(q|UPDATE biblioitems SET itemtype=? WHERE biblionumber=?|, {}, $itemtype, $biblionumber); >+ $dbh->do(q|UPDATE items SET itype=? WHERE biblionumber=?|, {}, $itemtype, $biblionumber); >+ } >+ >+ time_diff("add items"); >+ >+# Search for items in the intranet >+ $driver->get($base_url."/catalogue/search.pl"); >+ $driver->find_element('//input[@title="Enter search terms"]')->send_keys("test biblio "); >+ $driver->find_element('//button[@class="btn btn-default btn-sm"]')->click; >+ >+ my $result; >+ $result = $driver->find_element_by_xpath("/html/body/div[4]/div/div[1]/div/div[2]/form"); >+ if ($result) { >+ time_diff("Found item in intranet"); >+ } >+ >+#Search for items in the OPAC >+ $driver->get($opac_url); >+ like( $driver->get_title(), qr(Koha online catalog), ); >+ $driver->find_element('//input[@id="translControl1"]')->send_keys("test biblio "); >+ $driver->find_element('//button[@id="searchsubmit"]')->click; >+ >+ $result = $driver->find_element_by_xpath("/html/body/div/div[4]/div/div/div[2]/div/div[2]/form[1]/table/tbody/tr[1]/td[3]"); >+ >+ if ($result) { >+ time_diff("Found item in OPAC"); >+ } >+ >+ close $fh; >+ $driver->quit(); >+}; >+ >+END { >+ cleanup() if $cleanup_needed; >+}; >+ >+sub auth { >+ my ( $driver, $login, $password) = @_; >+ fill_form( $driver, { userid => 'koha', password => 'koha' } ); >+ my $login_button = $driver->find_element('//input[@id="submit"]'); >+ $login_button->submit(); >+} >+ >+sub fill_form { >+ my ( $driver, $values ) = @_; >+ while ( my ( $id, $value ) = each %$values ) { >+ my $element = $driver->find_element('//*[@id="'.$id.'"]'); >+ my $tag = $element->get_tag_name(); >+ if ( $tag eq 'input' ) { >+ $driver->find_element('//input[@id="'.$id.'"]')->send_keys($value); >+ } elsif ( $tag eq 'select' ) { >+ $driver->find_element('//select[@id="'.$id.'"]/option[@value="'.$value.'"]')->click; >+ } >+ } >+} >+ >+sub cleanup { >+ my $dbh = C4::Context->dbh; >+ $dbh->do(q|DELETE FROM categories WHERE categorycode = ?|, {}, $sample_data->{category}{categorycode}); >+ $dbh->do(q|DELETE FROM borrowers WHERE userid = ?|, {}, $sample_data->{patron}{userid}); >+ for my $i ( 1 .. $number_of_biblios_to_insert ) { >+ $dbh->do(qq|DELETE FROM biblio WHERE title = "test biblio $i"|); >+ }; >+ >+ $dbh->do(q|DELETE FROM issues where borrowernumber=?|, {}, $borrowernumber); >+ $dbh->do(q|DELETE FROM old_issues where borrowernumber=?|, {}, $borrowernumber); >+ for my $i ( 1 .. $number_of_biblios_to_insert ) { >+ $dbh->do(qq|DELETE items, biblio FROM biblio INNER JOIN items ON biblio.biblionumber = items.biblionumber WHERE biblio.title = "test biblio$i"|); >+ }; >+} >+ >+sub time_diff { >+ my $lib = shift; >+ my $now = gettimeofday; >+ warn "CP $lib = " . sprintf("%.2f", $now - $prev_time ) . "\n"; >+ $prev_time = $now; >+} >-- >2.1.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 19182
:
66503
|
66504
|
68826
|
68827