Test single reaction replacement, cancellation and multi-emoji rejection
This commit is contained in:
1 parent
a444f28134
commit
0f14abd6c8
2 files changed
+24
-4
No files matched your search
@@ -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);
|
||||
|
||||
+18
-3
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user