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

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

Return to bug 13532