87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package backthink
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestStore_AppendList(t *testing.T) {
|
|
t.Parallel()
|
|
s, err := NewStore(context.Background(), newTestDB(t), discardLog())
|
|
if err != nil {
|
|
t.Fatalf("NewStore: %v", err)
|
|
}
|
|
|
|
base := time.Date(2026, 9, 6, 10, 0, 0, 0, time.UTC)
|
|
for i := 0; i < 3; i++ {
|
|
id, err := s.Append(context.Background(), Record{
|
|
Trigger: "iot.device_update",
|
|
At: base.Add(time.Duration(i) * time.Minute),
|
|
Conclusion: "nothing to report",
|
|
ShouldPush: i%2 == 0,
|
|
PushResult: PushResult{Pushed: i == 2, Route: RouteActiveClient, Detail: "ok"},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("Append %d: %v", i, err)
|
|
}
|
|
if id != int64(i+1) {
|
|
t.Fatalf("Append id = %d, want %d", id, i+1)
|
|
}
|
|
}
|
|
|
|
records, err := s.List(context.Background(), 0)
|
|
if err != nil {
|
|
t.Fatalf("List: %v", err)
|
|
}
|
|
if len(records) != 3 {
|
|
t.Fatalf("len = %d, want 3", len(records))
|
|
}
|
|
// Newest first (descending id).
|
|
if records[0].ID != 3 || records[1].ID != 2 || records[2].ID != 1 {
|
|
t.Fatalf("order = %d,%d,%d, want 3,2,1", records[0].ID, records[1].ID, records[2].ID)
|
|
}
|
|
if !records[0].ShouldPush {
|
|
t.Fatalf("records[0].ShouldPush = false, want true")
|
|
}
|
|
if !records[0].PushResult.Pushed || records[0].PushResult.Route != RouteActiveClient {
|
|
t.Fatalf("records[0].PushResult = %+v, want pushed active_client", records[0].PushResult)
|
|
}
|
|
if !records[0].At.Equal(base.Add(2 * time.Minute)) {
|
|
t.Fatalf("records[0].At = %v, want %v", records[0].At, base.Add(2*time.Minute))
|
|
}
|
|
}
|
|
|
|
func TestStore_List_Limit(t *testing.T) {
|
|
t.Parallel()
|
|
s, err := NewStore(context.Background(), newTestDB(t), discardLog())
|
|
if err != nil {
|
|
t.Fatalf("NewStore: %v", err)
|
|
}
|
|
for i := 0; i < 5; i++ {
|
|
if _, err := s.Append(context.Background(), Record{Trigger: "heartbeat", Conclusion: "x"}); err != nil {
|
|
t.Fatalf("Append %d: %v", i, err)
|
|
}
|
|
}
|
|
|
|
records, err := s.List(context.Background(), 2)
|
|
if err != nil {
|
|
t.Fatalf("List: %v", err)
|
|
}
|
|
if len(records) != 2 {
|
|
t.Fatalf("len = %d, want 2", len(records))
|
|
}
|
|
if records[0].ID != 5 || records[1].ID != 4 {
|
|
t.Fatalf("ids = %d,%d, want 5,4", records[0].ID, records[1].ID)
|
|
}
|
|
}
|
|
|
|
func TestStore_NewStore_NilDB(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := NewStore(context.Background(), nil, discardLog())
|
|
if !errors.Is(err, ErrNilDB) {
|
|
t.Fatalf("err = %v, want ErrNilDB", err)
|
|
}
|
|
}
|