Bug 14334: Remove AutoCommit from tests
[koha.git] / t / db_dependent / Contract.t
1 #!/usr/bin/perl
2
3 # This file is part of Koha.
4 #
5 # Copyright 2014  Biblibre SARL
6 #
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20 use Modern::Perl;
21
22 use C4::Context;
23 use Koha::Database;
24 use Koha::DateUtils;
25 use Koha::Acquisition::Booksellers;
26
27 use DateTime::Duration;
28
29 use Test::More tests => 43;
30
31 BEGIN {
32     use_ok('C4::Contract');
33 }
34
35 my $schema = Koha::Database->new->schema;
36 $schema->storage->txn_begin;
37 my $dbh = C4::Context->dbh;
38
39 $dbh->do(q|DELETE FROM aqbasket|);
40 $dbh->do(q|DELETE FROM aqcontract|);
41 $dbh->do(q|DELETE FROM aqbooksellers|);
42
43
44 my $bookseller1 = Koha::Acquisition::Bookseller->new( { name => 'My first bookseller' } )->store;
45 my $bookseller_id1 = $bookseller1->id;
46 isnt( $bookseller_id1, undef, 'AddBookseller does not return undef' );
47 my $bookseller2 = Koha::Acquisition::Bookseller->new( { name => 'My second bookseller' } )->store;
48 my $bookseller_id2 = $bookseller2->id;
49 isnt( $bookseller_id2, undef, 'AddBookseller does not return undef' );
50 my $contracts = GetContracts();
51 is( @$contracts, 0, 'GetContracts returns the correct number of contracts' );
52 my $contract = GetContract();
53 is( $contract, undef, 'GetContract without argument returns undef' );
54
55
56 my $my_contract1 = {
57     contractstartdate   => '2014-06-01',
58     contractenddate     => '2014-06-30',
59     contractname        => 'My contract name',
60     contractdescription => 'My contract description',
61     booksellerid        => $bookseller_id1,
62 };
63 my $my_contract_id1 = AddContract();
64 is( $my_contract_id1, undef, 'AddContract without argument returns undef' );
65 $my_contract_id1 = AddContract($my_contract1);
66 isnt( $my_contract_id1, undef, 'AddContract does not return undef' );
67
68 $contracts = GetContracts();
69 is( @$contracts, 1, 'AddContract adds a contract' );
70
71 $contract = GetContract();
72 is( $contract, undef, 'GetContract without argument returns undef' );
73 $contract = GetContract( { contractnumber => $my_contract_id1 } );
74 is( $contract->{contractstartdate}, $my_contract1->{contractstartdate}, 'AddContract stores the contract start date correctly.' );
75 is( $contract->{contractenddate}, $my_contract1->{contractenddate}, 'AddContract stores the contract end date correctly.' );
76 is( $contract->{contractname}, $my_contract1->{contractname}, 'AddContract stores the contract name correctly.' );
77 is( $contract->{contractdescription}, $my_contract1->{contractdescription}, 'AddContract stores the contract description correctly.' );
78 is( $contract->{booksellerid}, $my_contract1->{booksellerid}, 'AddContract stores the bookseller id correctly.' );
79
80 my $now = dt_from_string;
81 my $three_more_days = $now + DateTime::Duration->new( days => 3 );
82
83 $my_contract1 = {
84     contractstartdate   => $now->ymd,
85     contractenddate     => $three_more_days->ymd,
86     contractname        => 'My modified contract name',
87     contractdescription => 'My modified contract description',
88     booksellerid        => $bookseller_id2,
89 };
90 my $mod_status = ModContract($my_contract1);
91 is( $mod_status, undef, 'ModContract without the contract number returns 0E0' );
92
93 $my_contract1->{contractnumber} = $my_contract_id1;
94 $mod_status = ModContract($my_contract1);
95 is( $mod_status, 1, 'ModContract returns true' );
96 $contracts = GetContracts();
97 is( @$contracts, 1, 'ModContract does not modify the number of contracts' );
98 $contract = GetContract( { contractnumber => $my_contract_id1 } );
99 is( $contract->{contractstartdate}, $my_contract1->{contractstartdate}, 'ModContract updates the contract start date correctly.' );
100 is( $contract->{contractenddate}, $my_contract1->{contractenddate}, 'ModContract updates the contract end date correctly.' );
101 is( $contract->{contractname}, $my_contract1->{contractname}, 'ModContract updates the contract name correctly.' );
102 is( $contract->{contractdescription}, $my_contract1->{contractdescription}, 'ModContract updates the contract description correctly.' );
103 is( $contract->{booksellerid}, $my_contract1->{booksellerid}, 'ModContract updates the bookseller id correctly.' );
104
105
106 my $my_contract2 = {
107     contractstartdate   => '2013-08-05',
108     contractenddate     => '2013-09-25',
109     contractname        => 'My other contract name',
110     contractdescription => 'My other description contract name',
111     booksellerid        => $bookseller_id1,
112 };
113 my $my_contract_id2 = AddContract($my_contract2);
114 $contracts = GetContracts( { booksellerid => $bookseller_id1 } );
115 is( @$contracts, 1, 'GetContracts returns the correct number of contracts' );
116 $contracts = GetContracts({
117     activeonly => 1
118 });
119 is( @$contracts, 1, 'GetContracts with active only returns only current contracts' );
120 $contracts = GetContracts( { booksellerid => $bookseller_id2 } );
121 is( @$contracts, 1, 'GetContracts returns the correct number of contracts' );
122 $contracts = GetContracts();
123 is( @$contracts, 2, 'GetContracts returns the correct number of contracts' );
124
125 is( $contracts->[0]->{contractnumber}, $my_contract_id1, 'GetContracts returns the contract number correctly' );
126 is( $contracts->[0]->{contractstartdate}, $my_contract1->{contractstartdate}, 'GetContracts returns the contract start date correctly.' );
127 is( $contracts->[0]->{contractenddate}, $my_contract1->{contractenddate}, 'GetContracts returns the contract end date correctly.' );
128 is( $contracts->[0]->{contractname}, $my_contract1->{contractname}, 'GetContracts returns the contract name correctly.' );
129 is( $contracts->[0]->{contractdescription}, $my_contract1->{contractdescription}, 'GetContracts returns the contract description correctly.' );
130 is( $contracts->[0]->{booksellerid}, $my_contract1->{booksellerid}, 'GetContracts returns the bookseller id correctly.' );
131
132 is( $contracts->[1]->{contractnumber}, $my_contract_id2, 'GetContracts returns the contract number correctly' );
133 is( $contracts->[1]->{contractstartdate}, $my_contract2->{contractstartdate}, 'GetContracts returns the contract start date correctly.' );
134 is( $contracts->[1]->{contractenddate}, $my_contract2->{contractenddate}, 'GetContracts returns the contract end date correctly.' );
135 is( $contracts->[1]->{contractname}, $my_contract2->{contractname}, 'GetContracts returns the contract name correctly.' );
136 is( $contracts->[1]->{contractdescription}, $my_contract2->{contractdescription}, 'GetContracts returns the contract description correctly.' );
137 is( $contracts->[1]->{booksellerid}, $my_contract2->{booksellerid}, 'GetContracts returns the bookseller id correctly.' );
138
139
140 my $del_status = DelContract();
141 is( $del_status, undef, 'DelContract without contract number returns undef' );
142
143 $del_status = DelContract( { contractnumber => $my_contract_id1  } );
144 is( $del_status, 1, 'DelContract returns true' );
145 $contracts = GetContracts();
146 is( @$contracts, 1, 'DelContract deletes a contract' );
147
148 $del_status = DelContract( { contractnumber => $my_contract_id2 } );
149 is( $del_status, 1, 'DelContract returns true' );
150 $contracts = GetContracts();
151 is( @$contracts, 0, 'DelContract deletes a contract' );