Line data Source code
1 : /* SPDX-License-Identifier: GPL-3.0-or-later */
2 : /* Copyright 2026 Peter Csaszar */
3 :
4 : /**
5 : * @file test_tg_cli_read_dispatch.c
6 : * @brief Verify that arg_parse recognises all read subcommands that tg-cli
7 : * now dispatches (FEAT-37 refactor — tg-cli exposes every command).
8 : *
9 : * These are parser-level tests only; no RPC is performed.
10 : */
11 :
12 : #include "test_helpers.h"
13 : #include "arg_parse.h"
14 :
15 : #include <string.h>
16 :
17 2 : static void test_dispatch_me(void) {
18 2 : char *argv[] = {"tg-cli", "me", NULL};
19 : ArgResult r;
20 2 : int rc = arg_parse(2, argv, &r);
21 2 : ASSERT(rc == ARG_OK, "me: ARG_OK");
22 2 : ASSERT(r.command == CMD_ME, "me: CMD_ME");
23 : }
24 :
25 2 : static void test_dispatch_self(void) {
26 2 : char *argv[] = {"tg-cli", "self", NULL};
27 : ArgResult r;
28 2 : int rc = arg_parse(2, argv, &r);
29 2 : ASSERT(rc == ARG_OK, "self: ARG_OK");
30 2 : ASSERT(r.command == CMD_ME, "self: CMD_ME");
31 : }
32 :
33 2 : static void test_dispatch_dialogs(void) {
34 2 : char *argv[] = {"tg-cli", "dialogs", NULL};
35 : ArgResult r;
36 2 : int rc = arg_parse(2, argv, &r);
37 2 : ASSERT(rc == ARG_OK, "dialogs: ARG_OK");
38 2 : ASSERT(r.command == CMD_DIALOGS, "dialogs: CMD_DIALOGS");
39 : }
40 :
41 2 : static void test_dispatch_history(void) {
42 2 : char *argv[] = {"tg-cli", "history", "@peer", NULL};
43 : ArgResult r;
44 2 : int rc = arg_parse(3, argv, &r);
45 2 : ASSERT(rc == ARG_OK, "history: ARG_OK");
46 2 : ASSERT(r.command == CMD_HISTORY, "history: CMD_HISTORY");
47 2 : ASSERT(strcmp(r.peer, "@peer") == 0, "history: peer set");
48 : }
49 :
50 2 : static void test_dispatch_search(void) {
51 2 : char *argv[] = {"tg-cli", "search", "hello", NULL};
52 : ArgResult r;
53 2 : int rc = arg_parse(3, argv, &r);
54 2 : ASSERT(rc == ARG_OK, "search: ARG_OK");
55 2 : ASSERT(r.command == CMD_SEARCH, "search: CMD_SEARCH");
56 : }
57 :
58 2 : static void test_dispatch_contacts(void) {
59 2 : char *argv[] = {"tg-cli", "contacts", NULL};
60 : ArgResult r;
61 2 : int rc = arg_parse(2, argv, &r);
62 2 : ASSERT(rc == ARG_OK, "contacts: ARG_OK");
63 2 : ASSERT(r.command == CMD_CONTACTS, "contacts: CMD_CONTACTS");
64 : }
65 :
66 2 : static void test_dispatch_user_info(void) {
67 2 : char *argv[] = {"tg-cli", "user-info", "@durov", NULL};
68 : ArgResult r;
69 2 : int rc = arg_parse(3, argv, &r);
70 2 : ASSERT(rc == ARG_OK, "user-info: ARG_OK");
71 2 : ASSERT(r.command == CMD_USER_INFO, "user-info: CMD_USER_INFO");
72 2 : ASSERT(strcmp(r.peer, "@durov") == 0, "user-info: peer set");
73 : }
74 :
75 2 : static void test_dispatch_watch(void) {
76 2 : char *argv[] = {"tg-cli", "watch", NULL};
77 : ArgResult r;
78 2 : int rc = arg_parse(2, argv, &r);
79 2 : ASSERT(rc == ARG_OK, "watch: ARG_OK");
80 2 : ASSERT(r.command == CMD_WATCH, "watch: CMD_WATCH");
81 : }
82 :
83 2 : static void test_dispatch_download(void) {
84 2 : char *argv[] = {"tg-cli", "download", "@peer", "42", NULL};
85 : ArgResult r;
86 2 : int rc = arg_parse(4, argv, &r);
87 2 : ASSERT(rc == ARG_OK, "download: ARG_OK");
88 2 : ASSERT(r.command == CMD_DOWNLOAD, "download: CMD_DOWNLOAD");
89 2 : ASSERT(r.msg_id == 42, "download: msg_id 42");
90 : }
91 :
92 2 : static void test_dispatch_login(void) {
93 2 : char *argv[] = {"tg-cli", "login", NULL};
94 : ArgResult r;
95 2 : int rc = arg_parse(2, argv, &r);
96 2 : ASSERT(rc == ARG_OK, "login: ARG_OK");
97 2 : ASSERT(r.command == CMD_LOGIN, "login: CMD_LOGIN");
98 2 : ASSERT(r.api_id_str == NULL, "login: api_id_str NULL");
99 2 : ASSERT(r.api_hash_str == NULL, "login: api_hash_str NULL");
100 2 : ASSERT(r.force == 0, "login: force 0");
101 : }
102 :
103 2 : static void test_dispatch_login_batch(void) {
104 2 : char *argv[] = {"tg-cli", "login",
105 : "--api-id", "12345",
106 : "--api-hash", "deadbeefdeadbeefdeadbeefdeadbeef",
107 : "--force", NULL};
108 : ArgResult r;
109 2 : int rc = arg_parse(7, argv, &r);
110 2 : ASSERT(rc == ARG_OK, "login batch: ARG_OK");
111 2 : ASSERT(r.command == CMD_LOGIN, "login batch: CMD_LOGIN");
112 2 : ASSERT(strcmp(r.api_id_str, "12345") == 0,
113 : "login batch: api_id_str");
114 2 : ASSERT(strcmp(r.api_hash_str, "deadbeefdeadbeefdeadbeefdeadbeef") == 0,
115 : "login batch: api_hash_str");
116 2 : ASSERT(r.force == 1, "login batch: force 1");
117 : }
118 :
119 2 : void run_tg_cli_read_dispatch_tests(void) {
120 2 : RUN_TEST(test_dispatch_me);
121 2 : RUN_TEST(test_dispatch_self);
122 2 : RUN_TEST(test_dispatch_dialogs);
123 2 : RUN_TEST(test_dispatch_history);
124 2 : RUN_TEST(test_dispatch_search);
125 2 : RUN_TEST(test_dispatch_contacts);
126 2 : RUN_TEST(test_dispatch_user_info);
127 2 : RUN_TEST(test_dispatch_watch);
128 2 : RUN_TEST(test_dispatch_download);
129 2 : RUN_TEST(test_dispatch_login);
130 2 : RUN_TEST(test_dispatch_login_batch);
131 2 : }
|