Skip to content

Commit 8d681e7

Browse files
authored
Increase image.go test coverage to 100% (#1039)
1 parent 88eb1df commit 8d681e7

File tree

1 file changed

+209
-94
lines changed

1 file changed

+209
-94
lines changed

image_test.go

Lines changed: 209 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -40,122 +40,237 @@ func (fb *mockFormBuilder) FormDataContentType() string {
4040
}
4141

4242
func TestImageFormBuilderFailures(t *testing.T) {
43-
config := DefaultConfig("")
44-
config.BaseURL = ""
45-
client := NewClientWithConfig(config)
46-
47-
mockBuilder := &mockFormBuilder{}
48-
client.createFormBuilder = func(io.Writer) utils.FormBuilder {
49-
return mockBuilder
50-
}
5143
ctx := context.Background()
52-
53-
req := ImageEditRequest{
54-
Mask: &os.File{},
55-
}
56-
5744
mockFailedErr := fmt.Errorf("mock form builder fail")
58-
mockBuilder.mockCreateFormFileReader = func(string, io.Reader, string) error {
59-
return mockFailedErr
60-
}
61-
_, err := client.CreateEditImage(ctx, req)
62-
checks.ErrorIs(t, err, mockFailedErr, "CreateImage should return error if form builder fails")
6345

64-
mockBuilder.mockCreateFormFileReader = func(name string, _ io.Reader, _ string) error {
65-
if name == "mask" {
66-
return mockFailedErr
67-
}
68-
return nil
46+
newClient := func(fb *mockFormBuilder) *Client {
47+
cfg := DefaultConfig("")
48+
cfg.BaseURL = ""
49+
c := NewClientWithConfig(cfg)
50+
c.createFormBuilder = func(io.Writer) utils.FormBuilder { return fb }
51+
return c
6952
}
70-
_, err = client.CreateEditImage(ctx, req)
71-
checks.ErrorIs(t, err, mockFailedErr, "CreateImage should return error if form builder fails")
7253

73-
mockBuilder.mockCreateFormFile = func(string, *os.File) error {
74-
return nil
54+
tests := []struct {
55+
name string
56+
setup func(*mockFormBuilder)
57+
req ImageEditRequest
58+
}{
59+
{
60+
name: "image",
61+
setup: func(fb *mockFormBuilder) {
62+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return mockFailedErr }
63+
fb.mockWriteField = func(string, string) error { return nil }
64+
fb.mockClose = func() error { return nil }
65+
},
66+
req: ImageEditRequest{Image: bytes.NewBuffer(nil), Mask: bytes.NewBuffer(nil)},
67+
},
68+
{
69+
name: "mask",
70+
setup: func(fb *mockFormBuilder) {
71+
fb.mockCreateFormFileReader = func(name string, _ io.Reader, _ string) error {
72+
if name == "mask" {
73+
return mockFailedErr
74+
}
75+
return nil
76+
}
77+
fb.mockWriteField = func(string, string) error { return nil }
78+
fb.mockClose = func() error { return nil }
79+
},
80+
req: ImageEditRequest{Image: bytes.NewBuffer(nil), Mask: bytes.NewBuffer(nil)},
81+
},
82+
{
83+
name: "prompt",
84+
setup: func(fb *mockFormBuilder) {
85+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
86+
fb.mockWriteField = func(field, _ string) error {
87+
if field == "prompt" {
88+
return mockFailedErr
89+
}
90+
return nil
91+
}
92+
fb.mockClose = func() error { return nil }
93+
},
94+
req: ImageEditRequest{Image: bytes.NewBuffer(nil), Mask: bytes.NewBuffer(nil)},
95+
},
96+
{
97+
name: "n",
98+
setup: func(fb *mockFormBuilder) {
99+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
100+
fb.mockWriteField = func(field, _ string) error {
101+
if field == "n" {
102+
return mockFailedErr
103+
}
104+
return nil
105+
}
106+
fb.mockClose = func() error { return nil }
107+
},
108+
req: ImageEditRequest{Image: bytes.NewBuffer(nil), Mask: bytes.NewBuffer(nil)},
109+
},
110+
{
111+
name: "size",
112+
setup: func(fb *mockFormBuilder) {
113+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
114+
fb.mockWriteField = func(field, _ string) error {
115+
if field == "size" {
116+
return mockFailedErr
117+
}
118+
return nil
119+
}
120+
fb.mockClose = func() error { return nil }
121+
},
122+
req: ImageEditRequest{Image: bytes.NewBuffer(nil), Mask: bytes.NewBuffer(nil)},
123+
},
124+
{
125+
name: "response_format",
126+
setup: func(fb *mockFormBuilder) {
127+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
128+
fb.mockWriteField = func(field, _ string) error {
129+
if field == "response_format" {
130+
return mockFailedErr
131+
}
132+
return nil
133+
}
134+
fb.mockClose = func() error { return nil }
135+
},
136+
req: ImageEditRequest{Image: bytes.NewBuffer(nil), Mask: bytes.NewBuffer(nil)},
137+
},
138+
{
139+
name: "close",
140+
setup: func(fb *mockFormBuilder) {
141+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
142+
fb.mockWriteField = func(string, string) error { return nil }
143+
fb.mockClose = func() error { return mockFailedErr }
144+
},
145+
req: ImageEditRequest{Image: bytes.NewBuffer(nil), Mask: bytes.NewBuffer(nil)},
146+
},
75147
}
76148

77-
var failForField string
78-
mockBuilder.mockWriteField = func(fieldname, _ string) error {
79-
if fieldname == failForField {
80-
return mockFailedErr
81-
}
82-
return nil
149+
for _, tc := range tests {
150+
t.Run(tc.name, func(t *testing.T) {
151+
fb := &mockFormBuilder{}
152+
tc.setup(fb)
153+
client := newClient(fb)
154+
_, err := client.CreateEditImage(ctx, tc.req)
155+
checks.ErrorIs(t, err, mockFailedErr, "CreateEditImage should return error if form builder fails")
156+
})
83157
}
84158

85-
failForField = "prompt"
86-
_, err = client.CreateEditImage(ctx, req)
87-
checks.ErrorIs(t, err, mockFailedErr, "CreateImage should return error if form builder fails")
88-
89-
failForField = "n"
90-
_, err = client.CreateEditImage(ctx, req)
91-
checks.ErrorIs(t, err, mockFailedErr, "CreateImage should return error if form builder fails")
92-
93-
failForField = "size"
94-
_, err = client.CreateEditImage(ctx, req)
95-
checks.ErrorIs(t, err, mockFailedErr, "CreateImage should return error if form builder fails")
96-
97-
failForField = "response_format"
98-
_, err = client.CreateEditImage(ctx, req)
99-
checks.ErrorIs(t, err, mockFailedErr, "CreateImage should return error if form builder fails")
159+
t.Run("new request", func(t *testing.T) {
160+
fb := &mockFormBuilder{
161+
mockCreateFormFileReader: func(string, io.Reader, string) error { return nil },
162+
mockWriteField: func(string, string) error { return nil },
163+
mockClose: func() error { return nil },
164+
}
165+
client := newClient(fb)
166+
client.requestBuilder = &failingRequestBuilder{}
100167

101-
failForField = ""
102-
mockBuilder.mockClose = func() error {
103-
return mockFailedErr
104-
}
105-
_, err = client.CreateEditImage(ctx, req)
106-
checks.ErrorIs(t, err, mockFailedErr, "CreateImage should return error if form builder fails")
168+
_, err := client.CreateEditImage(ctx, ImageEditRequest{Image: bytes.NewBuffer(nil), Mask: bytes.NewBuffer(nil)})
169+
checks.ErrorIs(t, err, errTestRequestBuilderFailed, "CreateEditImage should return error if request builder fails")
170+
})
107171
}
108172

109173
func TestVariImageFormBuilderFailures(t *testing.T) {
110-
config := DefaultConfig("")
111-
config.BaseURL = ""
112-
client := NewClientWithConfig(config)
113-
114-
mockBuilder := &mockFormBuilder{}
115-
client.createFormBuilder = func(io.Writer) utils.FormBuilder {
116-
return mockBuilder
117-
}
118174
ctx := context.Background()
119-
120-
req := ImageVariRequest{}
121-
122175
mockFailedErr := fmt.Errorf("mock form builder fail")
123-
mockBuilder.mockCreateFormFileReader = func(string, io.Reader, string) error {
124-
return mockFailedErr
125-
}
126-
_, err := client.CreateVariImage(ctx, req)
127-
checks.ErrorIs(t, err, mockFailedErr, "CreateVariImage should return error if form builder fails")
128176

129-
mockBuilder.mockCreateFormFileReader = func(string, io.Reader, string) error {
130-
return nil
177+
newClient := func(fb *mockFormBuilder) *Client {
178+
cfg := DefaultConfig("")
179+
cfg.BaseURL = ""
180+
c := NewClientWithConfig(cfg)
181+
c.createFormBuilder = func(io.Writer) utils.FormBuilder { return fb }
182+
return c
131183
}
132184

133-
var failForField string
134-
mockBuilder.mockWriteField = func(fieldname, _ string) error {
135-
if fieldname == failForField {
136-
return mockFailedErr
137-
}
138-
return nil
185+
tests := []struct {
186+
name string
187+
setup func(*mockFormBuilder)
188+
req ImageVariRequest
189+
}{
190+
{
191+
name: "image",
192+
setup: func(fb *mockFormBuilder) {
193+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return mockFailedErr }
194+
fb.mockWriteField = func(string, string) error { return nil }
195+
fb.mockClose = func() error { return nil }
196+
},
197+
req: ImageVariRequest{Image: bytes.NewBuffer(nil)},
198+
},
199+
{
200+
name: "n",
201+
setup: func(fb *mockFormBuilder) {
202+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
203+
fb.mockWriteField = func(field string, _ string) error {
204+
if field == "n" {
205+
return mockFailedErr
206+
}
207+
return nil
208+
}
209+
fb.mockClose = func() error { return nil }
210+
},
211+
req: ImageVariRequest{Image: bytes.NewBuffer(nil)},
212+
},
213+
{
214+
name: "size",
215+
setup: func(fb *mockFormBuilder) {
216+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
217+
fb.mockWriteField = func(field string, _ string) error {
218+
if field == "size" {
219+
return mockFailedErr
220+
}
221+
return nil
222+
}
223+
fb.mockClose = func() error { return nil }
224+
},
225+
req: ImageVariRequest{Image: bytes.NewBuffer(nil)},
226+
},
227+
{
228+
name: "response_format",
229+
setup: func(fb *mockFormBuilder) {
230+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
231+
fb.mockWriteField = func(field string, _ string) error {
232+
if field == "response_format" {
233+
return mockFailedErr
234+
}
235+
return nil
236+
}
237+
fb.mockClose = func() error { return nil }
238+
},
239+
req: ImageVariRequest{Image: bytes.NewBuffer(nil)},
240+
},
241+
{
242+
name: "close",
243+
setup: func(fb *mockFormBuilder) {
244+
fb.mockCreateFormFileReader = func(string, io.Reader, string) error { return nil }
245+
fb.mockWriteField = func(string, string) error { return nil }
246+
fb.mockClose = func() error { return mockFailedErr }
247+
},
248+
req: ImageVariRequest{Image: bytes.NewBuffer(nil)},
249+
},
139250
}
140251

141-
failForField = "n"
142-
_, err = client.CreateVariImage(ctx, req)
143-
checks.ErrorIs(t, err, mockFailedErr, "CreateVariImage should return error if form builder fails")
144-
145-
failForField = "size"
146-
_, err = client.CreateVariImage(ctx, req)
147-
checks.ErrorIs(t, err, mockFailedErr, "CreateVariImage should return error if form builder fails")
252+
for _, tc := range tests {
253+
t.Run(tc.name, func(t *testing.T) {
254+
fb := &mockFormBuilder{}
255+
tc.setup(fb)
256+
client := newClient(fb)
257+
_, err := client.CreateVariImage(ctx, tc.req)
258+
checks.ErrorIs(t, err, mockFailedErr, "CreateVariImage should return error if form builder fails")
259+
})
260+
}
148261

149-
failForField = "response_format"
150-
_, err = client.CreateVariImage(ctx, req)
151-
checks.ErrorIs(t, err, mockFailedErr, "CreateVariImage should return error if form builder fails")
262+
t.Run("new request", func(t *testing.T) {
263+
fb := &mockFormBuilder{
264+
mockCreateFormFileReader: func(string, io.Reader, string) error { return nil },
265+
mockWriteField: func(string, string) error { return nil },
266+
mockClose: func() error { return nil },
267+
}
268+
client := newClient(fb)
269+
client.requestBuilder = &failingRequestBuilder{}
152270

153-
failForField = ""
154-
mockBuilder.mockClose = func() error {
155-
return mockFailedErr
156-
}
157-
_, err = client.CreateVariImage(ctx, req)
158-
checks.ErrorIs(t, err, mockFailedErr, "CreateImage should return error if form builder fails")
271+
_, err := client.CreateVariImage(ctx, ImageVariRequest{Image: bytes.NewBuffer(nil)})
272+
checks.ErrorIs(t, err, errTestRequestBuilderFailed, "CreateVariImage should return error if request builder fails")
273+
})
159274
}
160275

161276
type testNamedReader struct{ io.Reader }

0 commit comments

Comments
 (0)