Lines 19-25
Link Here
|
19 |
|
19 |
|
20 |
use Modern::Perl; |
20 |
use Modern::Perl; |
21 |
|
21 |
|
22 |
use Test::More tests => 13; |
22 |
use Test::More tests => 14; |
23 |
use Test::MockModule; |
23 |
use Test::MockModule; |
24 |
use Test::Exception; |
24 |
use Test::Exception; |
25 |
|
25 |
|
Lines 305-311
subtest 'add_credit() tests' => sub {
Link Here
|
305 |
'Exception thrown for UseCashRegisters:1 + payment_type:CASH + cash_register:undef'; |
305 |
'Exception thrown for UseCashRegisters:1 + payment_type:CASH + cash_register:undef'; |
306 |
|
306 |
|
307 |
# Disable cash registers |
307 |
# Disable cash registers |
308 |
t::lib::Mocks::mock_preference( 'UseCashRegisters', 1 ); |
308 |
t::lib::Mocks::mock_preference( 'UseCashRegisters', 0 ); |
309 |
|
309 |
|
310 |
$schema->storage->txn_rollback; |
310 |
$schema->storage->txn_rollback; |
311 |
}; |
311 |
}; |
Lines 717-723
subtest 'pay() tests' => sub {
Link Here
|
717 |
'Exception thrown for UseCashRegisters:1 + payment_type:CASH + cash_register:undef'; |
717 |
'Exception thrown for UseCashRegisters:1 + payment_type:CASH + cash_register:undef'; |
718 |
|
718 |
|
719 |
# Disable cash registers |
719 |
# Disable cash registers |
720 |
t::lib::Mocks::mock_preference( 'UseCashRegisters', 1 ); |
720 |
t::lib::Mocks::mock_preference( 'UseCashRegisters', 0 ); |
721 |
|
721 |
|
722 |
# Undef userenv |
722 |
# Undef userenv |
723 |
$context->mock( 'userenv', undef ); |
723 |
$context->mock( 'userenv', undef ); |
Lines 1144-1146
subtest 'Koha::Account::pay() generates credit number (Koha::Account::Line->stor
Link Here
|
1144 |
|
1144 |
|
1145 |
$schema->storage->txn_rollback; |
1145 |
$schema->storage->txn_rollback; |
1146 |
}; |
1146 |
}; |
1147 |
- |
1147 |
|
|
|
1148 |
subtest 'Koha::Account::payout_amount() tests' => sub { |
1149 |
plan tests => 21; |
1150 |
|
1151 |
$schema->storage->txn_begin; |
1152 |
|
1153 |
# delete logs and statistics |
1154 |
my $action_logs = $schema->resultset('ActionLog')->search()->count; |
1155 |
my $statistics = $schema->resultset('Statistic')->search()->count; |
1156 |
|
1157 |
my $staff = $builder->build_object( { class => 'Koha::Patrons' } ); |
1158 |
my $library = $builder->build_object( { class => 'Koha::Libraries' } ); |
1159 |
my $register = |
1160 |
$builder->build_object( { class => 'Koha::Cash::Registers' } ); |
1161 |
my $patron = $builder->build_object( { class => 'Koha::Patrons' } ); |
1162 |
my $account = |
1163 |
Koha::Account->new( { patron_id => $patron->borrowernumber } ); |
1164 |
|
1165 |
is( $account->balance, 0, 'Test patron has no balance' ); |
1166 |
|
1167 |
my $payout_params = { |
1168 |
payout_type => 'CASH', |
1169 |
branch => $library->id, |
1170 |
register_id => $register->id, |
1171 |
staff_id => $staff->id, |
1172 |
interface => 'intranet', |
1173 |
amount => -10, |
1174 |
}; |
1175 |
|
1176 |
my @required_fields = |
1177 |
( 'interface', 'staff_id', 'branch', 'payout_type', 'amount' ); |
1178 |
for my $required_field (@required_fields) { |
1179 |
my $this_payout = { %{$payout_params} }; |
1180 |
delete $this_payout->{$required_field}; |
1181 |
|
1182 |
throws_ok { |
1183 |
$account->payout_amount($this_payout); |
1184 |
} |
1185 |
'Koha::Exceptions::MissingParameter', |
1186 |
"Exception thrown if $required_field parameter missing"; |
1187 |
} |
1188 |
|
1189 |
throws_ok { |
1190 |
$account->payout_amount($payout_params); |
1191 |
} |
1192 |
'Koha::Exceptions::Account::AmountNotPositive', |
1193 |
'Expected validation exception thrown (amount not positive)'; |
1194 |
|
1195 |
$payout_params->{amount} = 10; |
1196 |
throws_ok { |
1197 |
$account->payout_amount($payout_params); |
1198 |
} |
1199 |
'Koha::Exceptions::ParameterTooHigh', |
1200 |
'Expected validation exception thrown (amount greater than outstanding)'; |
1201 |
|
1202 |
# Enable cash registers |
1203 |
t::lib::Mocks::mock_preference( 'UseCashRegisters', 1 ); |
1204 |
throws_ok { |
1205 |
$account->payout_amount($payout_params); |
1206 |
} |
1207 |
'Koha::Exceptions::Account::RegisterRequired', |
1208 |
'Exception thrown for UseCashRegisters:1 + payout_type:CASH + cash_register:undef'; |
1209 |
|
1210 |
# Disable cash registers |
1211 |
t::lib::Mocks::mock_preference( 'UseCashRegisters', 0 ); |
1212 |
|
1213 |
# Add some outstanding credits |
1214 |
my $credit_1 = $account->add_credit( { amount => 2, interface => 'commandline' } ); |
1215 |
my $credit_2 = $account->add_credit( { amount => 3, interface => 'commandline' } ); |
1216 |
my $credit_3 = $account->add_credit( { amount => 5, interface => 'commandline' } ); |
1217 |
my $credit_4 = $account->add_credit( { amount => 10, interface => 'commandline' } ); |
1218 |
my $credits = $account->outstanding_credits(); |
1219 |
is( $credits->count, 4, "Found 4 credits with outstanding amounts" ); |
1220 |
is( $credits->total_outstanding + 0, -20, "Total -20 outstanding credit" ); |
1221 |
|
1222 |
my $payout = $account->payout_amount($payout_params); |
1223 |
is(ref($payout), 'Koha::Account::Line', 'Return the Koha::Account::Line object for the payout'); |
1224 |
is($payout->amount + 0, 10, "Payout amount recorded correctly"); |
1225 |
is($payout->amountoutstanding + 0, 0, "Full amount was paid out"); |
1226 |
$credits = $account->outstanding_credits(); |
1227 |
is($credits->count, 1, "Payout was applied against oldest outstanding credits first"); |
1228 |
is($credits->total_outstanding + 0, -10, "Total of 10 outstanding credit remaining"); |
1229 |
|
1230 |
my $credit_5 = $account->add_credit( { amount => 5, interface => 'commandline' } ); |
1231 |
$credits = $account->outstanding_credits(); |
1232 |
is($credits->count, 2, "New credit added"); |
1233 |
$payout_params->{amount} = 2.50; |
1234 |
$payout_params->{credits} = [$credit_5]; |
1235 |
$account->payout_amount($payout_params); |
1236 |
|
1237 |
$credits = $account->outstanding_credits(); |
1238 |
is($credits->count, 2, "Second credit not fully paid off"); |
1239 |
is($credits->total_outstanding + 0, -12.50, "12.50 outstanding credit remaining"); |
1240 |
$credit_4->discard_changes; |
1241 |
$credit_5->discard_changes; |
1242 |
is($credit_4->amountoutstanding + 0, -10, "Credit 4 unaffected when credit_5 was passed to payout_amount"); |
1243 |
is($credit_5->amountoutstanding + 0, -2.50, "Credit 5 correctly reduced when payout_amount called with credit_5 passed"); |
1244 |
|
1245 |
$schema->storage->txn_rollback; |
1246 |
}; |