fix templates v1
This commit is contained in:
@@ -37,6 +37,7 @@ func TestQuestions(t *testing.T) {
|
||||
{"Count", testQuestionsCount},
|
||||
{"SetPrivate", testQuestionsSetPrivate},
|
||||
{"SetPublic", testQuestionsSetPublic},
|
||||
{"NextUnread", testQuestionsNextUnread},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Cleanup(func() {
|
||||
@@ -493,3 +494,55 @@ func testQuestionsSetPublic(t *testing.T, ctx context.Context, db *questions) {
|
||||
require.False(t, got.IsPrivate)
|
||||
})
|
||||
}
|
||||
|
||||
// NextUnread 必须满足三条:只取本人的提问、只取未读(is_read=false 且未回答)、按最早优先。
|
||||
func testQuestionsNextUnread(t *testing.T, ctx context.Context, db *questions) {
|
||||
create := func(userID uint, content string) *Question {
|
||||
q, err := db.Create(ctx, CreateQuestionOptions{
|
||||
FromIP: "114.5.1.4",
|
||||
UserID: userID,
|
||||
Content: content,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
return q
|
||||
}
|
||||
|
||||
q1 := create(1, "Content - 1")
|
||||
q2 := create(1, "Content - 2")
|
||||
q3 := create(1, "Content - 3")
|
||||
other := create(2, "Content - other")
|
||||
|
||||
t.Run("oldest first", func(t *testing.T) {
|
||||
got, err := db.NextUnread(ctx, 1, 0)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, q1.ID, got.ID)
|
||||
})
|
||||
|
||||
t.Run("exclude current", func(t *testing.T) {
|
||||
got, err := db.NextUnread(ctx, 1, q1.ID)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, q2.ID, got.ID)
|
||||
})
|
||||
|
||||
t.Run("only own questions", func(t *testing.T) {
|
||||
got, err := db.NextUnread(ctx, 2, 0)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, other.ID, got.ID)
|
||||
})
|
||||
|
||||
t.Run("skip read and answered", func(t *testing.T) {
|
||||
require.Nil(t, db.SetRead(ctx, q1.ID))
|
||||
require.Nil(t, db.SetRead(ctx, q2.ID))
|
||||
require.Nil(t, db.AnswerByID(ctx, q3.ID, "Answer - 3"))
|
||||
|
||||
got, err := db.NextUnread(ctx, 1, 0)
|
||||
require.Nil(t, err)
|
||||
require.Nil(t, got, "已读与已回答都不算未读")
|
||||
})
|
||||
|
||||
t.Run("empty", func(t *testing.T) {
|
||||
got, err := db.NextUnread(ctx, 404, 0)
|
||||
require.Nil(t, err)
|
||||
require.Nil(t, got)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user