e92cadf41e6863a79f013a6f181d8a4c67842b8a
[koha-equinox.git] / t / db_dependent / Circulation / transfers.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4 use C4::Biblio;
5 use C4::Context;
6 use C4::Items;
7 use C4::Branch;
8 use C4::Circulation;
9 use Koha::Database;
10 use Koha::DateUtils;
11 use DateTime::Duration;
12
13 use t::lib::TestBuilder;
14
15 use Test::More tests => 22;
16 use Test::Deep;
17
18 BEGIN {
19     use_ok('C4::Circulation');
20 }
21 can_ok(
22     'C4::Circulation',
23     qw(
24       CreateBranchTransferLimit
25       DeleteBranchTransferLimits
26       DeleteTransfer
27       GetTransfers
28       GetTransfersFromTo
29       )
30 );
31
32 my $schema = Koha::Database->schema;
33 $schema->storage->txn_begin;
34 my $builder = t::lib::TestBuilder->new;
35
36 my $dbh = C4::Context->dbh;
37 $dbh->do(q|DELETE FROM issues|);
38 $dbh->do(q|DELETE FROM borrowers|);
39 $dbh->do(q|DELETE FROM items|);
40 $dbh->do(q|DELETE FROM branches|);
41 $dbh->do(q|DELETE FROM branch_transfer_limits|);
42 $dbh->do(q|DELETE FROM branchtransfers|);
43
44 #Add sample datas
45 #Add branches
46 my $samplebranch1 = $builder->build({
47     source => 'Branch',
48 });
49 my $samplebranch2 = $builder->build({
50     source => 'Branch',
51 });
52
53 #Add biblio and items
54 my $record = MARC::Record->new();
55 $record->append_fields(
56     MARC::Field->new( '952', '0', '0', a => $samplebranch1->{branchcode} ) );
57 my ( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio( $record, '', );
58
59 my @sampleitem1 = C4::Items::AddItem(
60     {
61         barcode        => 1,
62         itemcallnumber => 'callnumber1',
63         homebranch     => $samplebranch1->{branchcode},
64         holdingbranch  => $samplebranch1->{branchcode}
65     },
66     $biblionumber
67 );
68 my $item_id1    = $sampleitem1[2];
69 my @sampleitem2 = C4::Items::AddItem(
70     {
71         barcode        => 2,
72         itemcallnumber => 'callnumber2',
73         homebranch     => $samplebranch1->{branchcode},
74         holdingbranch  => $samplebranch1->{branchcode}
75     },
76     $biblionumber
77 );
78 my $item_id2 = $sampleitem2[2];
79
80 #Add transfers
81 ModItemTransfer(
82     $item_id1,
83     $samplebranch1->{branchcode},
84     $samplebranch2->{branchcode}
85 );
86 ModItemTransfer(
87     $item_id2,
88     $samplebranch1->{branchcode},
89     $samplebranch2->{branchcode}
90 );
91
92 #Begin Tests
93 #Test CreateBranchTransferLimit
94 is(
95     CreateBranchTransferLimit(
96         $samplebranch2->{branchcode},
97         $samplebranch1->{branchcode}, 'CODE'
98     ),
99     1,
100     "A Branch TransferLimit has been added"
101 );
102 is(CreateBranchTransferLimit(),undef,
103     "Without parameters CreateBranchTransferLimit returns undef");
104 is(CreateBranchTransferLimit($samplebranch2->{branchcode}),undef,
105     "With only tobranch CreateBranchTransferLimit returns undef");
106 is(CreateBranchTransferLimit(undef,$samplebranch2->{branchcode}),undef,
107     "With only frombranch CreateBranchTransferLimit returns undef");
108 #FIXME: Currently, we can add a transferlimit even to nonexistent branches because in the database,
109 #branch_transfer_limits.toBranch and branch_transfer_limits.fromBranch aren't foreign keys
110 #is(CreateBranchTransferLimit(-1,-1,'CODE'),0,"With wrong CreateBranchTransferLimit returns 0 - No transfertlimit added");
111
112 #Test GetTransfers
113 my @transfers = GetTransfers($item_id1);
114 cmp_deeply(
115     \@transfers,
116     [ re('^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$'), $samplebranch1->{branchcode}, $samplebranch2->{branchcode} ],
117     "Transfers of the item1"
118 );    #NOTE: Only the first transfer is returned
119 @transfers = GetTransfers;
120 is_deeply( \@transfers, [],
121     "GetTransfers without params returns an empty array" );
122 @transfers = GetTransfers(-1);
123 is_deeply( \@transfers, [],
124     "GetTransfers with a wrong item id returns an empty array" );
125
126 #Test GetTransfersFromTo
127 my @transferfrom1to2 = GetTransfersFromTo( $samplebranch1->{branchcode},
128     $samplebranch2->{branchcode} );
129 cmp_deeply(
130     \@transferfrom1to2,
131     [
132         {
133             itemnumber => $item_id1,
134             datesent   => re('^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$'),
135             frombranch => $samplebranch1->{branchcode}
136         },
137         {
138             itemnumber => $item_id2,
139             datesent   => re('^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$'),
140             frombranch => $samplebranch1->{branchcode}
141         }
142     ],
143     "Item1 and Item2 has been transferred from branch1 to branch2"
144 );
145 my @transferto = GetTransfersFromTo( undef, $samplebranch2->{branchcode} );
146 is_deeply( \@transferto, [],
147     "GetTransfersfromTo without frombranch returns an empty array" );
148 my @transferfrom = GetTransfersFromTo( $samplebranch1->{branchcode} );
149 is_deeply( \@transferfrom, [],
150     "GetTransfersfromTo without tobranch returns an empty array" );
151 @transferfrom = GetTransfersFromTo();
152 is_deeply( \@transferfrom, [],
153     "GetTransfersfromTo without params returns an empty array" );
154
155 #Test DeleteBranchTransferLimits
156 is(
157     C4::Circulation::DeleteBranchTransferLimits( $samplebranch1->{branchcode} ),
158     1,
159     "A Branch TransferLimit has been deleted"
160 );
161 is(C4::Circulation::DeleteBranchTransferLimits(),undef,"Without parameters DeleteBranchTransferLimit returns undef");
162 is(C4::Circulation::DeleteBranchTransferLimits('B'),'0E0',"With a wrong id DeleteBranchTransferLimit returns 0E0");
163
164 #Test DeleteTransfer
165 is( C4::Circulation::DeleteTransfer($item_id1),
166     1, "A the item1's transfer has been deleted" );
167 is(C4::Circulation::DeleteTransfer(),undef,"Without itemid DeleteTransfer returns undef");
168 is(C4::Circulation::DeleteTransfer(-1),'0E0',"with a wrong itemid DeleteTranfer returns 0E0");
169
170 #Test TransferSlip
171 is( C4::Circulation::TransferSlip($samplebranch1->{branchcode}, undef, 5, $samplebranch2->{branchcode}),
172     undef, "No tranferslip if invalid or undef itemnumber or barcode" );
173 is( C4::Circulation::TransferSlip($samplebranch1->{branchcode}, $item_id1, 1, $samplebranch2->{branchcode})->{'code'},
174     'TRANSFERSLIP', "Get a transferslip on valid itemnumber and/or barcode" );
175 cmp_deeply(
176     C4::Circulation::TransferSlip($samplebranch1->{branchcode}, $item_id1, undef, $samplebranch2->{branchcode}),
177     C4::Circulation::TransferSlip($samplebranch1->{branchcode}, undef, 1, $samplebranch2->{branchcode}),
178     "Barcode and itemnumber for same item both generate same TransferSlip"
179     );