summaryrefslogtreecommitdiff
path: root/tests/administration_rw_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/administration_rw_tests.cpp')
-rw-r--r--tests/administration_rw_tests.cpp177
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