numerus/test/remove_payment.sql

133 lines
4.6 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Test remove_payment
set client_min_messages to warning;
create extension if not exists pgtap;
reset client_min_messages;
begin;
select plan(16);
set search_path to numerus, public;
select has_function('numerus', 'remove_payment', array['uuid']);
select function_lang_is('numerus', 'remove_payment', array['uuid'], 'plpgsql');
select function_returns('numerus', 'remove_payment', array['uuid'], 'void');
select isnt_definer('numerus', 'remove_payment', array['uuid']);
select volatility_is('numerus', 'remove_payment', array['uuid'], 'volatile');
select function_privs_are('numerus', 'remove_payment', array ['uuid'], 'guest', array []::text[]);
select function_privs_are('numerus', 'remove_payment', array ['uuid'], 'invoicer', array ['EXECUTE']);
select function_privs_are('numerus', 'remove_payment', array ['uuid'], 'admin', array ['EXECUTE']);
select function_privs_are('numerus', 'remove_payment', array ['uuid'], 'authenticator', array []::text[]);
set client_min_messages to warning;
truncate expense_payment;
truncate payment_attachment;
truncate payment cascade;
truncate expense cascade;
truncate contact cascade;
truncate payment_account cascade;
truncate payment_method cascade;
truncate company cascade;
reset client_min_messages;
set constraints "company_default_payment_method_id_fkey" deferred;
insert into company (company_id, business_name, vatin, trade_name, phone, email, web, address, city, province, postal_code, country_code, currency_code, default_payment_method_id)
values (1, 'Company 2', 'XX123', '', '555-555-555', 'a@a', '', '', '', '', '', 'ES', 'EUR', 111)
;
insert into payment_method (payment_method_id, company_id, name, instructions)
values (111, 1, 'cash', 'cash')
;
set constraints "company_default_payment_method_id_fkey" immediate;
insert into contact (contact_id, company_id, name)
values ( 9, 1, 'Customer 1')
;
insert into expense (expense_id, company_id, invoice_number, contact_id, invoice_date, amount, currency_code, expense_status)
values (13, 1, 'INV001', 9, '2011-01-11', 111, 'EUR', 'paid')
, (14, 1, 'INV002', 9, '2022-02-22', 222, 'EUR', 'paid')
, (15, 1, 'INV003', 9, '2022-02-22', 333, 'EUR', 'partial')
;
insert into payment_account (payment_account_id, company_id, payment_account_type, name)
values (11, 1, 'cash', 'Cash 1')
, (12, 1, 'cash', 'Cash 2')
, (13, 1, 'other', 'Other')
;
insert into payment (payment_id, company_id, slug, description, payment_date, payment_account_id, amount, currency_code, payment_status, tags)
values (16, 1, '7ac3ae0e-b0c1-4206-a19b-0be20835edd4', 'Payment INV001', '2023-05-04', 12, 111, 'EUR', 'complete', '{tag1}')
, (17, 1, 'b57b980b-247b-4be4-a0b7-03a7819c53ae', 'First INV002', '2023-05-05', 13, 100, 'EUR', 'partial', '{tag2}')
, (18, 1, '3bdad7a8-4a1e-4ae0-b5c6-015e51ee0502', 'Second INV002', '2023-05-06', 13, 122, 'EUR', 'partial', '{tag1,tag3}')
, (19, 1, '5a524bee-8311-4d13-9adf-ef6310b26990', 'Partial INV003', '2023-05-07', 11, 123, 'EUR', 'partial', '{}')
;
insert into expense_payment (expense_id, payment_id)
values (13, 16)
, (14, 17)
, (14, 18)
, (15, 19)
;
insert into payment_attachment (payment_id, original_fileName, mime_type, content)
values (16, 'payment.txt', 'text/plain', convert_to('Pay 42', 'UTF-8'))
, (18, 'empty.html', 'text/html', convert_to('empty', 'UTF-8'))
, (19, 'payment.html', 'text/html', convert_to('<html> PAY <em>42</em></html>', 'UTF-8'))
;
select lives_ok(
$$ select remove_payment('7ac3ae0e-b0c1-4206-a19b-0be20835edd4') $$,
'Should be able to remove a complete payment'
);
select lives_ok(
$$ select remove_payment('5a524bee-8311-4d13-9adf-ef6310b26990') $$,
'Should be able to remove a partial payment, '
);
select lives_ok(
$$ select remove_payment('b57b980b-247b-4be4-a0b7-03a7819c53ae') $$,
'Should be able to remove a partial payment, leaving the expenses other partial payment'
);
select bag_eq(
$$ select description, payment_date::text, payment_account_id, amount, payment_status, tags::text from payment $$,
$$ values ('Second INV002', '2023-05-06', 13, 122, 'partial', '{tag1,tag3}')
$$,
'Should have deleted all given payments'
);
select bag_eq(
$$ select expense_id, payment_id from expense_payment$$,
$$ values (14, 18)
$$,
'Should have deleted all related expenses payments'
);
select bag_eq(
$$ select payment_id, original_filename from payment_attachment $$,
$$ values (18, 'empty.html') $$,
'Should have deleted all related attachments'
);
select bag_eq(
$$ select expense_id, expense_status from expense $$,
$$ values (13, 'pending')
, (14, 'partial')
, (15, 'pending')
$$,
'Should have updated expenses too'
);
select *
from finish();
rollback;