feat: 增加群聊消息查询条件
This commit is contained in:
@@ -2,6 +2,8 @@ package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http/httptest"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -75,6 +77,23 @@ func TestMessageQuerySpecsExposeAdminFields(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGroupMessageQuerySupportsOperationalFilters(t *testing.T) {
|
||||
req := httptest.NewRequest("GET", "/?seq_id=42&sender_username=alice&sender_nickname=%E5%B0%8F%E6%98%8E&group_name=%E6%B5%8B%E8%AF%95%E7%BE%A4", nil)
|
||||
query, _, args, _, _, err := buildInternalAdminListQuery(req, groupMessagesInternalQuerySpec(), "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, clause := range []string{"m.seqid = ?", "u.username LIKE ?", "p.nickname LIKE ?", "gs.name LIKE ?"} {
|
||||
if !strings.Contains(query, clause) {
|
||||
t.Errorf("group message query missing %q: %s", clause, query)
|
||||
}
|
||||
}
|
||||
want := []any{int64(42), "%alice%", "%小明%", "%测试群%"}
|
||||
if !reflect.DeepEqual(args, want) {
|
||||
t.Fatalf("unexpected filter arguments: got %#v, want %#v", args, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedactClientMessageForLog(t *testing.T) {
|
||||
raw := []byte(`{"login":{"id":"1","scheme":"basic","secret":"YWxpY2U6YWxpY2UxMjM="},"acc":{"secret":"account-secret","tmpsecret":"temp-secret"}}`)
|
||||
redacted := string(redactClientMessageForLog(raw))
|
||||
|
||||
@@ -330,7 +330,19 @@ func groupMessagesInternalQuerySpec() *internalQuerySpec {
|
||||
LEFT JOIN im_group_settings AS gs ON gs.topic=m.topic COLLATE utf8mb4_0900_ai_ci
|
||||
LEFT JOIN im_message_admin_actions AS aa ON aa.id=(SELECT MAX(a2.id) FROM im_message_admin_actions AS a2 WHERE a2.conversation_type='group' AND a2.topic=m.topic COLLATE utf8mb4_0900_ai_ci AND a2.seqid=m.seqid AND a2.action_status='success')`,
|
||||
DefaultSort: "ORDER BY m.id DESC",
|
||||
Filters: []internalQueryFilter{{"topic", "m.topic", "LIKE", "string"}, {"sender_user_id", "m.from_user", "=", "uid"}, {"content_type", contentType, "=", "string"}, {"status", status, "=", "string"}, {"keyword", "CAST(m.content AS CHAR)", "LIKE", "string"}, {"created_at_start", "m.created_at", ">=", "time"}, {"created_at_end", "m.created_at", "<=", "time"}},
|
||||
Filters: []internalQueryFilter{
|
||||
{"topic", "m.topic", "LIKE", "string"},
|
||||
{"seq_id", "m.seqid", "=", "int"},
|
||||
{"sender_user_id", "m.from_user", "=", "uid"},
|
||||
{"sender_username", "u.username", "LIKE", "string"},
|
||||
{"sender_nickname", "p.nickname", "LIKE", "string"},
|
||||
{"group_name", "gs.name", "LIKE", "string"},
|
||||
{"content_type", contentType, "=", "string"},
|
||||
{"status", status, "=", "string"},
|
||||
{"keyword", "CAST(m.content AS CHAR)", "LIKE", "string"},
|
||||
{"created_at_start", "m.created_at", ">=", "time"},
|
||||
{"created_at_end", "m.created_at", "<=", "time"},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user