summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/main.cpp3
-rw-r--r--tests/nl_tax_tests.cpp114
-rw-r--r--tests/test_helper.cpp28
3 files changed, 145 insertions, 0 deletions
diff --git a/tests/main.cpp b/tests/main.cpp
index 358ca2e..d9bd1c9 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -4,11 +4,14 @@
#include "administration_validation_tests.cpp"
#include "peppol_write_tests.cpp"
+#include "nl_tax_tests.cpp"
+
GREATEST_MAIN_DEFS();
int main(int argc, char **argv) {
timer_lib_initialize();
GREATEST_MAIN_BEGIN();
+ RUN_SUITE(nl_tax_statement);
RUN_SUITE(administration_rw);
RUN_SUITE(administration_validate);
RUN_SUITE(peppol_write);
diff --git a/tests/nl_tax_tests.cpp b/tests/nl_tax_tests.cpp
new file mode 100644
index 0000000..e6fda94
--- /dev/null
+++ b/tests/nl_tax_tests.cpp
@@ -0,0 +1,114 @@
+
+
+TEST _nl_tax_1a(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+
+ invoice inv = _create_nl_b2b_inv_outgoing();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 20.0f, "NL/21.00"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/21.00"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.quarter_count, 1);
+
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1a");
+ ASSERT_EQ(tl->total_net, 50.0f);
+ ASSERT_EQ(tl->total_tax, 50.0f * 0.21f);
+
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
+ ASSERT_EQ(tl2->total_tax, 50.0f * 0.21f);
+
+ PASS();
+}
+
+TEST _nl_tax_1b(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+
+ invoice inv = _create_nl_b2b_inv_outgoing();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 10.0f, "NL/9.00"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 15.0f, "NL/9.00"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.quarter_count, 1);
+
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1b");
+ ASSERT_EQ(tl->total_net, 25.0f);
+ ASSERT_EQ(tl->total_tax, 25.0f * 0.09f);
+
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
+ ASSERT_EQ(tl2->total_tax, 25.0f * 0.09f);
+
+ PASS();
+}
+
+TEST _nl_tax_1d(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+
+ tax_rate new_tax_rate = administration::tax_rate_create_empty();
+ new_tax_rate.rate = 5.0f;
+ strops::copy(new_tax_rate.category_code, "S", MAX_LEN_CODE);
+ strops::copy(new_tax_rate.country_code, "NL", MAX_LEN_COUNTRY_CODE);
+ administration::tax_rate_add(new_tax_rate);
+
+ invoice inv = _create_nl_b2b_inv_outgoing();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/5.00"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 15.0f, "NL/5.00"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.quarter_count, 1);
+
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1d");
+ ASSERT_EQ(tl->total_net, 45.0f);
+ ASSERT_EQ(tl->total_tax, 45.0f * 0.05f);
+
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
+ ASSERT_EQ(tl2->total_tax, 45.0f * 0.05f);
+
+ PASS();
+}
+
+TEST _nl_tax_1e(void)
+{
+ administration::create_default(test_file_path);
+ administration::company_info_set(_create_nl_business());
+
+ invoice inv = _create_nl_b2b_inv_outgoing();
+
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "00/E"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 50.0f, "00/E"));
+ ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
+
+ tax_statement statement;
+ administration::create_tax_statement(&statement);
+ ASSERT_EQ(statement.quarter_count, 1);
+
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1e");
+ ASSERT_EQ(tl->total_net, 80.0f);
+ ASSERT_EQ(tl->total_tax, 0.0f);
+
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
+ ASSERT_EQ(tl2->total_tax, 0.0f);
+
+ PASS();
+}
+
+SUITE(nl_tax_statement) {
+ RUN_TEST(_nl_tax_1a);
+ RUN_TEST(_nl_tax_1b);
+ RUN_TEST(_nl_tax_1d);
+ RUN_TEST(_nl_tax_1e);
+} \ No newline at end of file
diff --git a/tests/test_helper.cpp b/tests/test_helper.cpp
index 1dbb2b2..167cb15 100644
--- a/tests/test_helper.cpp
+++ b/tests/test_helper.cpp
@@ -162,6 +162,34 @@ static billing_item _create_bi6(invoice *inv)
return item;
}
+static billing_item _create_bi(float amount, float npi, char* taxrate)
+{
+ billing_item item = administration::billing_item_create_empty();
+ item.amount = amount;
+ item.amount_is_percentage = 0;
+ strops::copy(item.description, "#", MAX_LEN_LONG_DESC);
+ item.net_per_item = npi;
+ item.discount = 0.0f;
+ item.discount_is_percentage = 0;
+ tax_rate rate;
+ administration::tax_rate_get_by_shorthandle(&rate, taxrate);
+ strops::copy(item.tax_rate_id, rate.id, MAX_LEN_ID);
+ return item;
+}
+
+static invoice _create_nl_b2b_inv_outgoing()
+{
+ invoice inv = administration::invoice_create_empty();
+ inv.supplier = administration::company_info_get();
+ inv.customer = _create_nl_business();
+ 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;
+ return inv;
+}
+
static bool _test_peppol_file(char* id)
{
bool result = 1;