thread-master/apps/backend/internal/module/appnotif/usecase/service_test.go

57 lines
1.5 KiB
Go
Raw Normal View History

2026-07-20 06:33:14 +00:00
package usecase
import (
"context"
"testing"
"apps/backend/internal/module/appnotif/repository"
)
func TestNotifyJobStatePreservesReadUntilTerminalChange(t *testing.T) {
ctx := context.Background()
const (
ownerUID = int64(42)
jobID = "job-1"
template = "compose_mimic"
)
repo := repository.NewMemory()
service := New(repo)
if err := service.NotifyJobState(ctx, ownerUID, jobID, template, "queued", "等待中", 0); err != nil {
t.Fatal(err)
}
list, err := service.List(ctx, ownerUID)
if err != nil || len(list) != 1 {
t.Fatalf("list queued notification: len=%d err=%v", len(list), err)
}
if err := service.MarkRead(ctx, ownerUID, list[0].ID); err != nil {
t.Fatal(err)
}
if err := service.NotifyJobState(ctx, ownerUID, jobID, template, "running", "處理中", 50); err != nil {
t.Fatal(err)
}
list, _ = service.List(ctx, ownerUID)
if list[0].ReadAt == 0 {
t.Fatal("running progress made a read notification unread")
}
if err := service.NotifyJobState(ctx, ownerUID, jobID, template, "succeeded", "已完成", 100); err != nil {
t.Fatal(err)
}
list, _ = service.List(ctx, ownerUID)
if list[0].ReadAt != 0 {
t.Fatal("new terminal state did not become unread")
}
if err := service.MarkRead(ctx, ownerUID, list[0].ID); err != nil {
t.Fatal(err)
}
if err := service.NotifyJobState(ctx, ownerUID, jobID, template, "succeeded", "已完成", 100); err != nil {
t.Fatal(err)
}
list, _ = service.List(ctx, ownerUID)
if list[0].ReadAt == 0 {
t.Fatal("duplicate terminal state made a read notification unread")
}
}