aboutsummaryrefslogtreecommitdiff
path: root/internal/api/api_test.go
diff options
context:
space:
mode:
authorJonathan Amsterdam <jba@google.com>2026-03-26 17:15:55 -0400
committerJonathan Amsterdam <jba@google.com>2026-03-27 11:12:10 -0700
commitc59880de3cd54955ef11b4187daf7f930badb5e2 (patch)
treece3b9f04eb73c59418adf766b1172d2b0c54ce11 /internal/api/api_test.go
parentfc1885958fe59bc2bd183c6c666d0c3d30635c00 (diff)
downloadgo-x-pkgsite-c59880de3cd54955ef11b4187daf7f930badb5e2.tar.xz
internal/api: add unmarshalResponse
Add a useful helper. Use it once. We must use it at least once to pass our check for unused functions. Change-Id: Ied063f74dc7e3bc7dc7c12d4a17b0e55680951ad Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/759840 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> kokoro-CI: kokoro <noreply+kokoro@google.com> Reviewed-by: Ethan Lee <ethanalee@google.com>
Diffstat (limited to 'internal/api/api_test.go')
-rw-r--r--internal/api/api_test.go45
1 files changed, 28 insertions, 17 deletions
diff --git a/internal/api/api_test.go b/internal/api/api_test.go
index 50c11327..caa620b4 100644
--- a/internal/api/api_test.go
+++ b/internal/api/api_test.go
@@ -5,8 +5,10 @@
package api
import (
+ "bytes"
"context"
"encoding/json"
+ "errors"
"net/http"
"net/http/httptest"
"strconv"
@@ -206,23 +208,12 @@ func TestServePackage(t *testing.T) {
}
if test.want != nil {
- switch want := test.want.(type) {
- case *Package:
- var got Package
- if err := json.Unmarshal(w.Body.Bytes(), &got); err != nil {
- t.Fatalf("json.Unmarshal Package: %v", err)
- }
- if diff := cmp.Diff(want, &got); diff != "" {
- t.Errorf("mismatch (-want +got):\n%s", diff)
- }
- case *Error:
- var got Error
- if err := json.Unmarshal(w.Body.Bytes(), &got); err != nil {
- t.Fatalf("json.Unmarshal Error: %v. Body: %s", err, w.Body.String())
- }
- if diff := cmp.Diff(want, &got); diff != "" {
- t.Errorf("mismatch (-want +got):\n%s", diff)
- }
+ got, err := unmarshalResponse[Package](w.Body.Bytes())
+ if err != nil {
+ t.Fatal(err)
+ }
+ if diff := cmp.Diff(test.want, got); diff != "" {
+ t.Errorf("mismatch (-want +got):\n%s", diff)
}
}
})
@@ -710,3 +701,23 @@ func TestServePackageSymbols(t *testing.T) {
})
}
}
+
+// unmarshalResponse unmarshals an API response into either
+// a *T or an *Error.
+func unmarshalResponse[T any](data []byte) (any, error) {
+ d := json.NewDecoder(bytes.NewReader(data))
+ d.DisallowUnknownFields()
+ var t T
+ err1 := d.Decode(&t)
+ if err1 == nil {
+ return &t, nil
+ }
+ d = json.NewDecoder(bytes.NewReader(data))
+ d.DisallowUnknownFields()
+ var e Error
+ err2 := d.Decode(&e)
+ if err2 == nil {
+ return &e, nil
+ }
+ return nil, errors.Join(err1, err2)
+}