[Koha-patches] [PATCH] bug 2087: test cases for misc/cronjobs/longoverdue.pl
Andrew Moore
andrew.moore at liblime.com
Wed May 7 20:50:37 CEST 2008
I'm adding some functional tests that demonstrate that long_overdue.pl does what we think it does.
These tests don't actually work since override_context_prefs.pm gets in the way of C4::Context::preference. I opened up bug 2088 to address that.
There are no functional or documentation changes due to this patch.
---
t/lib/KohaTest.pm | 75 +++++++++++++++++++++++--
t/lib/KohaTest/Scripts.pm | 18 ++++++
t/lib/KohaTest/Scripts/longoverdue.pm | 99 +++++++++++++++++++++++++++++++++
3 files changed, 187 insertions(+), 5 deletions(-)
create mode 100644 t/lib/KohaTest/Scripts.pm
create mode 100644 t/lib/KohaTest/Scripts/longoverdue.pm
diff --git a/t/lib/KohaTest.pm b/t/lib/KohaTest.pm
index d706741..7ad2d5c 100644
--- a/t/lib/KohaTest.pm
+++ b/t/lib/KohaTest.pm
@@ -8,6 +8,7 @@ eval "use Test::Class";
plan skip_all => "Test::Class required for performing database tests" if $@;
# Or, maybe I should just die there.
+use C4::Auth;
use C4::Biblio;
use C4::Bookfund;
use C4::Bookseller;
@@ -195,6 +196,29 @@ sub startup_15_truncate_tables : Test( startup => 1 ) {
}
+=head startup_18_set_insecure
+
+=cut
+
+# sub startup_18_set_insecure : Test( startup => 4 ) {
+sub startup_18_set_insecure {
+ my $self = shift;
+
+ ok( C4::Context->dbh, 'got a database handle' );
+ isa_ok( C4::Context->dbh, 'DBI::db' );
+ my $query = q( UPDATE systempreferences
+ SET value = 1
+ WHERE variable = 'insecure' );
+ my $ok = C4::Context->dbh->do( $query );
+ ok( $ok, 'set context to insecure' );
+
+ my $insecure_from_preference = C4::Context->preference( 'insecure' );
+ is( $insecure_from_preference, 1, 'running in insecure mode' )
+ or diag( Data::Dumper->Dump( [ $insecure_from_preference ], [ 'insecure_from_preference' ] ) );
+
+ return $ok;
+}
+
=head2 startup_20_add_bookseller
we need a bookseller for many of the tests, so let's insert one. Feel
@@ -249,17 +273,51 @@ sub startup_24_add_member : Test(startup => 1) {
firstname => 'firstname' . $self->random_string(),
address => 'address' . $self->random_string(),
city => 'city' . $self->random_string(),
+ cardnumber => 'card' . $self->random_string(),
branchcode => 'CPL', # CPL => Centerville
categorycode => 'PT', # PT => PaTron
+ dateexpiry => '2010-01-01',
+ password => 'testpassword',
};
- my $id = AddMember( %$memberinfo );
- ok( $id, "created member: $id" );
- $self->{'memberid'} = $id;
+ my $borrowernumber = AddMember( %$memberinfo );
+ ok( $borrowernumber, "created member: $borrowernumber" );
+ $self->{'memberid'} = $borrowernumber;
return;
}
+=head2 startup_30_login
+
+=cut
+
+sub startup_30_login : Test( startup => 2 ) {
+ my $self = shift;
+
+ $self->{'sessionid'} = '12345678'; # does this value matter?
+ my $borrower_details = C4::Members::GetMemberDetails( $self->{'memberid'} );
+ ok( $borrower_details->{'cardnumber'}, 'cardnumber' );
+
+ # make a cookie and force it into $cgi.
+ # This would be a lot easier with Test::MockObject::Extends.
+ my $cgi = CGI->new( { userid => $borrower_details->{'cardnumber'},
+ password => 'testpassword' } );
+ my $setcookie = $cgi->cookie( -name => 'CGISESSID',
+ -value => $self->{'sessionid'} );
+ $cgi->{'.cookies'} = { CGISESSID => $setcookie };
+ is( $cgi->cookie('CGISESSID'), $self->{'sessionid'}, 'the CGISESSID cookie is set' );
+ # diag( Data::Dumper->Dump( [ $cgi->cookie('CGISESSID') ], [ qw( cookie ) ] ) );
+
+ # C4::Auth::checkauth sometimes emits a warning about unable to append to sessionlog. That's OK.
+ my ( $userid, $cookie, $sessionID ) = C4::Auth::checkauth( $cgi, 'noauth', {}, 'intranet' );
+ # diag( Data::Dumper->Dump( [ $userid, $cookie, $sessionID ], [ qw( userid cookie sessionID ) ] ) );
+
+ # my $session = C4::Auth::get_session( $sessionID );
+ # diag( Data::Dumper->Dump( [ $session ], [ qw( session ) ] ) );
+
+
+}
+
=head2 setup methods
setup methods are run before every test method
@@ -344,9 +402,16 @@ sub add_biblios {
d => "1835-1910." ),
MARC::Field->new( '245', '1', '4',
a => sprintf( 'The Adventures of Huckleberry Finn Test %s', $counter ),
- c => "Mark Twain ; illustrated by E.W. Kemble." )
+ c => "Mark Twain ; illustrated by E.W. Kemble." ),
+ MARC::Field->new( '952', '0', '0',
+ p => '12345678' ), # barcode
+ MARC::Field->new( '952', '0', '0',
+ a => 'CPL',
+ b => 'CPL' ),
);
- is( $appendedfieldscount, 2, 'added 2 fields' );
+
+ diag $MARC::Record::ERROR if ( $MARC::Record::ERROR );
+ is( $appendedfieldscount, 4, 'added 4 fields' );
my $frameworkcode = ''; # XXX I'd like to put something reasonable here.
my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $marcrecord, $frameworkcode );
diff --git a/t/lib/KohaTest/Scripts.pm b/t/lib/KohaTest/Scripts.pm
new file mode 100644
index 0000000..f44274d
--- /dev/null
+++ b/t/lib/KohaTest/Scripts.pm
@@ -0,0 +1,18 @@
+package KohaTest::Scripts;
+use base qw( KohaTest );
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use C4::Search;
+sub testing_class { return; };
+
+# Since this is an abstract base class, this prevents these tests from
+# being run directly unless we're testing a subclass. It just makes
+# things faster.
+__PACKAGE__->SKIP_CLASS( 1 );
+
+
+1;
diff --git a/t/lib/KohaTest/Scripts/longoverdue.pm b/t/lib/KohaTest/Scripts/longoverdue.pm
new file mode 100644
index 0000000..dcfb1a4
--- /dev/null
+++ b/t/lib/KohaTest/Scripts/longoverdue.pm
@@ -0,0 +1,99 @@
+package KohaTest::Scripts::longoverdue;
+use base qw( KohaTest::Scripts );
+
+use strict;
+use warnings;
+
+use Test::More;
+use Time::localtime;
+
+
+=head2 STARTUP METHODS
+
+These get run once, before the main test methods in this module
+
+=head3 create_overdue_item
+
+=cut
+
+sub create_overdue_item : Test( startup => 12 ) {
+ my $self = shift;
+
+ $self->add_biblios( add_items => 1 );
+
+ my $biblionumber = $self->{'biblios'}[0];
+ ok( $biblionumber, 'biblionumber' );
+ my @biblioitems = C4::Biblio::GetBiblioItemByBiblioNumber( $biblionumber );
+ ok( scalar @biblioitems > 0, 'there is at least one biblioitem' );
+ my $biblioitemnumber = $biblioitems[0]->{'biblioitemnumber'};
+ ok( $biblioitemnumber, 'got a biblioitemnumber' );
+
+ my $items = C4::Items::GetItemsByBiblioitemnumber( $biblioitemnumber);
+
+ my $itemnumber = $items->[0]->{'itemnumber'};
+ ok( $items->[0]->{'itemnumber'}, 'item number' );
+
+ $self->{'overdueitemnumber'} = $itemnumber;
+
+}
+
+sub set_overdue_item_lost : Test( 12 ) {
+ my $self = shift;
+
+ my $item = C4::Items::GetItem( $self->{'overdueitemnumber'} );
+ is( $item->{'itemnumber'}, $self->{'overdueitemnumber'}, 'itemnumber' );
+
+ ok( exists $item->{'itemlost'}, 'itemlost exists' );
+ ok( ! $item->{'itemlost'}, 'item is not lost' );
+
+ # This is a US date, but that's how C4::Dates likes it, apparently.
+ my $duedatestring = sprintf( '%02d/%02d/%04d',
+ localtime->mon() + 1,
+ localtime->mday(),
+ localtime->year() + 1900 - 1, # it was due a year ago.
+ );
+ my $duedate = C4::Dates->new( $duedatestring );
+ # diag( Data::Dumper->Dump( [ $duedate ], [ 'duedate' ] ) );
+
+ ok( $item->{'barcode'}, 'barcode' )
+ or diag( Data::Dumper->Dump( [ $item ], [ 'item' ] ) );
+ # my $item_from_barcode = C4::Items::GetItem( undef, $item->{'barcode'} );
+ # diag( Data::Dumper->Dump( [ $item_from_barcode ], [ 'item_from_barcode' ] ) );
+
+ my $borrower = C4::Members::GetMember( $self->{'memberid'} );
+ ok( $borrower->{'borrowernumber'}, 'borrowernumber' );
+
+ my ( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $borrower, $item->{'barcode'}, $duedate, 0 );
+ # diag( Data::Dumper->Dump( [ $issuingimpossible, $needsconfirmation ], [ qw( issuingimpossible needsconfirmation ) ] ) );
+ is( keys %$issuingimpossible, 0, 'issuing is not impossible' );
+ is( keys %$needsconfirmation, 0, 'issuing needs no confirmation' );
+
+ my $issue_due_date = C4::Circulation::AddIssue( $borrower, $item->{'barcode'}, $duedate );
+ TODO: {
+ local $TODO = 'C4::Circulation::AddIssue returns undef insead of the due date';
+ ok( $issue_due_date, 'due date' );
+ }
+
+ # I have to make this in a different format since that's how the database holds it.
+ my $duedateyyyymmdd = sprintf( '%04d-%02d-%02d',
+ localtime->year() + 1900 - 1, # it was due a year ago.
+ localtime->mon() + 1,
+ localtime->mday(),
+ );
+
+ my $issued_item = C4::Items::GetItem( $self->{'overdueitemnumber'} );
+ is( $issued_item->{'onloan'}, $duedateyyyymmdd, "the item is checked out and due $duedatestring" );
+ is( $issued_item->{'itemlost'}, 0, 'the item is not lost' );
+ # diag( Data::Dumper->Dump( [ $issued_item ], [ 'issued_item' ] ) );
+
+ qx( ../misc/cronjobs/longoverdue.pl );
+
+ my $lost_item = C4::Items::GetItem( $self->{'overdueitemnumber'} );
+ is( $lost_item->{'onloan'}, $duedateyyyymmdd, "the item is checked out and due $duedatestring" );
+ is( $lost_item->{'itemlost'}, 2, 'the item is lost' );
+ # diag( Data::Dumper->Dump( [ $lost_item ], [ 'lost_item' ] ) );
+
+}
+
+
+1;
--
1.5.5.rc0.16.g02b00
More information about the Koha-patches
mailing list