diff options
Diffstat (limited to 'tests/administration_rw_tests.cpp')
| -rw-r--r-- | tests/administration_rw_tests.cpp | 177 |
1 files changed, 110 insertions, 67 deletions
diff --git a/tests/administration_rw_tests.cpp b/tests/administration_rw_tests.cpp index b09fd9e..aea9625 100644 --- a/tests/administration_rw_tests.cpp +++ b/tests/administration_rw_tests.cpp @@ -159,7 +159,66 @@ TEST _administration_rw_info(void) PASS(); } -TEST _administration_rw_invoice(void) +TEST _assert_invoices_are_equal(invoice inv, invoice invr) +{ + ASSERT_STR_EQ(invr.id, inv.id); + ASSERT_STR_EQ(invr.sequential_number, inv.sequential_number); + ASSERT_STR_EQ(invr.customer_id, inv.customer_id); + ASSERT_STR_EQ(invr.supplier_id, inv.supplier_id); + + ASSERT_EQ(invr.issued_at, inv.issued_at); + ASSERT_EQ(invr.expires_at, inv.expires_at); + ASSERT_EQ(invr.delivered_at, inv.delivered_at); + ASSERT_STR_EQ(invr.document, inv.document); + ASSERT_STR_EQ(invr.project_id, inv.project_id); + ASSERT_STR_EQ(invr.cost_center_id, inv.cost_center_id); + + ASSERT_EQ(administration_billing_item_count(&inv), administration_billing_item_count(&invr)); + + int num_items = administration_billing_item_count(&inv); + for (int i = 0; i < num_items; i++) + { + billing_item* b1 = (billing_item*)list_get_at(&inv.billing_items, i); + billing_item* b2 = (billing_item*)list_get_at(&invr.billing_items, i); + + ASSERT_STR_EQ(b1->id, b2->id); + ASSERT_EQ(b1->amount, b2->amount); + ASSERT_EQ(b1->amount_is_percentage, b2->amount_is_percentage); + ASSERT_STR_EQ(b1->description, b2->description); + ASSERT_EQ(b1->net_per_item, b2->net_per_item); + ASSERT_EQ(b1->discount, b2->discount); + ASSERT_EQ(b1->discount_is_percentage, b2->discount_is_percentage); + ASSERT_EQ(b1->allowance, b2->allowance); + ASSERT_EQ(b1->net, b2->net); + ASSERT_STR_EQ(b1->currency, b2->currency); + ASSERT_STR_EQ(b1->tax_rate_id, b2->tax_rate_id); + ASSERT_EQ(b1->tax, b2->tax); + ASSERT_EQ(b1->total, b2->total); + } + + ASSERT_EQ(invr.orig_total, inv.orig_total); + ASSERT_EQ(invr.orig_tax, inv.orig_tax); + ASSERT_EQ(invr.orig_net, inv.orig_net); + ASSERT_EQ(invr.orig_allowance, inv.orig_allowance); + + ASSERT_EQ(invr.total, inv.total); + ASSERT_EQ(invr.tax, inv.tax); + ASSERT_EQ(invr.net, inv.net); + ASSERT_EQ(invr.allowance, inv.allowance); + + ASSERT_STR_EQ(invr.currency, inv.currency); + ASSERT_EQ(invr.is_triangulation, inv.is_triangulation); + ASSERT_EQ(invr.status, inv.status); + ASSERT_EQ(invr.is_outgoing, inv.is_outgoing); + ASSERT_MEM_EQ(&invr.payment_means, &inv.payment_means, sizeof(payment_information)); + ASSERT_MEM_EQ(&invr.supplier, &inv.supplier, sizeof(contact)); + ASSERT_MEM_EQ(&invr.customer, &inv.customer, sizeof(contact)); + ASSERT_MEM_EQ(&invr.addressee, &inv.addressee, sizeof(contact)); + + PASS(); +} + +TEST _administration_rw_b2b_invoice(void) { u32 count; invoice inv; @@ -169,20 +228,55 @@ TEST _administration_rw_invoice(void) administration_create_default(test_file_path); { - contact pw = administration_contact_create_empty(); - strops_copy(pw.name, "Piet Pinda", sizeof(pw.name)); - strops_copy(pw.address.address1, "Address 1", sizeof(pw.address.address1)); - strops_copy(pw.address.country_code, "NL", sizeof(pw.address.country_code)); - strops_copy(pw.address.city, "Amsterdam", sizeof(pw.address.city)); - strops_copy(pw.address.postal, "1234AA", sizeof(pw.address.postal)); - strops_copy(pw.taxid, "T123", sizeof(pw.taxid)); - strops_copy(pw.businessid, "B321", sizeof(pw.businessid)); - strops_copy(pw.email, "test@test.com", sizeof(pw.email)); - pw.type = contact_type::CONTACT_BUSINESS; + contact pw1 = _create_nl_business(); + contact pw2 = _create_nl_business(); + + inv = administration_invoice_create_empty(); + inv.supplier = pw1; + inv.customer = pw2; + inv.is_outgoing = 1; + inv.status = invoice_status::INVOICE_CONCEPT; + inv.issued_at = time(NULL); + inv.delivered_at = inv.issued_at; + inv.expires_at = inv.issued_at + 1000; + + administration_billing_item_add_to_invoice(&inv, _create_bi3(&inv)); + administration_billing_item_add_to_invoice(&inv, _create_bi4(&inv)); + administration_billing_item_add_to_invoice(&inv, _create_bi5(&inv)); + administration_billing_item_add_to_invoice(&inv, _create_bi6(&inv)); + + count = administration_invoice_count(); + ASSERT_EQ(administration_invoice_add(&inv), A_ERR_SUCCESS); + ASSERT_EQ(count+1, administration_invoice_count()); + } + + administration_reader_open_existing(test_file_path); + { + ASSERT_EQ(count+1, administration_invoice_count()); + ASSERT_EQ(A_ERR_SUCCESS, administration_invoice_get_by_id(&invr, inv.id)); + + CHECK_CALL(_assert_invoices_are_equal(inv, invr)); + } + + PASS(); +} + +TEST _administration_rw_b2c_invoice(void) +{ + u32 count; + invoice inv; + invoice invr; + + administration_writer_create(); + + administration_create_default(test_file_path); + { + contact pw1 = _create_nl_business(); + contact pw2 = _create_nl_consumer(); inv = administration_invoice_create_empty(); - inv.supplier = pw; - inv.customer = pw; + inv.supplier = pw1; + inv.customer = pw2; inv.is_outgoing = 1; inv.status = invoice_status::INVOICE_CONCEPT; inv.issued_at = time(NULL); @@ -204,59 +298,7 @@ TEST _administration_rw_invoice(void) ASSERT_EQ(count+1, administration_invoice_count()); ASSERT_EQ(A_ERR_SUCCESS, administration_invoice_get_by_id(&invr, inv.id)); - ASSERT_STR_EQ(invr.id, inv.id); - ASSERT_STR_EQ(invr.sequential_number, inv.sequential_number); - ASSERT_STR_EQ(invr.customer_id, inv.customer_id); - ASSERT_STR_EQ(invr.supplier_id, inv.supplier_id); - - ASSERT_EQ(invr.issued_at, inv.issued_at); - ASSERT_EQ(invr.expires_at, inv.expires_at); - ASSERT_EQ(invr.delivered_at, inv.delivered_at); - ASSERT_STR_EQ(invr.document, inv.document); - ASSERT_STR_EQ(invr.project_id, inv.project_id); - ASSERT_STR_EQ(invr.cost_center_id, inv.cost_center_id); - - ASSERT_EQ(administration_billing_item_count(&inv), administration_billing_item_count(&invr)); - - int num_items = administration_billing_item_count(&inv); - for (int i = 0; i < num_items; i++) - { - billing_item* b1 = (billing_item*)list_get_at(&inv.billing_items, i); - billing_item* b2 = (billing_item*)list_get_at(&invr.billing_items, i); - - ASSERT_STR_EQ(b1->id, b2->id); - ASSERT_EQ(b1->amount, b2->amount); - ASSERT_EQ(b1->amount_is_percentage, b2->amount_is_percentage); - ASSERT_STR_EQ(b1->description, b2->description); - ASSERT_EQ(b1->net_per_item, b2->net_per_item); - ASSERT_EQ(b1->discount, b2->discount); - ASSERT_EQ(b1->discount_is_percentage, b2->discount_is_percentage); - ASSERT_EQ(b1->allowance, b2->allowance); - ASSERT_EQ(b1->net, b2->net); - ASSERT_STR_EQ(b1->currency, b2->currency); - ASSERT_STR_EQ(b1->tax_rate_id, b2->tax_rate_id); - ASSERT_EQ(b1->tax, b2->tax); - ASSERT_EQ(b1->total, b2->total); - } - - ASSERT_EQ(invr.orig_total, inv.orig_total); - ASSERT_EQ(invr.orig_tax, inv.orig_tax); - ASSERT_EQ(invr.orig_net, inv.orig_net); - ASSERT_EQ(invr.orig_allowance, inv.orig_allowance); - - ASSERT_EQ(invr.total, inv.total); - ASSERT_EQ(invr.tax, inv.tax); - ASSERT_EQ(invr.net, inv.net); - ASSERT_EQ(invr.allowance, inv.allowance); - - ASSERT_STR_EQ(invr.currency, inv.currency); - ASSERT_EQ(invr.is_triangulation, inv.is_triangulation); - ASSERT_EQ(invr.status, inv.status); - ASSERT_EQ(invr.is_outgoing, inv.is_outgoing); - ASSERT_MEM_EQ(&invr.payment_means, &inv.payment_means, sizeof(payment_information)); - ASSERT_MEM_EQ(&invr.supplier, &inv.supplier, sizeof(contact)); - ASSERT_MEM_EQ(&invr.customer, &inv.customer, sizeof(contact)); - ASSERT_MEM_EQ(&invr.addressee, &inv.addressee, sizeof(contact)); + CHECK_CALL(_assert_invoices_are_equal(inv, invr)); } PASS(); @@ -271,5 +313,6 @@ SUITE(administration_rw) { RUN_TEST(_administration_rw_project); RUN_TEST(_administration_rw_contact); RUN_TEST(_administration_rw_info); - RUN_TEST(_administration_rw_invoice); + RUN_TEST(_administration_rw_b2b_invoice); + RUN_TEST(_administration_rw_b2c_invoice); }
\ No newline at end of file |
