Browse Source

Test single reaction replacement, cancellation and multi-emoji rejection

master
evgeny 4 days ago
parent
commit
0f14abd6c8
  1. 7
      tests/test_chat_feedback.c
  2. 21
      tests/test_chat_poll.c

7
tests/test_chat_feedback.c

@ -110,9 +110,14 @@ int main(int argc, char** argv) {
puts("PASS: message identity is deterministic and binds channel, timestamp and signature");
uint64_t ver; struct chat_feedback_record first, second, cancelled, actual;
uint8_t a[] = {1, 0}, b[] = {2, 0, 1}, answer_data[] = {1, 0, 0, 0};
uint8_t a[] = {1, 0}, b[] = {1, 1}, answer_data[] = {1, 0, 0, 0};
assert(chat_feedback_set(&source, "1001", message, CHAT_FEEDBACK_REACTION, a, sizeof(a), &ver) == 1 && ver == 1);
assert(chat_feedback_get(&source, "1001", message, source.node_id, CHAT_FEEDBACK_REACTION, &first) == 1);
uint8_t invalid_multi[] = {2, 0, 1};
assert(chat_feedback_set(&source, "1001", message, CHAT_FEEDBACK_REACTION, invalid_multi, sizeof(invalid_multi), NULL) < 0);
struct chat_feedback_record invalid = first; invalid.ver++; invalid.data_len = sizeof(invalid_multi);
memcpy(invalid.data, invalid_multi, sizeof(invalid_multi));
assert(chat_feedback_apply(&target, "1001", &invalid) < 0);
int saved_events = events;
assert(chat_feedback_set(&source, "1001", message, CHAT_FEEDBACK_REACTION, a, sizeof(a), &ver) == 0 && ver == 1);
assert(events == saved_events);

21
tests/test_chat_poll.c

@ -48,9 +48,11 @@ static void codecs(void) {
assert(chat_answer_decode(NULL, 0, &parsed) == 0 && !parsed.count);
uint8_t empty[] = {0, 0, 0}; assert(chat_answer_decode(empty, sizeof(empty), &parsed) < 0);
uint8_t ids[] = {5, 0}, read[CHAT_REACTION_SELECTED_MAX]; size_t count;
n = chat_reactions_encode(ids, 2, wire, sizeof(wire)); assert(n == 3);
assert(chat_reactions_decode(wire, n, read, &count) == 0 && count == 2 && read[0] == 0 && read[1] == 5);
wire[2] = 0; assert(chat_reactions_decode(wire, n, read, &count) < 0);
assert(chat_reactions_encode(ids, 2, wire, sizeof(wire)) < 0);
uint8_t multi[] = {2, 0, 5}; assert(chat_reactions_decode(multi, sizeof(multi), read, &count) < 0);
n = chat_reactions_encode(ids, 1, wire, sizeof(wire)); assert(n == 2);
assert(chat_reactions_decode(wire, n, read, &count) == 0 && count == 1 && read[0] == 5);
wire[1] = CHAT_REACTION_COUNT; assert(chat_reactions_decode(wire, n, read, &count) < 0);
assert(chat_reactions_encode(NULL, 0, wire, sizeof(wire)) == 0);
puts("PASS: canonical codecs, truncation, duplicate choices and UTF-8 rejection");
}
@ -97,6 +99,19 @@ int main(void) {
snprintf(request, sizeof(request), "{\"cmd\":\"react\",\"ch\":\"%s\",\"message_id\":\"%s\",\"emoji\":0}", channel, id);
result = command(inst, request, 0); assert(json_number(db, result, "$.reactions[0].count") == 1); u_free(result);
result = command(inst, request, 0); assert(json_number(db, result, "$.reaction_ver") == 2); u_free(result);
snprintf(request, sizeof(request), "{\"cmd\":\"react\",\"ch\":\"%s\",\"message_id\":\"%s\",\"emoji\":0}", channel, id);
result = command(inst, request, 0); assert(json_number(db, result, "$.reactions[0].id") == 0); u_free(result);
snprintf(request, sizeof(request), "{\"cmd\":\"react\",\"ch\":\"%s\",\"message_id\":\"%s\",\"emoji\":4}", channel, id);
result = command(inst, request, 0);
assert(json_number(db, result, "$.reactions[0].id") == 4 && json_number(db, result, "$.reaction_ver") == 4);
assert(json_number(db, result, "$.reactions[1].count") == 0); u_free(result);
snprintf(request, sizeof(request), "{\"cmd\":\"react\",\"ch\":\"%s\",\"message_id\":\"%s\",\"emoji\":0,\"on\":false}", channel, id);
result = command(inst, request, 0);
assert(json_number(db, result, "$.reactions[0].id") == 4 && json_number(db, result, "$.reaction_ver") == 4); u_free(result);
snprintf(request, sizeof(request), "{\"cmd\":\"react\",\"ch\":\"%s\",\"message_id\":\"%s\",\"emoji\":4}", channel, id);
result = command(inst, request, 0); assert(json_number(db, result, "$.reactions[0].count") == 0);
assert(json_number(db, result, "$.reaction_ver") == 5); u_free(result);
puts("PASS: selecting another emoji replaces the previous one; unselected withdrawal is inert; repeat click cancels");
snprintf(request, sizeof(request),
"{\"cmd\":\"poll_create\",\"ch\":\"%s\",\"question\":\"Выбор\",\"mode\":\"multiple\","
"\"options\":[\"Первый\",\"Второй\"],\"allow_custom_answer\":true}", channel);

Loading…
Cancel
Save