summaryrefslogtreecommitdiff
path: root/tests/test_core.c
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-17 23:02:41 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-17 23:02:41 +0200
commit2a98cce8434f7ea27f777d9e6422a1eb92ba8be7 (patch)
treeac380bc2e3e64f73adac50fbb63a7cbf1348e417 /tests/test_core.c
parent0241122e05ac0bd174d4ec43a5882397c146aa89 (diff)
downloadbokf-2a98cce8434f7ea27f777d9e6422a1eb92ba8be7.tar.gz
bokf-2a98cce8434f7ea27f777d9e6422a1eb92ba8be7.zip
sie: import CRLF, #RAR 0, zero rows; skip #IB with prior historyv0.1.6
- tokenizer treats CR as whitespace; closing brace matches with CRLF - only #RAR with year indicator 0 selects the fiscal year - zero-amount #TRANS rows are dropped instead of violating the schema - #IB becomes an IB voucher only when the year has no earlier history
Diffstat (limited to 'tests/test_core.c')
-rw-r--r--tests/test_core.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/test_core.c b/tests/test_core.c
index a9910e9..bf5bfe4 100644
--- a/tests/test_core.c
+++ b/tests/test_core.c
@@ -1143,6 +1143,76 @@ int main(void)
CHECK(!jbool(d, "ok"));
yyjson_doc_free(d);
+ /* CRLF, #RAR -1 ignored, zero-amount rows dropped */
+ {
+ static const char sie_crlf[] =
+ "#FLAGGA 0\r\n"
+ "#FORMAT PC8\r\n"
+ "#SIETYP 4\r\n"
+ "#FNAMN \"CRLF AB\"\r\n"
+ "#RAR 0 20240101 20241231\r\n"
+ "#RAR -1 20230101 20231231\r\n"
+ "#KONTO 1930 \"Företagskonto\"\r\n"
+ "#KONTO 2010 \"Eget kapital\"\r\n"
+ "#VER \"A\" \"1\" 20240201 \"Insättning\"\r\n"
+ "{\r\n"
+ "#TRANS 1930 {} 1000.00\r\n"
+ "#TRANS 2010 {} -1000.00\r\n"
+ "#TRANS 2010 {} 0.00\r\n"
+ "}\r\n";
+ char *b64 = util_b64((const unsigned char *)sie_crlf,
+ strlen(sie_crlf));
+ d = call_sie_import(g_session, org2, b64, 0);
+ CHECK_OK(d);
+ CHECK(jint(d, "result.vouchers") == 1);
+ int64_t fy_a = jint(d, "result.fiscal_year_id");
+ yyjson_doc_free(d);
+ free(b64);
+
+ d = call(reqf("{\"v\":1,\"id\":\"77a\",\"cmd\":\"fiscal_year.get\","
+ "\"session\":\"%s\",\"org\":%d,\"args\":{\"id\":%lld}}",
+ g_session, (int)org2, (long long)fy_a));
+ CHECK_OK(d);
+ CHECK_STR(d, "result.start_date", "2024-01-01");
+ CHECK_STR(d, "result.end_date", "2024-12-31");
+ yyjson_doc_free(d);
+ }
+
+ /* a later year's #IB must not duplicate carried balances */
+ {
+ static const char sie_year2[] =
+ "#FLAGGA 0\n"
+ "#FORMAT PC8\n"
+ "#SIETYP 4\n"
+ "#FNAMN \"CRLF AB\"\n"
+ "#RAR 0 20250101 20251231\n"
+ "#IB 0 1930 1000.00\n"
+ "#IB 0 2010 -1000.00\n"
+ "#VER \"A\" \"1\" 20250201 \"Insättning\"\n"
+ "{\n"
+ "#TRANS 1930 {} 50.00\n"
+ "#TRANS 2010 {} -50.00\n"
+ "}\n";
+ char *b64 = util_b64((const unsigned char *)sie_year2,
+ strlen(sie_year2));
+ d = call_sie_import(g_session, org2, b64, 0);
+ CHECK_OK(d);
+ int64_t fy_b = jint(d, "result.fiscal_year_id");
+ yyjson_doc_free(d);
+ free(b64);
+
+ d = call(reqf("{\"v\":1,\"id\":\"77b\",\"cmd\":\"report.trial_balance\","
+ "\"session\":\"%s\",\"org\":%d,\"args\":"
+ "{\"fiscal_year\":%lld}}",
+ g_session, (int)org2, (long long)fy_b));
+ CHECK_OK(d);
+ CHECK(find_amount(d, "result.accounts", "account", "1930",
+ "ib_ore") == 100000);
+ CHECK(find_amount(d, "result.accounts", "account", "1930",
+ "ub_ore") == 105000);
+ yyjson_doc_free(d);
+ }
+
/* ---------------- settings: default series ----------------------- */
d = call(reqf("{\"v\":1,\"id\":\"95\",\"cmd\":\"settings.get\","