summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/nl_tax_tests.cpp170
-rw-r--r--tests/test_helper.cpp13
2 files changed, 183 insertions, 0 deletions
diff --git a/tests/nl_tax_tests.cpp b/tests/nl_tax_tests.cpp
index 0fce093..d5b0f9b 100644
--- a/tests/nl_tax_tests.cpp
+++ b/tests/nl_tax_tests.cpp
@@ -113,9 +113,179 @@ TEST _nl_tax_2currency(void)
PASS();
}
+TEST _nl_tax_2a(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
+
+ invoice inv = _create_nl_b2b_inv_incomming();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL_IN/BV/21"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 50.0f, "NL_IN/BV/9"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.report_count, 1);
+
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "NL/2a");
+ GREATEST_ASSERT_FEQ(tl->total_net, inv.net);
+ GREATEST_ASSERT_FEQ(tl->total_tax, inv.tax);
+
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5a");
+ GREATEST_ASSERT_FEQ(tl2->total_tax, inv.tax);
+
+ tax_line* tl3 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5b");
+ GREATEST_ASSERT_FEQ(tl3->total_tax, inv.tax);
+
+ PASS();
+}
+
+TEST _nl_tax_4a(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
+
+ invoice inv = _create_nl_b2b_inv_incomming();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL_IN/BEUV/21"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 50.0f, "NL_IN/BEUV/9"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.report_count, 1);
+
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "NL/4a");
+ GREATEST_ASSERT_FEQ(tl->total_net, inv.net);
+ GREATEST_ASSERT_FEQ(tl->total_tax, inv.tax);
+
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5a");
+ GREATEST_ASSERT_FEQ(tl2->total_tax, inv.tax);
+
+ tax_line* tl3 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5b");
+ GREATEST_ASSERT_FEQ(tl3->total_tax, inv.tax);
+
+ PASS();
+}
+
+TEST _nl_tax_4b(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
+
+ invoice inv = _create_nl_b2b_inv_incomming();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL_IN/IEUV/21"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 50.0f, "NL_IN/IEUV/9"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.report_count, 1);
+
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "NL/4b");
+ GREATEST_ASSERT_FEQ(tl->total_net, inv.net);
+ GREATEST_ASSERT_FEQ(tl->total_tax, inv.tax);
+
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5a");
+ GREATEST_ASSERT_FEQ(tl2->total_tax, inv.tax);
+
+ tax_line* tl3 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5b");
+ GREATEST_ASSERT_FEQ(tl3->total_tax, inv.tax);
+
+ PASS();
+}
+
+TEST _nl_tax_5a(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
+
+ invoice inv = _create_nl_b2b_inv_outgoing();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 20.0f, "NL/21"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/9"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.report_count, 1);
+
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5a");
+ ASSERT_EQ(tl2->total_tax, inv.tax);
+
+ PASS();
+}
+
+TEST _nl_tax_5b(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
+
+ invoice inv = _create_nl_b2b_inv_incomming();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL_IN/21/5B"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 50.0f, "NL_IN/9/5B"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.report_count, 1);
+
+ tax_line* tl3 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5b");
+ GREATEST_ASSERT_FEQ(tl3->total_tax, inv.tax);
+
+ PASS();
+}
+
+TEST _nl_tax_5c(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
+
+ invoice inv = _create_nl_b2b_inv_outgoing();
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 20.0f, "NL/21"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/9"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ invoice inv2 = _create_nl_b2b_inv_incomming();
+ administration::billing_item_add_to_invoice(&inv2, _create_bi(1, 30.0f, "NL_IN/21/5B"));
+ administration::billing_item_add_to_invoice(&inv2, _create_bi(1, 50.0f, "NL_IN/9/5B"));
+ ASSERT_EQ(administration::invoice_add(&inv2), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.report_count, 1);
+
+ float total = inv.tax - inv2.tax;
+ if (total < 0.0f) total = (float)ceil(total);
+ else total = (float)floor(total);
+
+ tax_line* tl3 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5c");
+ GREATEST_ASSERT_FEQ(tl3->total_tax, total);
+
+ PASS();
+}
+
SUITE(nl_tax_statement) {
RUN_TEST(_nl_tax_1a);
RUN_TEST(_nl_tax_1b);
RUN_TEST(_nl_tax_1e);
RUN_TEST(_nl_tax_2currency);
+
+ RUN_TEST(_nl_tax_2a);
+
+ RUN_TEST(_nl_tax_4a);
+ RUN_TEST(_nl_tax_4b);
+
+ RUN_TEST(_nl_tax_5a);
+ RUN_TEST(_nl_tax_5b);
+ RUN_TEST(_nl_tax_5c);
} \ No newline at end of file
diff --git a/tests/test_helper.cpp b/tests/test_helper.cpp
index 63f64ed..ebc61a3 100644
--- a/tests/test_helper.cpp
+++ b/tests/test_helper.cpp
@@ -179,6 +179,19 @@ static invoice _create_nl_b2b_inv_outgoing()
return inv;
}
+static invoice _create_nl_b2b_inv_incomming()
+{
+ invoice inv = administration::invoice_create_empty();
+ inv.supplier = _create_nl_business();
+ inv.customer = administration::company_info_get();
+ inv.is_outgoing = 0;
+ inv.status = invoice_status::INVOICE_CONCEPT;
+ inv.issued_at = time(NULL);
+ inv.delivered_at = inv.issued_at;
+ inv.expires_at = inv.issued_at + 1000;
+ return inv;
+}
+
static bool _test_peppol_file(char* id)
{
bool result = 1;