package attach import ( "os" "path/filepath" "strings" "testing" "git.golem15.com/golem15/summercms/compass" "gocloud.dev/blob" "gocloud.dev/blob/memblob" ) func TestOpenBucketRequiresURL(t *testing.T) { dir := t.TempDir() if err := os.WriteFile(filepath.Join(dir, "storage.yaml"), []byte("uploads:\n bucket_url: \"\"\n"), 0o644); err != nil { t.Fatal(err) } cfg, err := compass.Open(compass.Options{ Dir: dir, Env: "development", Environ: []string{"SUMMER_ENV=development"}, }) if err != nil { t.Fatal(err) } _, err = OpenBucket(t.Context(), cfg) if err == nil || !strings.Contains(err.Error(), "bucket_url") { t.Fatalf("got %v, want bucket_url error", err) } } func TestOpenBucketOpensMem(t *testing.T) { dir := t.TempDir() body := "uploads:\n bucket_url: \"mem://\"\n public_path_prefix: \"/storage/uploads\"\n" if err := os.WriteFile(filepath.Join(dir, "storage.yaml"), []byte(body), 0o644); err != nil { t.Fatal(err) } cfg, err := compass.Open(compass.Options{ Dir: dir, Env: "development", Environ: []string{"SUMMER_ENV=development"}, }) if err != nil { t.Fatal(err) } bucket, err := OpenBucket(t.Context(), cfg) if err != nil { t.Fatal(err) } t.Cleanup(func() { _ = bucket.Close() }) if PublicPathPrefix() != "/storage/uploads" { t.Fatalf("prefix = %q", PublicPathPrefix()) } ctx := t.Context() if err := bucket.WriteAll(ctx, "abc/123/xyz/probe.jpg", []byte("hi"), &blob.WriterOptions{}); err != nil { t.Fatal(err) } got, err := bucket.ReadAll(ctx, "abc/123/xyz/probe.jpg") if err != nil { t.Fatal(err) } if string(got) != "hi" { t.Fatalf("read = %q", got) } } func TestPublishStoresBucket(t *testing.T) { dir := t.TempDir() if err := os.WriteFile(filepath.Join(dir, "app.yaml"), []byte("name: attach-test\n"), 0o644); err != nil { t.Fatal(err) } cfg, err := compass.Open(compass.Options{ Dir: dir, Env: "development", Environ: []string{"SUMMER_ENV=development"}, }) if err != nil { t.Fatal(err) } app := backpackApp(cfg) bucket := memblob.OpenBucket(nil) t.Cleanup(func() { _ = bucket.Close() }) if err := Publish(app, bucket); err != nil { t.Fatal(err) } got, ok := app.Lookup[*blob.Bucket]() if !ok || got != bucket { t.Fatal("Publish must store the same *blob.Bucket") } }