From fe727b8bf33255a34a506be0d0fed71e8b3e2220 Mon Sep 17 00:00:00 2001 From: Andreas Roussos Date: Fri, 22 Jul 2022 13:40:32 +0200 Subject: [PATCH] Bug 31207: Add Selenium test for the OPAC Shelf browser This adds a new Selenium test to automatically test the functionality of the OPAC Shelf browser with regards to the display of local cover images. This unit test has a somewhat narrow scope at the moment (i.e. it only checks if everything is working fine when local covers are in use), but can be expanded in the future to include OPAC Shelf browser tests for other cover image providers, etc. Also added are two sample images to be used by the test when uploading a local cover image. They come from the Unsplash website and have this license: https://unsplash.com/license Attribution to the image creators is given in the test code. Test plan: 1) Apply the other patch from this bug report, then run the new Selenium unit test which should pass without failures: cd t/db_dependent/selenium/ prove -v opacshelfbrowser.t --- .../selenium/opacshelfbrowser-test-image1.jpg | Bin 0 -> 37098 bytes .../selenium/opacshelfbrowser-test-image2.jpg | Bin 0 -> 21161 bytes t/db_dependent/selenium/opacshelfbrowser.t | 194 ++++++++++++++++++ 3 files changed, 194 insertions(+) create mode 100644 t/db_dependent/selenium/opacshelfbrowser-test-image1.jpg create mode 100644 t/db_dependent/selenium/opacshelfbrowser-test-image2.jpg create mode 100755 t/db_dependent/selenium/opacshelfbrowser.t diff --git a/t/db_dependent/selenium/opacshelfbrowser-test-image1.jpg b/t/db_dependent/selenium/opacshelfbrowser-test-image1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bbe959c199ee824c784d7fcf4bc94f52d10556fa GIT binary patch literal 37098 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 literal 0 HcmV?d00001 diff --git a/t/db_dependent/selenium/opacshelfbrowser-test-image2.jpg b/t/db_dependent/selenium/opacshelfbrowser-test-image2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..004296ad9da2dfc13e044892b36368c7e157a305 GIT binary patch literal 21161 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. + +use Modern::Perl; + +use C4::Biblio qw( AddBiblio DelBiblio ); +use C4::Context; +use Koha::AuthUtils; +use MARC::Record; +use MARC::Field; +use Test::More; + +use t::lib::Mocks; +use t::lib::Selenium; +use t::lib::TestBuilder; + +eval { require Selenium::Remote::Driver; }; +if ( $@ ) { + plan skip_all => "Selenium::Remote::Driver is needed for Selenium tests."; +} else { + plan tests => 3; +} + +my @cleanup; + +my $OPACShelfBrowser_value = C4::Context->preference( 'OPACShelfBrowser' ); +my $LocalCoverImages_value = C4::Context->preference( 'LocalCoverImages' ); +my $OPACLocalCoverImages_value = C4::Context->preference( 'OPACLocalCoverImages' ); +my $OpacSeparateHoldings_value = C4::Context->preference( 'OpacSeparateHoldings' ); +my $OpacSeparateHoldingsBranch_value = C4::Context->preference( 'OpacSeparateHoldingsBranch' ); + +# Enable the OPAC shelf browser +C4::Context->set_preference( 'OPACShelfBrowser', '1' ); + +# Enable the display of local cover images in the staff interface and in the OPAC +C4::Context->set_preference( 'LocalCoverImages', '1' ); +C4::Context->set_preference( 'OPACLocalCoverImages', '1' ); + +# Add a test biblio (for attaching local cover images to) +my $biblio = MARC::Record->new(); +if ( C4::Context->preference( 'marcflavour' ) eq 'MARC21' ) { + $biblio->append_fields( + MARC::Field->new( '245', ' ', ' ', a => 'test biblio for MARC21 instance' ), + MARC::Field->new( '100', ' ', ' ', a => 'test author' ) + ); +} elsif ( C4::Context->preference( 'marcflavour' ) eq 'UNIMARC' ) { + $biblio->append_fields( + MARC::Field->new( '200', ' ', ' ', a => 'test biblio for UNIMARC intance' ), + MARC::Field->new( '200', ' ', ' ', f => 'test author' ) + ); +} +my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $biblio, '' ); + +my $builder = t::lib::TestBuilder->new; + +# Add a test item (required in order for the OPAC "Browse shelf" hyperlink to appear) +my $itemnumber1 = $builder->build_sample_item( + { + biblionumber => $biblionumber, + library => 'CPL', + itemcallnumber => '123 A', + itype => 'BK' + } +)->itemnumber; +my $item1 = Koha::Items->find( $itemnumber1 ); + +# Add another test item (required in order for the OPAC "Other holdings" tab to appear) +my $itemnumber2 = $builder->build_sample_item( + { + biblionumber => $biblionumber, + library => 'MPL', + itemcallnumber => '123 B', + itype => 'BK' + } +)->itemnumber; +my $item2 = Koha::Items->find( $itemnumber2 ); + +push @cleanup, $builder, $item1, $item2; + +my $s = t::lib::Selenium->new; +my $driver = $s->driver; +my $opac_base_url = $s->opac_base_url; +my $base_url = $s->base_url; + +#$driver->set_window_size( 2160, 991 ); + +my $patron = $builder->build_object( { class => 'Koha::Patrons', value => { flags => 1, branchcode => 'CPL' } } ); +my $password = Koha::AuthUtils::generate_password( $patron->category ); +t::lib::Mocks::mock_preference( 'RequireStrongPassword', 0 ); +$patron->set_password( { password => $password } ); + +push @cleanup, $patron; + +$s->auth( $patron->userid, $password ); + +subtest 'OPAC Shelf browser - Check display of local cover images (OpacSeparateHoldings set to "Don\'t separate")' => sub { + plan tests => 2; + + C4::Context->set_preference( 'OpacSeparateHoldings', '0' ); + C4::Context->set_preference( 'OpacSeparateHoldingsBranch', 'homebranch' ); + + $driver->get( $base_url . "tools/upload-cover-image.pl?biblionumber=$biblionumber&filetype=image" ); + #$driver->capture_screenshot( 'Selenium_00.png' ); + my $image_upload_elt = $driver->find_element( '//input[@id="fileToUpload"]' ); + # test image by Kourosh Qaffari on Unsplash (https://unsplash.com/photos/RrhhzitYizg) + my $remote_fname = $driver->upload_file( './opacshelfbrowser-test-image1.jpg' ); + $image_upload_elt->send_keys( $remote_fname ); + sleep 2; # Wait for the "Upload progress:" progress bar to become full and show 100% + #$driver->capture_screenshot( 'Selenium_01.png' ); + my $process_image_button = $driver->find_element( '//button[@class="btn btn-default btn-sm save_image"]' ); + $process_image_button->click; + #$driver->capture_screenshot( 'Selenium_02.png' ); + $driver->get( $base_url . "catalogue/detail.pl?biblionumber=$biblionumber" ); + #$driver->capture_screenshot( 'Selenium_03.png' ); + my $local_cover_image_elt = $driver->find_element( '//*[@id="biblio-cover-slider"]/div/a' ); + is( $local_cover_image_elt->get_attribute( 'title', 1 ), 'Local cover image', 'A local cover image has been successfully uploaded at the biblio level' ); + + $driver->get( $opac_base_url . "opac-detail.pl?biblionumber=$biblionumber&shelfbrowse_itemnumber=$itemnumber1#holdings" ); + sleep 2; # Wait for the uploaded local cover image to become visible in the OPAC Shelf browser + #$driver->capture_screenshot( 'Selenium_04.png' ); + my $shelf_browser_thumbnail_elt = $driver->find_element( '//*[@id="local-thumbnail-shelf-' . $biblionumber . '"]/img' ); + is( $shelf_browser_thumbnail_elt->get_attribute( 'class' , 1 ), 'thumbnail', 'The local cover image is displayed in the OPAC Shelf browser' ); +}; + +subtest 'OPAC Shelf browser - Check display of local cover images (OpacSeparateHoldings set to "Separate" and OpacSeparateHoldingsBranch set to "home library")' => sub { + plan tests => 2; + + C4::Context->set_preference( 'OpacSeparateHoldings', '1' ); + C4::Context->set_preference( 'OpacSeparateHoldingsBranch', 'homebranch' ); + + $driver->get( $base_url . "tools/upload-cover-image.pl?itemnumber=$itemnumber2&filetype=image" ); + #$driver->capture_screenshot( 'Selenium_05.png' ); + my $image_upload_elt = $driver->find_element( '//input[@id="fileToUpload"]' ); + # test image by Studio Media on Unsplash (https://unsplash.com/photos/9DaOYUYnOls) + my $remote_fname = $driver->upload_file( './opacshelfbrowser-test-image2.jpg' ); + $image_upload_elt->send_keys( $remote_fname ); + sleep 2; # Wait for the "Upload progress:" progress bar to become full and show 100% + #$driver->capture_screenshot( 'Selenium_06.png' ); + my $process_image_button = $driver->find_element( '//button[@class="btn btn-default btn-sm save_image"]' ); + $process_image_button->click; + #$driver->capture_screenshot( 'Selenium_07.png' ); + $driver->get( $base_url . "catalogue/detail.pl?biblionumber=$biblionumber" ); + #$driver->capture_screenshot( 'Selenium_08.png' ); + my $local_cover_image_elt = $driver->find_element( '//*[@id="biblio-cover-slider"]/div/a' ); + is( $local_cover_image_elt->get_attribute( 'title', 1 ), 'Local cover image', 'A local cover image has been successfully uploaded at the item level' ); + + $s->opac_auth( $patron->userid, $password ); + #$driver->capture_screenshot( 'Selenium_09.png' ); + + $driver->get( $opac_base_url . "opac-detail.pl?biblionumber=$biblionumber&shelfbrowse_itemnumber=$itemnumber2#otherholdings" ); + sleep 2; # Wait for the uploaded local cover image to become visible in the OPAC Shelf browser + #$driver->capture_screenshot( 'Selenium_10.png' ); + my $shelf_browser_thumbnail_elt = $driver->find_element( '//*[@id="local-thumbnail-shelf-' . $biblionumber . '"]/img' ); + is( $shelf_browser_thumbnail_elt->get_attribute( 'class' , 1 ), 'thumbnail', 'The local cover image is displayed in the OPAC Shelf browser in the "Other holdings" tab' ); +}; + +subtest 'OPAC Shelf browser - Check display of local cover images (OpacSeparateHoldings set to "Separate" and OpacSeparateHoldingsBranch set to "holding library")' => sub { + plan tests => 1; + + C4::Context->set_preference( 'OpacSeparateHoldings', '1' ); + C4::Context->set_preference( 'OpacSeparateHoldingsBranch', 'holdingbranch' ); + + $driver->get( $opac_base_url . "opac-detail.pl?biblionumber=$biblionumber&shelfbrowse_itemnumber=$itemnumber2#otherholdings" ); + sleep 2; # Wait for the uploaded local cover image to become visible in the OPAC Shelf browser + #$driver->capture_screenshot( 'Selenium_11.png' ); + my $shelf_browser_thumbnail_elt = $driver->find_element( '//*[@id="local-thumbnail-shelf-' . $biblionumber . '"]/img' ); + is( $shelf_browser_thumbnail_elt->get_attribute( 'class' , 1 ), 'thumbnail', 'The local cover image is displayed in the OPAC Shelf browser in the "Other holdings" tab' ); +}; + +# Revert the related System Preferences to their original values, +# delete the test item and then delete the test biblio +END { + C4::Context->set_preference( 'OPACShelfBrowser', $OPACShelfBrowser_value ); + C4::Context->set_preference( 'LocalCoverImages', $LocalCoverImages_value ); + C4::Context->set_preference( 'OPACLocalCoverImages', $OPACLocalCoverImages_value ); + C4::Context->set_preference( 'OpacSeparateHoldings', $OpacSeparateHoldings_value ); + C4::Context->set_preference( 'OpacSeparateHoldingsBranch', $OpacSeparateHoldingsBranch_value ); + $_->delete for @cleanup; + DelBiblio( $biblionumber ); +}; -- 2.20.1