Fetch, resize, reformat, and cache Atmosphere avatar images
atp.pics
atproto
1//go:build cgo
2
3package transform_test
4
5import (
6 "image"
7 "image/color"
8 "image/jpeg"
9 "bytes"
10 "testing"
11
12 "atp.pics/internal/transform"
13)
14
15func makeJPEG(w, h int) []byte {
16 img := image.NewRGBA(image.Rect(0, 0, w, h))
17 for y := range h {
18 for x := range w {
19 img.Set(x, y, color.RGBA{R: 100, G: 150, B: 200, A: 255})
20 }
21 }
22 var buf bytes.Buffer
23 _ = jpeg.Encode(&buf, img, &jpeg.Options{Quality: 90})
24 return buf.Bytes()
25}
26
27func TestTransform_ProportionalResize_WidthOnly(t *testing.T) {
28 src := makeJPEG(400, 200)
29 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Width: 200, Format: "webp"})
30 if err != nil {
31 t.Fatalf("Transform error: %v", err)
32 }
33 if ct != "image/webp" {
34 t.Errorf("Content-Type = %q, want image/webp", ct)
35 }
36 if len(out) == 0 {
37 t.Error("output is empty")
38 }
39}
40
41func TestTransform_ProportionalResize_HeightOnly(t *testing.T) {
42 src := makeJPEG(400, 200)
43 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Height: 100, Format: "webp"})
44 if err != nil {
45 t.Fatalf("Transform error: %v", err)
46 }
47 if ct != "image/webp" {
48 t.Errorf("Content-Type = %q, want image/webp", ct)
49 }
50 if len(out) == 0 {
51 t.Error("output is empty")
52 }
53}
54
55func TestTransform_CoverFit_BothDimensions(t *testing.T) {
56 src := makeJPEG(400, 200)
57 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Width: 100, Height: 100, Format: "webp"})
58 if err != nil {
59 t.Fatalf("Transform error: %v", err)
60 }
61 if ct != "image/webp" {
62 t.Errorf("Content-Type = %q, want image/webp", ct)
63 }
64 if len(out) == 0 {
65 t.Error("output is empty")
66 }
67}
68
69func TestTransform_JPEG_Output(t *testing.T) {
70 src := makeJPEG(200, 200)
71 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Width: 100, Height: 100, Quality: 80, Format: "jpg"})
72 if err != nil {
73 t.Fatalf("Transform error: %v", err)
74 }
75 if ct != "image/jpeg" {
76 t.Errorf("Content-Type = %q, want image/jpeg", ct)
77 }
78 if len(out) == 0 {
79 t.Error("output is empty")
80 }
81}
82
83func TestTransform_PNG_Output(t *testing.T) {
84 src := makeJPEG(200, 200)
85 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Width: 100, Height: 100, Format: "png"})
86 if err != nil {
87 t.Fatalf("Transform error: %v", err)
88 }
89 if ct != "image/png" {
90 t.Errorf("Content-Type = %q, want image/png", ct)
91 }
92 if len(out) == 0 {
93 t.Error("output is empty")
94 }
95}
96
97func TestTransform_NoResize_DefaultDimensions(t *testing.T) {
98 src := makeJPEG(300, 150)
99 out, ct, err := transform.Transform(src, "image/jpeg", transform.Params{Format: "webp", Quality: 85})
100 if err != nil {
101 t.Fatalf("Transform error: %v", err)
102 }
103 if ct != "image/webp" {
104 t.Errorf("Content-Type = %q, want image/webp", ct)
105 }
106 if len(out) == 0 {
107 t.Error("output is empty")
108 }
109}