fix im forwarding and message list regressions
This commit is contained in:
@@ -55,6 +55,47 @@ func TestMessageSearchDoesNotClearScannedHead(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSearchPaginationCursorUsesLastReturnedRow(t *testing.T) {
|
||||
source, err := os.ReadFile("tenant_adapter.go")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
body := string(source)
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
function string
|
||||
forbidden string
|
||||
required string
|
||||
}{
|
||||
{
|
||||
name: "p2p message search",
|
||||
function: "func (a *adapter) TenantMessageSearch",
|
||||
forbidden: "nextCursor = strconv.FormatInt(msg.SeqId, 10)",
|
||||
required: "nextCursor = strconv.FormatInt(lastSeq, 10)",
|
||||
},
|
||||
{
|
||||
name: "group message search",
|
||||
function: "func (a *adapter) tenantGroupMessageSearch",
|
||||
forbidden: "nextCursor = strconv.FormatInt(msg.SeqId, 10)",
|
||||
required: "nextCursor = strconv.FormatInt(lastSeq, 10)",
|
||||
},
|
||||
{
|
||||
name: "favorite list",
|
||||
function: "func (a *adapter) TenantFavoriteList",
|
||||
forbidden: "nextCursor = strconv.FormatInt(item.ID, 10)",
|
||||
required: "nextCursor = strconv.FormatInt(lastID, 10)",
|
||||
},
|
||||
} {
|
||||
fn := functionSource(t, body, tc.function)
|
||||
if strings.Contains(fn, tc.forbidden) {
|
||||
t.Fatalf("%s must not use the extra fetched row as next cursor", tc.name)
|
||||
}
|
||||
if !strings.Contains(fn, tc.required) {
|
||||
t.Fatalf("%s must use the last returned row as next cursor", tc.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTenantFileAccessIncludesAvatarAudienceRules(t *testing.T) {
|
||||
source, err := os.ReadFile("tenant_adapter.go")
|
||||
if err != nil {
|
||||
@@ -72,3 +113,16 @@ func TestTenantFileAccessIncludesAvatarAudienceRules(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func functionSource(t *testing.T, source, marker string) string {
|
||||
t.Helper()
|
||||
start := strings.Index(source, marker)
|
||||
if start < 0 {
|
||||
t.Fatalf("function %q not found", marker)
|
||||
}
|
||||
next := strings.Index(source[start+len(marker):], "\nfunc ")
|
||||
if next < 0 {
|
||||
return source[start:]
|
||||
}
|
||||
return source[start : start+len(marker)+next]
|
||||
}
|
||||
|
||||
@@ -2486,6 +2486,7 @@ func (a *adapter) TenantMessageSearch(id t.TenantID, topic string, uid t.Uid, qu
|
||||
defer rows.Close()
|
||||
msgs := make([]t.Message, 0, limit)
|
||||
nextCursor := ""
|
||||
lastSeq := int64(0)
|
||||
for rows.Next() {
|
||||
row := struct {
|
||||
t.Message
|
||||
@@ -2496,10 +2497,11 @@ func (a *adapter) TenantMessageSearch(id t.TenantID, topic string, uid t.Uid, qu
|
||||
}
|
||||
msg := finalizeTenantMessage(id, row.Message, row.RecalledBy)
|
||||
if len(msgs) == limit {
|
||||
nextCursor = strconv.FormatInt(msg.SeqId, 10)
|
||||
nextCursor = strconv.FormatInt(lastSeq, 10)
|
||||
continue
|
||||
}
|
||||
msgs = append(msgs, msg)
|
||||
lastSeq = msg.SeqId
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, "", err
|
||||
@@ -2546,6 +2548,7 @@ func (a *adapter) tenantGroupMessageSearch(id t.TenantID, topic string, uid t.Ui
|
||||
defer rows.Close()
|
||||
msgs := make([]t.Message, 0, limit)
|
||||
nextCursor := ""
|
||||
lastSeq := int64(0)
|
||||
for rows.Next() {
|
||||
row := struct {
|
||||
t.Message
|
||||
@@ -2556,10 +2559,11 @@ func (a *adapter) tenantGroupMessageSearch(id t.TenantID, topic string, uid t.Ui
|
||||
}
|
||||
msg := normalizeGroupMessage(id, row.Message, row.RecalledBy)
|
||||
if len(msgs) == limit {
|
||||
nextCursor = strconv.FormatInt(msg.SeqId, 10)
|
||||
nextCursor = strconv.FormatInt(lastSeq, 10)
|
||||
continue
|
||||
}
|
||||
msgs = append(msgs, msg)
|
||||
lastSeq = msg.SeqId
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, "", err
|
||||
@@ -7230,6 +7234,7 @@ func (a *adapter) TenantFavoriteList(id t.TenantID, uid t.Uid, itemType, queryTe
|
||||
defer rows.Close()
|
||||
items := make([]t.FavoriteItem, 0, limit)
|
||||
nextCursor := ""
|
||||
lastID := int64(0)
|
||||
for rows.Next() {
|
||||
item, err := scanFavorite(rows)
|
||||
if err != nil {
|
||||
@@ -7237,10 +7242,11 @@ func (a *adapter) TenantFavoriteList(id t.TenantID, uid t.Uid, itemType, queryTe
|
||||
}
|
||||
item.TenantID = id
|
||||
if len(items) == limit {
|
||||
nextCursor = strconv.FormatInt(item.ID, 10)
|
||||
nextCursor = strconv.FormatInt(lastID, 10)
|
||||
continue
|
||||
}
|
||||
items = append(items, item)
|
||||
lastID = item.ID
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, "", err
|
||||
|
||||
Reference in New Issue
Block a user