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

(-)a/t/db_dependent/Koha/Cash/Register/Action.t (-1 / +287 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
3
# Copyright 2020 Koha Development team
4
#
5
# This file is part of Koha
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
use Test::More tests => 3;
22
23
use Koha::Database;
24
25
use t::lib::TestBuilder;
26
27
my $builder = t::lib::TestBuilder->new;
28
my $schema  = Koha::Database->new->schema;
29
30
subtest 'manager' => sub {
31
    plan tests => 2;
32
33
    $schema->storage->txn_begin;
34
35
    my $manager = $builder->build_object( { class => 'Koha::Patrons' } );
36
    my $action = $builder->build_object(
37
        {
38
            class => 'Koha::Cash::Register::Actions',
39
            value => { manager_id => $manager->borrowernumber },
40
        }
41
    );
42
43
    is( ref( $action->manager ),
44
        'Koha::Patron',
45
        'Koha::Cash::Register::Action->manager should return a Koha::Patron' );
46
47
    is( $action->manager->id, $manager->id,
48
'Koha::Cash::Registeri::Action->manager returns the correct Koha::Patron'
49
    );
50
51
    $schema->storage->txn_rollback;
52
53
};
54
55
subtest 'register' => sub {
56
    plan tests => 2;
57
58
    $schema->storage->txn_begin;
59
60
    my $register =
61
      $builder->build_object( { class => 'Koha::Cash::Registers' } );
62
    my $action = $builder->build_object(
63
        {
64
            class => 'Koha::Cash::Register::Actions',
65
            value => { register_id => $register->id },
66
        }
67
    );
68
69
    is(
70
        ref( $action->register ),
71
        'Koha::Cash::Register',
72
'Koha::Cash::Register::Action->register should return a Koha::Cash::Register'
73
    );
74
75
    is( $action->register->id, $register->id,
76
'Koha::Cash::Register::Action->register returns the correct Koha::Cash::Register'
77
    );
78
79
    $schema->storage->txn_rollback;
80
81
};
82
83
subtest 'cashup_summary' => sub {
84
    plan tests => 8;
85
86
    $schema->storage->txn_begin;
87
88
    my $register =
89
      $builder->build_object( { class => 'Koha::Cash::Registers' } );
90
    my $patron  = $builder->build_object( { class => 'Koha::Patrons' } );
91
    my $manager = $builder->build_object( { class => 'Koha::Patrons' } );
92
93
    # Transaction 1
94
    my $debt1 = $builder->build_object(
95
        {
96
            class => 'Koha::Account::Lines',
97
            value => {
98
                register_id       => undef,
99
                amount            => '1.00',
100
                amountoutstanding => '0.00',
101
                credit_type_code  => undef,
102
                debit_type_code   => 'OVERDUE',
103
                date              => \'NOW() - INTERVAL 10 MINUTE'
104
            },
105
        }
106
    );
107
    my $income1 = $builder->build_object(
108
        {
109
            class => 'Koha::Account::Lines',
110
            value => {
111
                register_id       => $register->id,
112
                amount            => '-1.00',
113
                amountoutstanding => '0.00',
114
                credit_type_code  => 'PAYMENT',
115
                debit_type_code   => undef,
116
                date              => \'NOW() - INTERVAL 5 MINUTE'
117
            },
118
        }
119
    );
120
    $builder->build_object(
121
        {
122
            class => 'Koha::Account::Offsets',
123
            value => {
124
                credit_id => $income1->accountlines_id,
125
                debit_id  => $debt1->accountlines_id,
126
                amount    => '1.00',
127
                type      => 'Payment'
128
            },
129
        }
130
    );
131
132
    # Transaction 2
133
    my $debt2 = $builder->build_object(
134
        {
135
            class => 'Koha::Account::Lines',
136
            value => {
137
                register_id       => undef,
138
                amount            => '1.00',
139
                amountoutstanding => '0.00',
140
                credit_type_code  => undef,
141
                debit_type_code   => 'ACCOUNT',
142
                date              => \'NOW() - INTERVAL 3 MINUTE'
143
            },
144
        }
145
    );
146
    my $debt3 = $builder->build_object(
147
        {
148
            class => 'Koha::Account::Lines',
149
            value => {
150
                register_id       => undef,
151
                amount            => '0.50',
152
                amountoutstanding => '0.00',
153
                credit_type_code  => undef,
154
                debit_type_code   => 'LOST',
155
                date              => \'NOW() - INTERVAL 3 MINUTE'
156
            },
157
        }
158
    );
159
    my $income2 = $builder->build_object(
160
        {
161
            class => 'Koha::Account::Lines',
162
            value => {
163
                register_id       => $register->id,
164
                amount            => '-1.50',
165
                amountoutstanding => '0.00',
166
                credit_type_code  => 'PAYMENT',
167
                debit_type_code   => undef,
168
                date              => \'NOW() - INTERVAL 3 MINUTE'
169
            },
170
        }
171
    );
172
    $builder->build_object(
173
        {
174
            class => 'Koha::Account::Offsets',
175
            value => {
176
                credit_id => $income2->accountlines_id,
177
                debit_id  => $debt2->accountlines_id,
178
                amount    => '1.00',
179
                type      => 'Payment'
180
            },
181
        }
182
    );
183
    $builder->build_object(
184
        {
185
            class => 'Koha::Account::Offsets',
186
            value => {
187
                credit_id => $income2->accountlines_id,
188
                debit_id  => $debt3->accountlines_id,
189
                amount    => '0.50',
190
                type      => 'Payment'
191
            },
192
        }
193
    );
194
    my $expected_income = [
195
        {
196
            debit_type_code => 'ACCOUNT',
197
            total           => '1.000000',
198
            debit_type      => { 'description' => 'Account creation fee' }
199
        },
200
        {
201
            debit_type_code => 'LOST',
202
            total           => '0.500000',
203
            debit_type      => { description => 'Lost item' }
204
        },
205
        {
206
            debit_type_code => 'OVERDUE',
207
            total           => '1.000000',
208
            debit_type      => { 'description' => 'Overdue fine' }
209
        }
210
    ];
211
212
    # Transaction 3
213
    my $refund1 = $builder->build_object(
214
        {
215
            class => 'Koha::Account::Lines',
216
            value => {
217
                register_id       => undef,
218
                amount            => '-0.50',
219
                amountoutstanding => '0.00',
220
                credit_type_code  => 'REFUND',
221
                debit_type_code   => undef,
222
                date              => \'NOW() - INTERVAL 3 MINUTE'
223
            },
224
        }
225
    );
226
    my $outgoing1 = $builder->build_object(
227
        {
228
            class => 'Koha::Account::Lines',
229
            value => {
230
                register_id       => $register->id,
231
                amount            => '0.50',
232
                amountoutstanding => '0.00',
233
                credit_type_code  => undef,
234
                debit_type_code   => 'PAYOUT',
235
                date              => \'NOW() - INTERVAL 3 MINUTE'
236
            },
237
        }
238
    );
239
    $builder->build_object(
240
        {
241
            class => 'Koha::Account::Offsets',
242
            value => {
243
                credit_id => $refund1->accountlines_id,
244
                debit_id  => $outgoing1->accountlines_id,
245
                amount    => '0.50',
246
                type      => 'Refund'
247
            },
248
        }
249
    );
250
    my $expected_outgoing = [
251
        {
252
            'total'       => '0.500000',
253
            'credit_type' => {
254
                'description' => 'A refund applied to a patrons fine'
255
            },
256
            'credit_type_code' => 'REFUND'
257
        }
258
    ];
259
260
    my $cashup1 =
261
      $register->add_cashup( { manager_id => $manager->id, amount => '2.00' } );
262
263
    my $summary = $cashup1->cashup_summary;
264
265
    is( $summary->{from_date}, undef,
266
        "from_date is undefined if there is only one recorded" );
267
    is( $summary->{to_date}, $cashup1->timestamp,
268
        "to_date equals cashup timestamp" );
269
    is( ref( $summary->{income_transactions} ),
270
        'Koha::Account::Lines',
271
        "income_transactions contains Koha::Account::Lines" );
272
    is( $summary->{income_transactions}->count,
273
        2, "income_transactions contains 2 transactions" );
274
    is( ref( $summary->{outgoing_transactions} ),
275
        'Koha::Account::Lines',
276
        "outgoing_transactions contains Koha::Account::Lines" );
277
    is( $summary->{outgoing_transactions}->count,
278
        1, "outgoing_transactions contains 1 transaction" );
279
    is_deeply( $summary->{income}, $expected_income,
280
        "income arrayref is correct" );
281
    is_deeply( $summary->{outgoing}, $expected_outgoing,
282
        "outgoing arrayref is correct" );
283
284
    $schema->storage->txn_rollback;
285
};
286
287
1;

Return to bug 26172