@@ -75,6 +75,12 @@ CREATE TABLE users (
|
||||
if err := migratePostAuthorIndex(ctx, conn); err != nil {
|
||||
t.Fatalf("post author index migration is not idempotent: %v", err)
|
||||
}
|
||||
if err := migratePostImages(ctx, conn); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := migratePostImages(ctx, conn); err != nil {
|
||||
t.Fatalf("post images migration is not idempotent: %v", err)
|
||||
}
|
||||
if _, err := conn.ExecContext(ctx, `
|
||||
INSERT INTO users (id, name, role)
|
||||
VALUES ('homeowner', 'Home Owner', 'user'), ('plumber', 'The Plumber', 'admin');
|
||||
@@ -104,6 +110,39 @@ VALUES ('homeowner', 'root-1', 1);`); err != nil {
|
||||
if postCount != 2 || voteCount != 1 {
|
||||
t.Fatalf("counts posts=%d votes=%d", postCount, voteCount)
|
||||
}
|
||||
imageQueries := sqlc.New(conn)
|
||||
for _, image := range []sqlc.CreatePostImageParams{
|
||||
{ID: "root-image-1", PostID: "root-1", ObjectKey: "posts/root-1/1.jpg", PublicUrl: "https://cdn.example/root-1.jpg", Description: "Valve", Position: 0, Width: 1200, Height: 900, CreatedAt: "2026-08-26T08:00:00Z"},
|
||||
{ID: "root-image-2", PostID: "root-1", ObjectKey: "posts/root-1/2.png", PublicUrl: "https://cdn.example/root-2.png", Position: 1, Width: 900, Height: 1200, CreatedAt: "2026-08-26T08:00:00Z"},
|
||||
{ID: "reply-image-1", PostID: "reply-1", ObjectKey: "posts/reply-1/1.jpg", PublicUrl: "https://cdn.example/reply-1.jpg", Description: "Cartridge", Position: 0, Width: 1000, Height: 1000, CreatedAt: "2026-08-26T09:00:00Z"},
|
||||
} {
|
||||
if err := imageQueries.CreatePostImage(ctx, image); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
rootImages, err := imageQueries.ListPostImages(ctx, "root-1")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(rootImages) != 2 ||
|
||||
rootImages[0].ID != "root-image-1" ||
|
||||
rootImages[1].ID != "root-image-2" {
|
||||
t.Fatalf("root images = %+v", rootImages)
|
||||
}
|
||||
threadImages, err := imageQueries.ListPostThreadImages(ctx, "root-1")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(threadImages) != 3 {
|
||||
t.Fatalf("thread images = %+v", threadImages)
|
||||
}
|
||||
if err := imageQueries.CreatePostImage(ctx, sqlc.CreatePostImageParams{
|
||||
ID: "too-many", PostID: "root-1", ObjectKey: "posts/root-1/5.jpg",
|
||||
PublicUrl: "https://cdn.example/root-5.jpg", Position: 4,
|
||||
Width: 100, Height: 100, CreatedAt: "2026-08-26T08:00:00Z",
|
||||
}); err == nil {
|
||||
t.Fatal("fifth image position unexpectedly succeeded")
|
||||
}
|
||||
var postVoteIndexCount int
|
||||
if err := conn.QueryRowContext(ctx, `
|
||||
SELECT count(*)
|
||||
|
||||
Reference in New Issue
Block a user