Antonio Mika
·
2026-10-25
1package pgsdb
2
3import (
4 "log/slog"
5 "testing"
6 "time"
7
8 "github.com/jmoiron/sqlx"
9 "github.com/picosh/pico/pkg/db/postgres/pgtest"
10)
11
12func TestMain(m *testing.M) {
13 pgtest.Main(m)
14}
15
16func TestFindProjectsOrder(t *testing.T) {
17 conn := sqlx.MustConnect("postgres", pgtest.URL(t))
18 t.Cleanup(func() { _ = conn.Close() })
19 pgtest.Clean(t, conn)
20 testDB := NewDBWithConn(conn, slog.New(slog.DiscardHandler))
21
22 var userID string
23 if err := conn.Get(&userID, `INSERT INTO app_users (name) VALUES ('projectsowner') RETURNING id`); err != nil {
24 t.Fatalf("insert user: %v", err)
25 }
26
27 // "older" was created first but updated last, so the two orderings differ.
28 now := time.Now()
29 for _, p := range []struct {
30 name string
31 createdAt time.Time
32 updatedAt time.Time
33 }{
34 {"older", now.Add(-2 * time.Hour), now},
35 {"newer", now.Add(-1 * time.Hour), now.Add(-1 * time.Hour)},
36 } {
37 id, err := testDB.InsertProject(userID, p.name, p.name)
38 if err != nil {
39 t.Fatalf("insert project %s: %v", p.name, err)
40 }
41 _, err = conn.Exec(`UPDATE projects SET created_at = $1, updated_at = $2 WHERE id = $3`, p.createdAt, p.updatedAt, id)
42 if err != nil {
43 t.Fatalf("set project %s times: %v", p.name, err)
44 }
45 }
46
47 for by, want := range map[string][]string{
48 "created_at": {"newer", "older"},
49 "updated_at": {"older", "newer"},
50 } {
51 projects, err := testDB.FindProjects(by)
52 if err != nil {
53 t.Fatalf("FindProjects(%s) failed: %v", by, err)
54 }
55 var got []string
56 for _, p := range projects {
57 got = append(got, p.Name)
58 }
59 if len(got) != len(want) || got[0] != want[0] || got[1] != want[1] {
60 t.Errorf("FindProjects(%s) = %v, want %v", by, got, want)
61 }
62 }
63}