diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_core.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/test_core.c b/tests/test_core.c index 885523c..a8d8b54 100644 --- a/tests/test_core.c +++ b/tests/test_core.c @@ -150,6 +150,32 @@ static int64_t vat_box(yyjson_doc *d, const char *box) return find_amount(d, "result.boxes", "box", box, "amount_ore"); } +static yyjson_val *find_arg(yyjson_doc *d, const char *name) +{ + yyjson_val *arr = jget(d, "result.command.args"); + size_t n = arr && yyjson_is_arr(arr) ? yyjson_arr_size(arr) : 0; + for (size_t i = 0; i < n; i++) { + yyjson_val *o = yyjson_arr_get(arr, i); + yyjson_val *nv = o ? yyjson_obj_get(o, "name") : NULL; + if (nv && yyjson_is_str(nv) && + strcmp(yyjson_get_str(nv), name) == 0) + return o; + } + return NULL; +} + +static int arg_field_is(yyjson_val *arg, const char *field, const char *expect) +{ + yyjson_val *v = arg ? yyjson_obj_get(arg, field) : NULL; + return v && yyjson_is_str(v) && strcmp(yyjson_get_str(v), expect) == 0; +} + +static int arg_required(yyjson_val *arg) +{ + yyjson_val *v = arg ? yyjson_obj_get(arg, "required") : NULL; + return v && yyjson_is_bool(v) && yyjson_get_bool(v); +} + static yyjson_doc *call_sie_import(const char *session, int64_t org, const char *b64, int dry) { @@ -705,6 +731,48 @@ int main(void) CHECK_STR(d, "result.command.name", "session.open"); yyjson_doc_free(d); + d = call(reqf("{\"v\":1,\"id\":\"30a\",\"cmd\":\"describe\"," + "\"session\":\"%s\",\"args\":{\"cmd\":\"voucher.post\"}}", + g_session)); + CHECK_OK(d); + CHECK_STR(d, "result.command.name", "voucher.post"); + CHECK(arg_required(find_arg(d, "date"))); + CHECK(arg_field_is(find_arg(d, "date"), "type", "date")); + CHECK(arg_field_is(find_arg(d, "rows"), "type", "json")); + yyjson_doc_free(d); + + d = call(reqf("{\"v\":1,\"id\":\"30b\",\"cmd\":\"describe\"," + "\"session\":\"%s\",\"args\":{\"cmd\":\"account.create\"}}", + g_session)); + CHECK_OK(d); + CHECK_STR(d, "result.command.name", "account.create"); + CHECK(arg_required(find_arg(d, "number"))); + CHECK(arg_field_is(find_arg(d, "number"), "type", "string")); + yyjson_doc_free(d); + + d = call(reqf("{\"v\":1,\"id\":\"30c\",\"cmd\":\"voucher.post\"," + "\"session\":\"%s\",\"org\":%d,\"args\":" + "{\"description\":\"Saknar datum\",\"rows\":[" + "{\"account\":\"1930\",\"debit_ore\":100}," + "{\"account\":\"3001\",\"credit_ore\":100}]}}", + g_session, (int)org_id)); + CHECK_STR(d, "error.code", "INVALID_ARGS"); + yyjson_doc_free(d); + + d = call(reqf("{\"v\":1,\"id\":\"30d\",\"cmd\":\"account.create\"," + "\"session\":\"%s\",\"org\":%d,\"args\":{\"number\":1930," + "\"name\":\"Fel typ\",\"type\":\"expense\"}}", + g_session, (int)org_id)); + CHECK_STR(d, "error.code", "INVALID_ARGS"); + yyjson_doc_free(d); + + d = call(reqf("{\"v\":1,\"id\":\"30e\",\"cmd\":\"org.member_set_role\"," + "\"session\":\"%s\",\"org\":%d,\"args\":" + "{\"username\":\"admin\",\"role\":\"king\"}}", + g_session, (int)org_id)); + CHECK_STR(d, "error.code", "INVALID_ARGS"); + yyjson_doc_free(d); + d = call(reqf("{\"v\":1,\"id\":\"31\",\"cmd\":\"agent.instructions\"," "\"session\":\"%s\"}", g_session)); |
