d02e2789e5
There is currently no way to delete unused invoices (for example, invoices created by mistake), and there really should be, since errors and absent-mindedness can result in numerous empty invoices over the course of years. To test: 1) Apply patch. 2) Create three invoices in the Acquisitions module. For one of them, receive at least one item. For the other two, do not receive any items. 3) View one of the invoices that does not have any items on it. 4) Try to delete it. This should succeed. 5) View the invoice that has an item. There should not be any option to delete it. 6) Do an invoice search that brings up the other invoice with no items on it. Try to delete it from the results page. This should succeed. 7) Run the unit test: > prove t/Acquisition/Invoice.t 8) Sign off. Signed-off-by: Srdjan <srdjan@catalyst.net.nz> Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> All tests and QA script pass. I also did another test: I cancelled all receipts from an existing invoice and then could successfully delete it in the last step. Signed-off-by: Galen Charlton <gmc@esilibrary.com>
152 lines
4.3 KiB
Perl
Executable file
152 lines
4.3 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
use Modern::Perl;
|
|
use C4::Context;
|
|
|
|
use Test::More tests => 49;
|
|
use Test::MockModule;
|
|
|
|
use_ok('C4::Acquisition');
|
|
|
|
my $module = new Test::MockModule('C4::Context');
|
|
$module->mock('_new_dbh', sub {
|
|
my $dbh = DBI->connect( 'DBI:Mock:', '', '' )
|
|
|| die "Cannot create handle: $DBI::errstr\n";
|
|
return $dbh;
|
|
});
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
|
|
# We need to add a resultset to avoid DBI fail
|
|
# ("DBI bind_columns: invalid number of arguments...")
|
|
my $rs = [
|
|
[qw(one two three four)],
|
|
[1, 2, 3, 4]
|
|
];
|
|
|
|
$dbh->{mock_add_resultset} = $rs;
|
|
my @invoices = C4::Acquisition::GetInvoices(
|
|
supplierid => "supplierid",
|
|
invoicenumber => "invoicenumber",
|
|
suppliername => "suppliername",
|
|
shipmentdatefrom => "shipmentdatefrom",
|
|
shipmentdateto => "shipmentdateto",
|
|
billingdatefrom => "billingdatefrom",
|
|
billingdateto => "billingdateto",
|
|
isbneanissn => "isbneanissn",
|
|
title => "title",
|
|
author => "author",
|
|
publisher => "publisher",
|
|
publicationyear => "publicationyear",
|
|
branchcode => "branchcode",
|
|
);
|
|
my $history = $dbh->{mock_all_history};
|
|
|
|
is(scalar(@$history), 1);
|
|
my @bound_params = @{ $history->[0]->{bound_params} };
|
|
is(scalar(@bound_params), 15);
|
|
is($bound_params[0], 'supplierid');
|
|
is($bound_params[1], '%invoicenumber%');
|
|
is($bound_params[2], '%suppliername%');
|
|
is($bound_params[3], 'shipmentdatefrom');
|
|
is($bound_params[4], 'shipmentdateto');
|
|
is($bound_params[5], 'billingdatefrom');
|
|
is($bound_params[6], 'billingdateto');
|
|
is($bound_params[7], 'isbneanissn');
|
|
is($bound_params[8], 'isbneanissn');
|
|
is($bound_params[9], 'isbneanissn');
|
|
is($bound_params[10], 'title');
|
|
is($bound_params[11], 'author');
|
|
is($bound_params[12], 'publisher');
|
|
is($bound_params[13], 'publicationyear');
|
|
is($bound_params[14], 'branchcode');
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
$dbh->{mock_add_resultset} = $rs;
|
|
GetInvoice(42);
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@$history), 1);
|
|
@bound_params = @{ $history->[0]->{bound_params} };
|
|
is(scalar(@bound_params), 1);
|
|
is($bound_params[0], 42);
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
$dbh->{mock_add_resultset} = $rs;
|
|
$dbh->{mock_add_resultset} = $rs;
|
|
my $invoice = GetInvoiceDetails(42);
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@$history), 2);
|
|
@bound_params = @{ $history->[0]->{bound_params} };
|
|
is(scalar(@bound_params), 1);
|
|
is($bound_params[0], 42);
|
|
@bound_params = @{ $history->[1]->{bound_params} };
|
|
is(scalar(@bound_params), 1);
|
|
is($bound_params[0], 42);
|
|
ok(exists $invoice->{orders});
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
is(AddInvoice(booksellerid => 1), undef); # Fails because of a missing parameter
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@$history), 0);
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
AddInvoice(invoicenumber => 'invoice', booksellerid => 1, unknown => "unknown");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@$history), 1);
|
|
@bound_params = @{ $history->[0]->{bound_params} };
|
|
is(scalar(@bound_params), 2);
|
|
ok(grep /^1$/, @bound_params);
|
|
ok(grep /^invoice$/, @bound_params);
|
|
ok(not grep /unknown/, @bound_params);
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
is(ModInvoice(booksellerid => 1), undef); # Fails because of a missing parameter
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@$history), 0);
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
ModInvoice(invoiceid => 3, invoicenumber => 'invoice', unknown => "unknown");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@$history), 1);
|
|
@bound_params = @{ $history->[0]->{bound_params} };
|
|
is(scalar(@bound_params), 2);
|
|
ok(grep /^3$/, @bound_params);
|
|
ok(grep /^invoice$/, @bound_params);
|
|
ok(not grep /unknown/, @bound_params);
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
CloseInvoice(42);
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@$history), 1);
|
|
@bound_params = @{ $history->[0]->{bound_params} };
|
|
is(scalar(@bound_params), 1);
|
|
is($bound_params[0], 42);
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
ReopenInvoice(42);
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@$history), 1);
|
|
@bound_params = @{ $history->[0]->{bound_params} };
|
|
is(scalar(@bound_params), 1);
|
|
is($bound_params[0], 42);
|
|
my $checkordersrs = [
|
|
[qw(COUNT)],
|
|
[2]
|
|
];
|
|
|
|
$dbh->{mock_add_resultset} = $checkordersrs;
|
|
is(DelInvoice(42), undef, "Invoices with items don't get deleted");
|
|
|
|
$checkordersrs = [
|
|
[qw(COUNT)],
|
|
[0]
|
|
];
|
|
|
|
my $deleters = [
|
|
[qw(COUNT)],
|
|
[1]
|
|
];
|
|
|
|
$dbh->{mock_add_resultset} = $checkordersrs;
|
|
$dbh->{mock_add_resultset} = $deleters;
|
|
ok(DelInvoice(42), "Invoices with items do get deleted");
|