Bug 8220 - QA Followup - Unit Test
[koha.git] / t / db_dependent / lib / KohaTest / Circulation.pm
1 package KohaTest::Circulation;
2 use base qw( KohaTest );
3
4 use strict;
5 use warnings;
6
7 use Test::More;
8
9 use C4::Circulation;
10 sub testing_class { 'C4::Circulation' };
11
12
13 sub methods : Test( 1 ) {
14     my $self = shift;
15     my @methods = qw( barcodedecode 
16                       decode 
17                       transferbook 
18                       TooMany 
19                       itemissues 
20                       CanBookBeIssued 
21                       AddIssue 
22                       GetLoanLength 
23                       GetIssuingRule 
24                       GetBranchBorrowerCircRule
25                       AddReturn 
26                       MarkIssueReturned 
27                       _FixOverduesOnReturn
28                       _FixAccountForLostAndReturned
29                       GetItemIssue 
30                       GetItemIssues 
31                       GetBiblioIssues 
32                       GetUpcomingDueIssues
33                       CanBookBeRenewed 
34                       AddRenewal 
35                       GetRenewCount 
36                       GetIssuingCharges 
37                       AddIssuingCharge 
38                       GetTransfers 
39                       GetTransfersFromTo 
40                       DeleteTransfer 
41                       AnonymiseIssueHistory 
42                       updateWrongTransfer 
43                       UpdateHoldingbranch 
44                       CalcDateDue  
45                       CheckValidDatedue 
46                       CheckRepeatableHolidays
47                       CheckSpecialHolidays
48                       CheckRepeatableSpecialHolidays
49                       CheckValidBarcode
50                       ReturnLostItem
51                       ProcessOfflinePayment
52                 );
53     
54     can_ok( $self->testing_class, @methods );    
55 }
56
57 =head3 setup_add_biblios
58
59 everything in the C4::Circulation really requires items, so let's do this in the setup phase.
60
61 =cut
62
63 sub setup_add_biblios : Tests( setup => 8 ) {
64     my $self = shift;
65
66     # we want to use a fresh batch of items, so clear these lists:
67     delete $self->{'items'};
68     delete $self->{'biblios'};
69
70     $self->add_biblios( add_items => 1 );
71 }
72
73
74 =head3 checkout_first_item
75
76 named parameters:
77   borrower  => borrower hashref, computed from $self->{'memberid'} if not given
78   barcode   => item barcode, barcode of $self->{'items'}[0] if not given
79   issuedate => YYYY-MM-DD of date to mark issue checked out. defaults to today.
80
81 =cut
82
83 sub checkout_first_item {
84     my $self   = shift;
85     my $params = shift;
86
87     # get passed in borrower, or default to the one in $self.
88     my $borrower = $params->{'borrower'};
89     if ( ! defined $borrower ) {
90         my $borrowernumber = $self->{'memberid'};
91         $borrower = C4::Members::GetMemberDetails( $borrowernumber );
92     }
93
94     # get the barcode passed in, or default to the first one in the items list
95     my $barcode = $params->{'barcode'};
96     if ( ! defined $barcode ) {
97         return unless $self->{'items'}[0]{'itemnumber'};
98         $barcode = $self->get_barcode_from_itemnumber( $self->{'items'}[0]{'itemnumber'} );
99     }
100
101     # get issuedate from parameters. Default to undef, which will be interpreted as today
102     my $issuedate = $params->{'issuedate'};
103
104     my ( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $borrower, $barcode );
105
106     my $datedue = C4::Circulation::AddIssue(
107         $borrower,    # borrower
108         $barcode,     # barcode
109         undef,        # datedue
110         undef,        # cancelreserve
111         $issuedate    # issuedate
112     );
113
114     my $issues = C4::Circulation::GetItemIssue( $self->{'items'}[0]{'itemnumber'} );
115
116     return $issues->{'date_due'};
117 }
118
119 =head3 get_barcode_from_itemnumber
120
121 pass in an itemnumber, returns a barcode.
122
123 Should this get moved up to KohaTest.pm? Or, is there a better alternative in C4?
124
125 =cut
126
127 sub get_barcode_from_itemnumber {
128     my $self       = shift;
129     my $itemnumber = shift;
130
131     my $sql = <<END_SQL;
132 SELECT barcode
133   FROM items
134   WHERE itemnumber = ?
135 END_SQL
136     my $dbh = C4::Context->dbh()  or return;
137     my $sth = $dbh->prepare($sql) or return;
138     $sth->execute($itemnumber) or return;
139     my ($barcode) = $sth->fetchrow_array;
140     return $barcode;
141 }
142
143 1;
144