spoc-bot-vr/storage_test.go

151 lines
3.3 KiB
Go

package main
import (
"context"
"fmt"
"math/rand"
"testing"
"time"
"github.com/breel-render/spoc-bot-vr/model"
)
func TestStorage(t *testing.T) {
ctx, can := context.WithTimeout(context.Background(), time.Minute)
defer can()
s, err := NewStorage(ctx, NewTestDriver(t))
if err != nil {
t.Fatal(err)
}
t.Run("upsert get event", func(t *testing.T) {
m := model.NewEvent(
"ID",
"URL",
1,
"Name",
"Asset",
"Datacenter",
"Team",
true,
)
if err := s.UpsertEvent(ctx, m); err != nil {
t.Fatal("unexpected error on insert:", err)
} else if err := s.UpsertEvent(ctx, m); err != nil {
t.Fatal("unexpected error on noop update:", err)
}
if got, err := s.GetEvent(ctx, m.ID); err != nil {
t.Fatal("unexpected error on get:", err)
} else if got != m {
t.Fatal("unexpected result from get:", got)
}
})
t.Run("upsert get thread", func(t *testing.T) {
m := model.NewThread(
"ID",
"URL",
1,
"Channel",
"EventID",
)
if err := s.UpsertThread(ctx, m); err != nil {
t.Fatal("unexpected error on insert:", err)
} else if err := s.UpsertThread(ctx, m); err != nil {
t.Fatal("unexpected error on noop update:", err)
}
if got, err := s.GetThread(ctx, m.ID); err != nil {
t.Fatal("unexpected error on get:", err)
} else if got != m {
t.Fatal("unexpected result from get:", got)
}
})
t.Run("upsert get message", func(t *testing.T) {
m := model.NewMessage(
"ID",
1,
"Author",
"Plaintext",
"ThreadID",
)
if err := s.UpsertMessage(ctx, m); err != nil {
t.Fatal("unexpected error on insert:", err)
} else if err := s.UpsertMessage(ctx, m); err != nil {
t.Fatal("unexpected error on noop update:", err)
}
if got, err := s.GetMessage(ctx, m.ID); err != nil {
t.Fatal("unexpected error on get:", err)
} else if got != m {
t.Fatal("unexpected result from get:", got)
}
})
t.Run("get thread messages", func(t *testing.T) {
thread := fmt.Sprintf("thread-%d", rand.Int())
m := model.NewMessage(
"ID",
1,
"Author",
"Plaintext",
thread,
)
if err := s.UpsertMessage(ctx, m); err != nil {
t.Fatal("unexpected error on insert:", err)
} else if m2, err := s.GetMessage(ctx, m.ID); err != nil {
t.Fatal("unexpected error on upsert-get:", err)
} else if m2 != m {
t.Errorf("expected %+v but got %+v", m, m2)
}
msgs, err := s.GetThreadMessages(ctx, thread)
if err != nil {
t.Fatal(err)
} else if len(msgs) != 1 {
t.Fatal(msgs)
} else if msgs[0].ThreadID != m.ThreadID {
t.Fatal(msgs[0].ThreadID)
} else if msgs[0] != m {
t.Fatalf("wanted msgs like %+v but got %+v", m, msgs[0])
}
})
t.Run("get event threads", func(t *testing.T) {
event := fmt.Sprintf("event-%d", rand.Int())
m := model.NewThread(
"ID",
"URL",
1,
"Channel",
event,
)
if err := s.UpsertThread(ctx, m); err != nil {
t.Fatal("unexpected error on insert:", err)
} else if m2, err := s.GetThread(ctx, m.ID); err != nil {
t.Fatal("unexpected error on upsert-get:", err)
} else if m2 != m {
t.Errorf("expected %+v but got %+v", m, m2)
}
msgs, err := s.GetEventThreads(ctx, event)
if err != nil {
t.Fatal(err)
} else if len(msgs) != 1 {
t.Fatal(msgs)
} else if msgs[0].EventID != m.EventID {
t.Fatal(msgs[0].EventID)
} else if msgs[0] != m {
t.Fatalf("wanted msgs like %+v but got %+v", m, msgs[0])
}
})
}