View | Details | Raw Unified | Return to bug 13532
Collapse All | Expand All

(-)a/t/db_dependent/SIP_ILS.t (-3 / +140 lines)
Lines 1-19 Link Here
1
#!/usr/bin/perl
1
#!/usr/bin/perl -d
2
#
2
#
3
# This Koha test module is a stub!
3
# This Koha test module is a stub!
4
# Add more tests here!!!
4
# Add more tests here!!!
5
5
6
use strict;
6
use strict;
7
use warnings;
7
use warnings;
8
use Carp;
8
9
9
use Test::More tests => 4;
10
use Test::More tests => 7;
11
use t::lib::Mocks qw( mock_preference );
12
13
use MARC::Record;
14
use MARC::Field;
10
15
11
BEGIN {
16
BEGIN {
12
        use FindBin;
17
        use FindBin;
13
        use lib "$FindBin::Bin/../../C4/SIP";
18
        use lib "$FindBin::Bin/../../C4/SIP";
14
        use_ok('C4::SIP::ILS');
19
        use_ok('C4::SIP::ILS');
20
        new C4::Context;
15
};
21
};
16
22
23
use C4::Members;
24
use Koha::Borrower::Debarments;
25
use C4::Circulation;
26
use C4::Biblio;
27
use C4::Items;
28
use Sip;
29
30
#Make the database handle non-autocommitting
31
my $dbh = C4::Context->dbh;
32
$dbh->{AutoCommit} = 0;
33
$dbh->{RaiseError} = 1;
34
35
# Now, set a userenv
36
C4::Context->_new_userenv('xxx');
37
C4::Context::set_userenv(0,0,0,'firstname','surname', 'CPL', 'Centerville', '', '', '');
38
t::lib::Mocks::mock_preference('dateformat', 'iso') unless C4::Context->preference('dateformat');
39
t::lib::Mocks::mock_preference('marcformat', 'MARC21') unless C4::Context->preference('marcformat');
40
t::lib::Mocks::mock_preference('DefaultClassificationSource', 'dewey') unless C4::Context->preference('DefaultClassificationSource');
41
t::lib::Mocks::mock_preference('item-level_itypes', '1'); #This forces Sip::ILS::Item to use itype-key to find the Items itype.
42
43
# Undef C4::Biblio::inverted_field_map to avoid problems introduced
44
# by caching in TransformMarcToKoha
45
undef $C4::Biblio::inverted_field_map;
46
47
testCheckinDebarredBorrower();
48
17
my $transaction = ILS::Transaction::RenewAll->new();
49
my $transaction = ILS::Transaction::RenewAll->new();
18
50
19
$transaction->patron(my $patron = ILS::Patron->new(23529000120056));
51
$transaction->patron(my $patron = ILS::Patron->new(23529000120056));
Lines 27-29 $transaction2->patron(my $patron2 = ILS::Patron->new("ABCDE12345")); Link Here
27
ok(!defined $patron2, "patron code: ABCDE12345 is invalid");
59
ok(!defined $patron2, "patron code: ABCDE12345 is invalid");
28
60
29
ok($transaction->do_renew_all(), "items renewed correctly");
61
ok($transaction->do_renew_all(), "items renewed correctly");
30
- 
62
63
=head testCheckinDebarredBorrower
64
65
There is a nasty bug where checking in Items from a debarred Borrower takes dozens of seconds.
66
In this time SIP-connections timeout.
67
This test creates two Borrowers, two Items and two Checkouts, the first being a normal case,
68
  and the second being the debarred case.
69
First test:  we check-in the normal Item and time the performance.
70
Second test: we check-in the bugged Item and time the performance.
71
Third test: we check if we can speedily instantiate a debarred Patron.
72
=cut
73
sub testCheckinDebarredBorrower {
74
    my ($borrowers, $biblios, $items) = _init_testCheckinDebarredBorrower();
75
76
    my $borrower = $biblios->[0];
77
    my $borrowerDebarred = $biblios->[1];
78
    my $item = $items->[0];
79
    my $ilsItem = new ILS::Item $item->{barcode};
80
    my $itemForDebarred = $items->[1];
81
    my $ilsItemForDebarred = new ILS::Item $itemForDebarred->{barcode};
82
83
    #Test1
84
    my $startTime = time;
85
    my $checkin = new ILS::Transaction::Checkin;
86
    # BEGIN TRANSACTION
87
    $checkin->item($ilsItem);
88
    $checkin->do_checkin(  C4::Context->userenv->{'branch'} , Sip::timestamp(DateTime->now(time_zone => C4::Context->tz())->iso8601())  );
89
    my $endTime = time;
90
    ok(($endTime-$startTime) < 5, 'Check-in debarred borrower: Normally check-in happens in < 5 seconds.');
91
92
    #Test2
93
    $startTime = time;
94
    my $checkinForDebarred = new ILS::Transaction::Checkin;
95
    # BEGIN TRANSACTION
96
    $checkinForDebarred->item($ilsItemForDebarred);
97
    $checkinForDebarred->do_checkin(  C4::Context->userenv->{'branch'} , Sip::timestamp(DateTime->now(time_zone => C4::Context->tz())->iso8601())  );
98
    $endTime = time;
99
    ok(($endTime-$startTime) < 5, "Check-in debarred borrower: Check-in for a debarred borrower doesn't take more than 5 seconds.");
100
101
    #Test3
102
    $startTime = time;
103
    $checkinForDebarred->patron($patron = new ILS::Patron $ilsItemForDebarred->{patron});
104
    $endTime = time;
105
    ok(($endTime-$startTime) < 5, "Check-in debarred borrower: Instantiating a debarred borrower takes less than 5 seconds.");
106
}
107
sub _init_testCheckinDebarredBorrower {
108
    my $borrowernumberDebarred = C4::Members::AddMember(
109
                    cardnumber => 'asdAasdasdasd',
110
                    firstname =>  'Asd',
111
                    surname => 'Asdasd',
112
                    categorycode => 'S',
113
                    branchcode => 'CPL',
114
                    dateofbirth => '1985-10-12',
115
#                    dateexpiry => '9999-12-31', #IF we enable dateexpiry for year 9999, we get the same issue for borrowers than we get here for Issues.
116
                    userid => 'asd123'
117
    );
118
    my $borrowernumber = C4::Members::AddMember(
119
                    cardnumber => 'asdAdebarred',
120
                    firstname =>  'De',
121
                    surname => 'Barred',
122
                    categorycode => 'S',
123
                    branchcode => 'CPL',
124
                    dateofbirth => '1985-10-12',
125
#                    dateexpiry => '9999-12-31',
126
                    userid => 'debarred'
127
    );
128
    my $borrowerDebarred = C4::Members::GetMember(borrowernumber => $borrowernumberDebarred);
129
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
130
    Koha::Borrower::Debarments::AddDebarment({
131
                    borrowernumber => $borrowernumberDebarred,
132
#                    expiration     => '',
133
#                    type           => '',
134
                    comment        => 'TESTING DEBARRMENT SETTING',
135
    });
136
137
    # Generate a record with just the ISBN
138
    my $marc_record = MARC::Record->new;
139
    $marc_record->append_fields( MARC::Field->new('020','','','a' => '0590353403') );
140
    $marc_record->append_fields( MARC::Field->new('245','','','a' => 'Debarred test biblio') );
141
    # Add the record to the DB
142
    my( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio( $marc_record, '' );
143
    my $biblio = C4::Biblio::GetBiblioData( $biblionumber );
144
145
    #Generate Items
146
    my $itemBarcodeForDebarred = 'asdNasdasdasd1';
147
    my $itemBarcode2 = 'asdNdebarreda2';
148
    my ($item_bibnum, $item_bibitemnum, $itemnumberForDebarred, $itemnumber2);
149
    ($item_bibnum, $item_bibitemnum, $itemnumberForDebarred) = C4::Items::AddItem({ itemtype => 'BK', itype => 'BK', homebranch => 'CPL', holdingbranch => 'CPL', barcode => $itemBarcodeForDebarred } , $biblionumber);
150
    ($item_bibnum, $item_bibitemnum, $itemnumber2) = C4::Items::AddItem({ itemtype => 'BK', itype => 'BK', homebranch => 'CPL', holdingbranch => 'CPL', barcode => $itemBarcode2 } , $biblionumber);
151
    my $itemForDebarred = C4::Items::GetItem($itemnumberForDebarred);
152
    my $item2 = C4::Items::GetItem($itemnumber2);
153
154
    #Checkout Items
155
    C4::Circulation::AddIssue($borrowerDebarred, $itemBarcodeForDebarred);
156
    C4::Circulation::AddIssue($borrower, $itemBarcode2);
157
158
    #Update borrower references to the DB, since they have been modified.
159
    $borrowerDebarred = C4::Members::GetMember(borrowernumber => $borrowernumberDebarred);
160
    $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
161
162
    return ([$borrower, $borrowerDebarred],[$biblio],[$item2, $itemForDebarred]);
163
}
164
165
166
# End transaction
167
$dbh->rollback;

Return to bug 13532