diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/main.cpp | 3 | ||||
| -rw-r--r-- | tests/nl_tax_tests.cpp | 114 | ||||
| -rw-r--r-- | tests/test_helper.cpp | 28 |
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; |
