summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO1
-rw-r--r--tests/main.cpp3
-rw-r--r--tests/tax_tests.cpp46
3 files changed, 48 insertions, 2 deletions
diff --git a/TODO b/TODO
index 8b25d1d..b8c9cc4 100644
--- a/TODO
+++ b/TODO
@@ -3,7 +3,6 @@ TODO:
Refactor:
Testing:
-- write test to make sure all tax rates are unique per country.
- write tests for strops.hpp
- write tests that check error handling for corrupt files. (e.g. references to tax rates, project and cost center that failed to load)
- peppol testing: add a billing item for each tax category.
diff --git a/tests/main.cpp b/tests/main.cpp
index d9bd1c9..04b4407 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -3,7 +3,7 @@
#include "administration_rw_tests.cpp"
#include "administration_validation_tests.cpp"
#include "peppol_write_tests.cpp"
-
+#include "tax_tests.cpp"
#include "nl_tax_tests.cpp"
GREATEST_MAIN_DEFS();
@@ -12,6 +12,7 @@ int main(int argc, char **argv) {
GREATEST_MAIN_BEGIN();
RUN_SUITE(nl_tax_statement);
+ RUN_SUITE(tax_generic_tests);
RUN_SUITE(administration_rw);
RUN_SUITE(administration_validate);
RUN_SUITE(peppol_write);
diff --git a/tests/tax_tests.cpp b/tests/tax_tests.cpp
new file mode 100644
index 0000000..3debaa8
--- /dev/null
+++ b/tests/tax_tests.cpp
@@ -0,0 +1,46 @@
+TEST _tax_uniqueness_test(void)
+{
+ s32 country_count = country::get_count();
+
+ for (s32 i = 0; i < country_count; i++)
+ {
+ tax_rate* trb1 = (tax_rate*)memops::alloc(sizeof(tax_rate) * 500);
+ u32 trc1 = country::get_available_tax_rates(country::get_code_by_index(i), trb1, 500);
+
+ // check for duplicates in country.
+ for (u32 x1 = 0; x1 < trc1; x1++)
+ {
+ for (u32 x2 = 0; x2 < trc1; x2++)
+ {
+ if (x1 == x2) continue;
+ if (strops::equals(trb1[x1].internal_code, trb1[x2].internal_code)) {
+ FAIL();
+ }
+ }
+ }
+
+ // cross check with other countries.
+ for (s32 x = 0; x < country_count; x++)
+ {
+ if (x==i) continue;
+ tax_rate* trb2 = (tax_rate*)memops::alloc(sizeof(tax_rate) * 500);
+ u32 trc2 = country::get_available_tax_rates(country::get_code_by_index(x), trb2, 500);
+
+ for (u32 x1 = 0; x1 < trc1; x1++)
+ {
+ for (u32 x2 = 0; x2 < trc2; x2++)
+ {
+ if (strops::equals(trb1[x1].internal_code, trb2[x2].internal_code)) {
+ FAIL();
+ }
+ }
+ }
+ }
+ }
+
+ PASS();
+}
+
+SUITE(tax_generic_tests) {
+ RUN_TEST(_tax_uniqueness_test);
+} \ No newline at end of file