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("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]) } }) }