5c0fa5ec3d
The next and previous links should completely refresh the shelf. For example: [<] [1] [2] [3] [4] [5] [6] [>] Before this patch, the next and previous links were the same as the 1 and 6. With this patch, after clicking on next, we will get: [<] [7] [8] [9] [10] [11] [12] [13] [>] This patch adds a new AJAX script to get the shelf browser block. Test plan: - On a detail biblio page, click on a "Browse shelf" link. - Play with the next and previous links. - Deactivate Javascript (using NoScript for example) and check that you get the same behavior (but the page is reloaded). - Launch the unit tests: prove t/db_dependent/ShelfBrowser.t Signed-off-by: Owen Leonard <oleonard@myacpl.org> Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> Passes all tests and QA script. Signed-off-by: Galen Charlton <gmc@esilibrary.com>
212 lines
9.8 KiB
Perl
212 lines
9.8 KiB
Perl
#!/usr/bin/perl
|
|
|
|
use Modern::Perl;
|
|
use Test::More tests => 74;
|
|
use List::Util qw( shuffle );
|
|
use MARC::Field;
|
|
use MARC::Record;
|
|
|
|
use C4::Biblio;
|
|
use C4::Context;
|
|
use C4::Items;
|
|
|
|
use_ok('C4::ShelfBrowser');
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
$dbh->{AutoCommit} = 0;
|
|
$dbh->{RaiseError} = 1;
|
|
|
|
$dbh->do(q|DELETE FROM reserves|);
|
|
$dbh->do(q|DELETE FROM issues|);
|
|
$dbh->do(q|DELETE FROM items|);
|
|
|
|
my $cn;
|
|
|
|
# 100.100 150.100 200.100 210.100 300.000 320.000 400.100 410.100 500.100 510.100 520.100 600.000 610.000 700.100 710.100 720.100 730.100 740.100 750.100
|
|
my @callnumbers = qw(
|
|
100.100
|
|
150.100
|
|
200.100
|
|
210.100
|
|
300.000
|
|
320.000
|
|
400.100
|
|
410.100
|
|
500.100
|
|
510.100
|
|
520.100
|
|
600.000
|
|
610.000
|
|
700.100
|
|
710.100
|
|
720.100
|
|
730.100
|
|
740.100
|
|
750.100
|
|
);
|
|
|
|
my $record = MARC::Record->new();
|
|
$record->append_fields(
|
|
MARC::Field->new('100', ' ', ' ', a => 'Donald E. Knuth.'),
|
|
MARC::Field->new('245', ' ', ' ', a => 'The art of computer programming'),
|
|
);
|
|
my ( $biblionumber, undef, undef ) = C4::Biblio::AddBiblio($record, '');
|
|
|
|
for my $callnumber ( shuffle @callnumbers ) {
|
|
my ( $biblionumber, undef, $itemnumber ) = C4::Items::AddItem({
|
|
homebranch => 'CPL',
|
|
holdingbranch => 'CPL',
|
|
itemcallnumber => $callnumber,
|
|
}, $biblionumber);
|
|
$cn->{$callnumber} = {
|
|
biblionumber => $biblionumber,
|
|
itemnumber => $itemnumber,
|
|
itemcallnumber => $callnumber,
|
|
}
|
|
}
|
|
|
|
my $nearby;
|
|
|
|
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'500.100'}{itemnumber} );
|
|
# We have
|
|
# < 320.000 400.100 410.100 500.100 510.100 520.100 600.000 >
|
|
# 6 7 8 [9] 10 11 12
|
|
# Clicking on previous, we want a link to 150.100
|
|
is( $nearby->{prev_item}{itemcallnumber}, '150.100', "Simple case: previous link 1/2" );
|
|
is( $nearby->{prev_item}{itemnumber}, $cn->{'150.100'}{itemnumber}, "Simple case: previous link 2/2" );
|
|
# Clicking on next, we want a link to 730.100
|
|
is( $nearby->{next_item}{itemcallnumber}, '720.100', "Simple case: next link 1/2" );
|
|
is( $nearby->{next_item}{itemnumber}, $cn->{'720.100'}{itemnumber}, "Simple case: next link 2/2" );
|
|
|
|
is( $nearby->{items}[0]{itemcallnumber}, '320.000', "Simple case: item 1");
|
|
is( $nearby->{items}[1]{itemcallnumber}, '400.100', "Simple case: item 2");
|
|
is( $nearby->{items}[2]{itemcallnumber}, '410.100', "Simple case: item 3");
|
|
is( $nearby->{items}[3]{itemcallnumber}, '500.100', "Simple case: item 4");
|
|
is( $nearby->{items}[4]{itemcallnumber}, '510.100', "Simple case: item 5");
|
|
is( $nearby->{items}[5]{itemcallnumber}, '520.100', "Simple case: item 6");
|
|
is( $nearby->{items}[6]{itemcallnumber}, '600.000', "Simple case: item 7");
|
|
|
|
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'500.100'}{itemnumber}, 2, 3 );
|
|
# We have
|
|
# < 400.100 410.100 500.100 510.100 520.100 >
|
|
# 7 8 [9] 10 11
|
|
# Clicking on previous, we want a link to 320.000
|
|
is( $nearby->{prev_item}{itemcallnumber}, '320.000', "Test gap: previous link 1/2" );
|
|
is( $nearby->{prev_item}{itemnumber}, $cn->{'320.000'}{itemnumber}, "Test gap: previous link 2/2" );
|
|
# Clicking on next, we want a link to 600.000
|
|
is( $nearby->{next_item}{itemcallnumber}, '600.000', "Test gap: next link 1/2" );
|
|
is( $nearby->{next_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test gap: next link 2/2" );
|
|
|
|
is( scalar( @{$nearby->{items}} ), 5, "Test gap: got 5 items" );
|
|
is( $nearby->{items}[0]{itemcallnumber}, '400.100', "Test gap: item 1");
|
|
is( $nearby->{items}[1]{itemcallnumber}, '410.100', "Test gap: item 2");
|
|
is( $nearby->{items}[2]{itemcallnumber}, '500.100', "Test gap: item 3");
|
|
is( $nearby->{items}[3]{itemcallnumber}, '510.100', "Test gap: item 4");
|
|
is( $nearby->{items}[4]{itemcallnumber}, '520.100', "Test gap: item 5");
|
|
|
|
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'300.000'}{itemnumber} );
|
|
# We have
|
|
# < 150.100 200.100 210.100 300.000 320.000 400.100 410.100 >
|
|
# 2 3 4 [5] 6 7 8
|
|
# Clicking on previous, we want a link to 100.100
|
|
is( $nearby->{prev_item}{itemcallnumber}, '100.100', "Test start shelf: previous link 1/2" );
|
|
is( $nearby->{prev_item}{itemnumber}, $cn->{'100.100'}{itemnumber}, "Test start shelf: previous link 2/2" );
|
|
# Clicking on next, we want a link to 600.000
|
|
is( $nearby->{next_item}{itemcallnumber}, '600.000', "Test start shelf: next link 1/2" );
|
|
is( $nearby->{next_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test start shelf: next link 2/2" );
|
|
|
|
is( $nearby->{items}[0]{itemcallnumber}, '150.100', "Test start shelf: item 1");
|
|
is( $nearby->{items}[1]{itemcallnumber}, '200.100', "Test start shelf: item 2");
|
|
is( $nearby->{items}[2]{itemcallnumber}, '210.100', "Test start shelf: item 3");
|
|
is( $nearby->{items}[3]{itemcallnumber}, '300.000', "Test start shelf: item 4");
|
|
is( $nearby->{items}[4]{itemcallnumber}, '320.000', "Test start shelf: item 5");
|
|
is( $nearby->{items}[5]{itemcallnumber}, '400.100', "Test start shelf: item 6");
|
|
is( $nearby->{items}[6]{itemcallnumber}, '410.100', "Test start shelf: item 7");
|
|
|
|
|
|
|
|
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'100.100'}{itemnumber} );
|
|
# We have
|
|
# 100.100 150.100 200.100 210.100 >
|
|
# [1] 2 3 4
|
|
# There is no previous link
|
|
is( $nearby->{prev_item}, undef, "Test first item on a shelf: no previous link" );
|
|
# Clicking on next, we want a link to 410.100
|
|
is( $nearby->{next_item}{itemcallnumber}, '410.100', "Test first item on a shelf: next link 1/2" );
|
|
is( $nearby->{next_item}{itemnumber}, $cn->{'410.100'}{itemnumber}, "Test first item on a shelf: next link 2/2" );
|
|
|
|
is( scalar( @{$nearby->{items}} ), 4, "Test first item on a shelf: There are 4 items displayed" );
|
|
is( $nearby->{items}[0]{itemcallnumber}, '100.100', "Test first item on a shelf: item 1");
|
|
is( $nearby->{items}[1]{itemcallnumber}, '150.100', "Test first item on a shelf: item 2");
|
|
is( $nearby->{items}[2]{itemcallnumber}, '200.100', "Test first item on a shelf: item 3");
|
|
is( $nearby->{items}[3]{itemcallnumber}, '210.100', "Test first item on a shelf: item 4");
|
|
|
|
|
|
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'150.100'}{itemnumber} );
|
|
# We have
|
|
# 100.100 150.100 200.100 210.100 300.000 >
|
|
# 1 [2] 3 4 5
|
|
# There is no previous link
|
|
is( $nearby->{prev_item}, undef, "Test second item on a shelf: no previous link" );
|
|
# Clicking on next, we want a link to 500.100
|
|
is( $nearby->{next_item}{itemcallnumber}, '500.100', "Test second item on a shelf: next link 1/2" );
|
|
is( $nearby->{next_item}{itemnumber}, $cn->{'500.100'}{itemnumber}, "Test second item on a shelf: next link 2/2" );
|
|
|
|
is( scalar( @{$nearby->{items}} ), 5, "Test second item on a shelf: got 5 items" );
|
|
is( $nearby->{items}[0]{itemcallnumber}, '100.100', "Test second item on a shelf: item 1");
|
|
is( $nearby->{items}[1]{itemcallnumber}, '150.100', "Test second item on a shelf: item 2");
|
|
is( $nearby->{items}[2]{itemcallnumber}, '200.100', "Test second item on a shelf: item 3");
|
|
is( $nearby->{items}[3]{itemcallnumber}, '210.100', "Test second item on a shelf: item 4");
|
|
is( $nearby->{items}[4]{itemcallnumber}, '300.000', "Test second item on a shelf: item 5");
|
|
|
|
|
|
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'710.100'}{itemnumber} );
|
|
# We have
|
|
# < 600.000 610.000 700.100 710.100 720.100 730.100 740.100 >
|
|
# 12 13 14 [15] 16 17 18
|
|
# Clicking on previous, we want a link to 410.100
|
|
is( $nearby->{prev_item}{itemcallnumber}, '410.100', "Test end shelf: previous link 1/2" );
|
|
is( $nearby->{prev_item}{itemnumber}, $cn->{'410.100'}{itemnumber}, "Test end shelf: previous link 2/2" );
|
|
# Clicking on next, we want a link to 730.100
|
|
is( $nearby->{next_item}{itemcallnumber}, '750.100', "Test end shelf: next link is a link to the last item 1/2" );
|
|
is( $nearby->{next_item}{itemnumber}, $cn->{'750.100'}{itemnumber}, "Test end shelf: next link is a link to the last item 2/2" );
|
|
|
|
is( $nearby->{items}[0]{itemcallnumber}, '600.000', "Test end shelf: item 1");
|
|
is( $nearby->{items}[1]{itemcallnumber}, '610.000', "Test end shelf: item 2");
|
|
is( $nearby->{items}[2]{itemcallnumber}, '700.100', "Test end shelf: item 3");
|
|
is( $nearby->{items}[3]{itemcallnumber}, '710.100', "Test end shelf: item 4");
|
|
is( $nearby->{items}[4]{itemcallnumber}, '720.100', "Test end shelf: item 5");
|
|
is( $nearby->{items}[5]{itemcallnumber}, '730.100', "Test end shelf: item 6");
|
|
is( $nearby->{items}[6]{itemcallnumber}, '740.100', "Test end shelf: item 7");
|
|
|
|
|
|
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'740.100'}{itemnumber} );
|
|
# We have
|
|
# < 710.100 720.100 730.100 740.100 750.100
|
|
# 15 16 17 [18] 19
|
|
# Clicking on previous, we want a link to
|
|
is( $nearby->{prev_item}{itemcallnumber}, '520.100', "Test end of the shelf: previous link 1/2" );
|
|
is( $nearby->{prev_item}{itemnumber}, $cn->{'520.100'}{itemnumber}, "Test end of the shelf: previous link 2/2" );
|
|
# No next link
|
|
is( $nearby->{next_item}, undef, "Test end of the shelf: no next link" );
|
|
|
|
is( scalar( @{$nearby->{items}} ), 5, "Test end of the shelf: got 5 items" );
|
|
is( $nearby->{items}[0]{itemcallnumber}, '710.100', "Test end of the shelf: item 1");
|
|
is( $nearby->{items}[1]{itemcallnumber}, '720.100', "Test end of the shelf: item 2");
|
|
is( $nearby->{items}[2]{itemcallnumber}, '730.100', "Test end of the shelf: item 3");
|
|
is( $nearby->{items}[3]{itemcallnumber}, '740.100', "Test end of the shelf: item 4");
|
|
is( $nearby->{items}[4]{itemcallnumber}, '750.100', "Test end of the shelf: item 5");
|
|
|
|
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'750.100'}{itemnumber} );
|
|
# We have
|
|
# < 720.100 730.100 740.100 750.100
|
|
# 16 17 18 [19]
|
|
# Clicking on previous, we want a link to
|
|
is( $nearby->{prev_item}{itemcallnumber}, '600.000', "Test last item of the shelf: previous link 1/2" );
|
|
is( $nearby->{prev_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test last item of the shelf: previous link 2/2" );
|
|
# No next link
|
|
is( $nearby->{next_item}, undef, "Test end of the shelf: no next link" );
|
|
|
|
is( scalar( @{$nearby->{items}} ), 4, "Test last item of the shelf: got 4 items" );
|
|
|
|
$dbh->rollback;
|