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

(-)a/t/db_dependent/SIP_ILS.t (-2 / +132 lines)
Lines 5-19 Link 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 => 6;
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
=cut
72
sub testCheckinDebarredBorrower {
73
    my ($borrowers, $biblios, $items) = _init_testCheckinDebarredBorrower();
74
75
    my $borrower = $biblios->[0];
76
    my $borrowerDebarred = $biblios->[1];
77
    my $item = $items->[0];
78
    my $ilsItem = new ILS::Item $item->{barcode};
79
    my $itemForDebarred = $items->[1];
80
    my $ilsItemForDebarred = new ILS::Item $itemForDebarred->{barcode};
81
82
    #Test1
83
    my $startTime = time;
84
    my $checkin = new ILS::Transaction::Checkin;
85
    # BEGIN TRANSACTION
86
    $checkin->item($ilsItem);
87
    $checkin->do_checkin(  C4::Context->userenv->{'branch'} , Sip::timestamp(DateTime->now(time_zone => C4::Context->tz())->iso8601())  );
88
    my $endTime = time;
89
    ok(($endTime-$startTime) < 5, 'Check-in debarred borrower: Normally check-in happens in < 5 seconds.');
90
91
    #Test2
92
    $startTime = time;
93
    my $checkinForDebarred = new ILS::Transaction::Checkin;
94
    # BEGIN TRANSACTION
95
    $checkin->item($ilsItemForDebarred);
96
    $checkin->do_checkin(  C4::Context->userenv->{'branch'} , Sip::timestamp(DateTime->now(time_zone => C4::Context->tz())->iso8601())  );
97
    $endTime = time;
98
    ok(($endTime-$startTime) < 5, "Check-in debarred borrower: Check-in for a debarred borrower doesn't take more than 5 seconds.");
99
}
100
sub _init_testCheckinDebarredBorrower {
101
    my $borrowernumberDebarred = C4::Members::AddMember(
102
                    cardnumber => 'asdAasdasdasd',
103
                    firstname =>  'Asd',
104
                    surname => 'Asdasd',
105
                    categorycode => 'S',
106
                    branchcode => 'CPL',
107
                    dateofbirth => '1985-10-12',
108
#                    dateexpiry => '9999-12-31', #IF we enable dateexpiry for year 9999, we get the same issue for borrowers than we get here for Issues.
109
                    userid => 'asd123'
110
    );
111
    my $borrowernumber = C4::Members::AddMember(
112
                    cardnumber => 'asdAdebarred',
113
                    firstname =>  'De',
114
                    surname => 'Barred',
115
                    categorycode => 'S',
116
                    branchcode => 'CPL',
117
                    dateofbirth => '1985-10-12',
118
#                    dateexpiry => '9999-12-31',
119
                    userid => 'debarred'
120
    );
121
    my $borrowerDebarred = C4::Members::GetMember(borrowernumber => $borrowernumberDebarred);
122
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
123
    Koha::Borrower::Debarments::AddDebarment({
124
                    borrowernumber => $borrowernumberDebarred,
125
#                    expiration     => '',
126
#                    type           => '',
127
                    comment        => 'TESTING DEBARRMENT SETTING',
128
    });
129
130
    # Generate a record with just the ISBN
131
    my $marc_record = MARC::Record->new;
132
    $marc_record->append_fields( MARC::Field->new('020','','','a' => '0590353403') );
133
    $marc_record->append_fields( MARC::Field->new('245','','','a' => 'Debarred test biblio') );
134
    # Add the record to the DB
135
    my( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio( $marc_record, '' );
136
    my $biblio = C4::Biblio::GetBiblioData( $biblionumber );
137
138
    #Generate Items
139
    my $itemBarcodeForDebarred = 'asdNasdasdasd1';
140
    my $itemBarcode2 = 'asdNdebarreda2';
141
    my ($item_bibnum, $item_bibitemnum, $itemnumberForDebarred, $itemnumber2);
142
    ($item_bibnum, $item_bibitemnum, $itemnumberForDebarred) = C4::Items::AddItem({ itemtype => 'BK', itype => 'BK', homebranch => 'CPL', holdingbranch => 'CPL', barcode => $itemBarcodeForDebarred } , $biblionumber);
143
    ($item_bibnum, $item_bibitemnum, $itemnumber2) = C4::Items::AddItem({ itemtype => 'BK', itype => 'BK', homebranch => 'CPL', holdingbranch => 'CPL', barcode => $itemBarcode2 } , $biblionumber);
144
    my $itemForDebarred = C4::Items::GetItem($itemnumberForDebarred);
145
    my $item2 = C4::Items::GetItem($itemnumber2);
146
147
    #Checkout Items
148
    C4::Circulation::AddIssue($borrowerDebarred, $itemBarcodeForDebarred);
149
    C4::Circulation::AddIssue($borrower, $itemBarcode2);
150
151
    #Update borrower references to the DB, since they have been modified.
152
    $borrowerDebarred = C4::Members::GetMember(borrowernumber => $borrowernumberDebarred);
153
    $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
154
155
    return ([$borrower, $borrowerDebarred],[$biblio],[$item2, $itemForDebarred]);
156
}
157
158
159
# End transaction
160
$dbh->rollback;

Return to bug 13532