aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_core.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/test_core.c b/tests/test_core.c
index fa808ac..27948d6 100644
--- a/tests/test_core.c
+++ b/tests/test_core.c
@@ -1301,6 +1301,77 @@ int main(void)
CHECK_STR(d, "result.attachment_dir", "/tmp/bilagor");
yyjson_doc_free(d);
+ /* ---------------- moms rules: ranges merge per box ------------- */
+ d = call(reqf("{\"v\":1,\"id\":\"110\",\"cmd\":\"org.create\","
+ "\"session\":\"%s\",\"args\":{\"name\":\"Moms AB\"}}",
+ g_session));
+ CHECK_OK(d);
+ int64_t vat_org = jint(d, "result.id");
+ CHECK(vat_org > 0);
+ yyjson_doc_free(d);
+
+ d = call(reqf("{\"v\":1,\"id\":\"111\",\"cmd\":\"voucher.post\","
+ "\"session\":\"%s\",\"org\":%d,\"args\":{\"date\":"
+ "\"2026-02-01\",\"description\":\"Försäljning A\",\"rows\":["
+ "{\"account\":\"1930\",\"debit_ore\":125000},"
+ "{\"account\":\"3001\",\"credit_ore\":100000},"
+ "{\"account\":\"2611\",\"credit_ore\":25000}]}}",
+ g_session, (int)vat_org));
+ CHECK_OK(d);
+ yyjson_doc_free(d);
+
+ d = call(reqf("{\"v\":1,\"id\":\"112\",\"cmd\":\"voucher.post\","
+ "\"session\":\"%s\",\"org\":%d,\"args\":{\"date\":"
+ "\"2026-02-02\",\"description\":\"Försäljning B\",\"rows\":["
+ "{\"account\":\"1930\",\"debit_ore\":62500},"
+ "{\"account\":\"3105\",\"credit_ore\":50000},"
+ "{\"account\":\"2611\",\"credit_ore\":12500}]}}",
+ g_session, (int)vat_org));
+ CHECK_OK(d);
+ yyjson_doc_free(d);
+
+ d = call(reqf("{\"v\":1,\"id\":\"113\",\"cmd\":\"voucher.post\","
+ "\"session\":\"%s\",\"org\":%d,\"args\":{\"date\":"
+ "\"2026-02-03\",\"description\":\"EU-inköp\",\"rows\":["
+ "{\"account\":\"4515\",\"debit_ore\":10000},"
+ "{\"account\":\"2645\",\"debit_ore\":2500},"
+ "{\"account\":\"2614\",\"credit_ore\":2500},"
+ "{\"account\":\"2410\",\"credit_ore\":10000}]}}",
+ g_session, (int)vat_org));
+ CHECK_OK(d);
+ yyjson_doc_free(d);
+
+ d = call(reqf("{\"v\":1,\"id\":\"114\",\"cmd\":\"voucher.post\","
+ "\"session\":\"%s\",\"org\":%d,\"args\":{\"date\":"
+ "\"2026-02-04\",\"description\":\"IT-tjänst\",\"rows\":["
+ "{\"account\":\"6540\",\"debit_ore\":8000},"
+ "{\"account\":\"2641\",\"debit_ore\":2000},"
+ "{\"account\":\"2410\",\"credit_ore\":10000}]}}",
+ g_session, (int)vat_org));
+ CHECK_OK(d);
+ yyjson_doc_free(d);
+
+ d = call(reqf("{\"v\":1,\"id\":\"115\",\"cmd\":\"report.vat\","
+ "\"session\":\"%s\",\"org\":%d,\"args\":"
+ "{\"from\":\"2026-02-01\",\"to\":\"2026-02-28\"}}",
+ g_session, (int)vat_org));
+ CHECK_OK(d);
+ CHECK(vat_box(d, "05") == 150000);
+ CHECK(vat_box(d, "10") == 37500);
+ CHECK(vat_box(d, "20") == 10000);
+ CHECK(vat_box(d, "30") == 2500);
+ CHECK(vat_box(d, "48") == -4500);
+ CHECK(vat_box(d, "49") == 35500);
+ int n05 = 0;
+ yyjson_val *boxes = jget(d, "result.boxes");
+ for (size_t i = 0; i < yyjson_arr_size(boxes); i++) {
+ yyjson_val *box = yyjson_obj_get(yyjson_arr_get(boxes, i), "box");
+ if (box && yyjson_is_str(box) && strcmp(yyjson_get_str(box), "05") == 0)
+ n05++;
+ }
+ CHECK(n05 == 1);
+ yyjson_doc_free(d);
+
/* close fiscal year and verify hard stop */
d = call(reqf("{\"v\":1,\"id\":\"73\",\"cmd\":\"fiscal_year.close\","
"\"session\":\"%s\",\"org\":%d,\"args\":{\"id\":%lld,"