4
4
"context"
5
5
"errors"
6
6
7
+ "github.com/navidrome/navidrome/plugins/api"
7
8
. "github.com/onsi/ginkgo/v2"
8
9
. "github.com/onsi/gomega"
9
10
)
@@ -34,7 +35,16 @@ var _ = Describe("baseCapability", func() {
34
35
35
36
var _ = Describe ("checkErr" , func () {
36
37
Context ("when resp is nil" , func () {
37
- It ("should return the original error unchanged" , func () {
38
+ It ("should return nil error when both resp and err are nil" , func () {
39
+ var resp * testErrorResponse
40
+
41
+ result , err := checkErr (resp , nil )
42
+
43
+ Expect (result ).To (BeNil ())
44
+ Expect (err ).To (BeNil ())
45
+ })
46
+
47
+ It ("should return original error unchanged for non-API errors" , func () {
38
48
var resp * testErrorResponse
39
49
originalErr := errors .New ("original error" )
40
50
@@ -44,13 +54,24 @@ var _ = Describe("checkErr", func() {
44
54
Expect (err ).To (Equal (originalErr ))
45
55
})
46
56
47
- It ("should return nil error when both resp and err are nil " , func () {
57
+ It ("should return mapped API error for ErrNotImplemented " , func () {
48
58
var resp * testErrorResponse
59
+ err := errors .New ("plugin:not_implemented" )
49
60
50
- result , err := checkErr (resp , nil )
61
+ result , mappedErr := checkErr (resp , err )
51
62
52
63
Expect (result ).To (BeNil ())
53
- Expect (err ).To (BeNil ())
64
+ Expect (mappedErr ).To (Equal (api .ErrNotImplemented ))
65
+ })
66
+
67
+ It ("should return mapped API error for ErrNotFound" , func () {
68
+ var resp * testErrorResponse
69
+ err := errors .New ("plugin:not_found" )
70
+
71
+ result , mappedErr := checkErr (resp , err )
72
+
73
+ Expect (result ).To (BeNil ())
74
+ Expect (mappedErr ).To (Equal (api .ErrNotFound ))
54
75
})
55
76
})
56
77
@@ -94,7 +115,49 @@ var _ = Describe("checkErr", func() {
94
115
result , err := checkErr (resp , originalErr )
95
116
96
117
Expect (result ).To (Equal (resp ))
97
- Expect (err ).To (MatchError ("plugin error: original error" ))
118
+ Expect (err ).To (HaveOccurred ())
119
+ // Check that both error messages are present in the joined error
120
+ errStr := err .Error ()
121
+ Expect (errStr ).To (ContainSubstring ("plugin error" ))
122
+ Expect (errStr ).To (ContainSubstring ("original error" ))
123
+ })
124
+
125
+ It ("should return mapped API error for ErrNotImplemented when no original error" , func () {
126
+ resp := & testErrorResponse {errorMsg : "plugin:not_implemented" }
127
+
128
+ result , err := checkErr (resp , nil )
129
+
130
+ Expect (result ).To (Equal (resp ))
131
+ Expect (err ).To (MatchError (api .ErrNotImplemented ))
132
+ })
133
+
134
+ It ("should return mapped API error for ErrNotFound when no original error" , func () {
135
+ resp := & testErrorResponse {errorMsg : "plugin:not_found" }
136
+
137
+ result , err := checkErr (resp , nil )
138
+
139
+ Expect (result ).To (Equal (resp ))
140
+ Expect (err ).To (MatchError (api .ErrNotFound ))
141
+ })
142
+
143
+ It ("should return mapped API error for ErrNotImplemented even with original error" , func () {
144
+ resp := & testErrorResponse {errorMsg : "plugin:not_implemented" }
145
+ originalErr := errors .New ("original error" )
146
+
147
+ result , err := checkErr (resp , originalErr )
148
+
149
+ Expect (result ).To (Equal (resp ))
150
+ Expect (err ).To (MatchError (api .ErrNotImplemented ))
151
+ })
152
+
153
+ It ("should return mapped API error for ErrNotFound even with original error" , func () {
154
+ resp := & testErrorResponse {errorMsg : "plugin:not_found" }
155
+ originalErr := errors .New ("original error" )
156
+
157
+ result , err := checkErr (resp , originalErr )
158
+
159
+ Expect (result ).To (Equal (resp ))
160
+ Expect (err ).To (MatchError (api .ErrNotFound ))
98
161
})
99
162
})
100
163
@@ -106,7 +169,7 @@ var _ = Describe("checkErr", func() {
106
169
result , err := checkErr (resp , originalErr )
107
170
108
171
Expect (result ).To (Equal (resp ))
109
- Expect (err ).To (Equal (originalErr ))
172
+ Expect (err ).To (MatchError (originalErr ))
110
173
})
111
174
112
175
It ("should return nil error when both are empty/nil" , func () {
@@ -117,6 +180,16 @@ var _ = Describe("checkErr", func() {
117
180
Expect (result ).To (Equal (resp ))
118
181
Expect (err ).To (BeNil ())
119
182
})
183
+
184
+ It ("should map original API error when response error is empty" , func () {
185
+ resp := & testErrorResponse {errorMsg : "" }
186
+ originalErr := errors .New ("plugin:not_implemented" )
187
+
188
+ result , err := checkErr (resp , originalErr )
189
+
190
+ Expect (result ).To (Equal (resp ))
191
+ Expect (err ).To (MatchError (api .ErrNotImplemented ))
192
+ })
120
193
})
121
194
122
195
Context ("when resp does not implement errorResponse" , func () {
@@ -138,6 +211,16 @@ var _ = Describe("checkErr", func() {
138
211
Expect (result ).To (Equal (resp ))
139
212
Expect (err ).To (BeNil ())
140
213
})
214
+
215
+ It ("should map original API error when response doesn't implement errorResponse" , func () {
216
+ resp := & testNonErrorResponse {data : "some data" }
217
+ originalErr := errors .New ("plugin:not_found" )
218
+
219
+ result , err := checkErr (resp , originalErr )
220
+
221
+ Expect (result ).To (Equal (resp ))
222
+ Expect (err ).To (MatchError (api .ErrNotFound ))
223
+ })
141
224
})
142
225
143
226
Context ("when resp is a value type (not pointer)" , func () {
@@ -148,7 +231,11 @@ var _ = Describe("checkErr", func() {
148
231
result , err := checkErr (resp , originalErr )
149
232
150
233
Expect (result ).To (Equal (resp ))
151
- Expect (err ).To (MatchError ("value error: original error" ))
234
+ Expect (err ).To (HaveOccurred ())
235
+ // Check that both error messages are present in the joined error
236
+ errStr := err .Error ()
237
+ Expect (errStr ).To (ContainSubstring ("value error" ))
238
+ Expect (errStr ).To (ContainSubstring ("original error" ))
152
239
})
153
240
154
241
It ("should handle value types with empty error" , func () {
@@ -158,7 +245,17 @@ var _ = Describe("checkErr", func() {
158
245
result , err := checkErr (resp , originalErr )
159
246
160
247
Expect (result ).To (Equal (resp ))
161
- Expect (err ).To (Equal (originalErr ))
248
+ Expect (err ).To (MatchError (originalErr ))
249
+ })
250
+
251
+ It ("should handle value types with API error" , func () {
252
+ resp := testValueErrorResponse {errorMsg : "plugin:not_implemented" }
253
+ originalErr := errors .New ("original error" )
254
+
255
+ result , err := checkErr (resp , originalErr )
256
+
257
+ Expect (result ).To (Equal (resp ))
258
+ Expect (err ).To (MatchError (api .ErrNotImplemented ))
162
259
})
163
260
})
164
261
})
0 commit comments