mirror of
https://github.com/larksuite/cli.git
synced 2026-07-03 14:02:43 +08:00
- Add internal/client/api_errors.go with WrapDoAPIError and WrapJSONResponseParseError to classify JSON decode issues vs generic network errors - Route cmd/api DoAPI errors and HandleResponse JSON parse errors through the new helpers - Add regression tests in cmd/api and internal/client Related: https://github.com/larksuite/cli/issues/215
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package client
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/larksuite/cli/internal/output"
|
|
)
|
|
|
|
func TestWrapDoAPIError_BareEOFIsNetworkError(t *testing.T) {
|
|
err := WrapDoAPIError(io.EOF)
|
|
if err == nil {
|
|
t.Fatal("expected error")
|
|
}
|
|
|
|
var exitErr *output.ExitError
|
|
if !errors.As(err, &exitErr) {
|
|
t.Fatalf("expected ExitError, got %T", err)
|
|
}
|
|
if exitErr.Code != output.ExitNetwork {
|
|
t.Fatalf("expected ExitNetwork, got %d", exitErr.Code)
|
|
}
|
|
if strings.Contains(exitErr.Error(), "invalid JSON response") {
|
|
t.Fatalf("unexpected JSON diagnostic for bare EOF: %q", exitErr.Error())
|
|
}
|
|
}
|
|
|
|
func TestWrapDoAPIError_SyntaxErrorIsAPIDiagnostic(t *testing.T) {
|
|
err := WrapDoAPIError(&json.SyntaxError{Offset: 1})
|
|
if err == nil {
|
|
t.Fatal("expected error")
|
|
}
|
|
|
|
var exitErr *output.ExitError
|
|
if !errors.As(err, &exitErr) {
|
|
t.Fatalf("expected ExitError, got %T", err)
|
|
}
|
|
if exitErr.Code != output.ExitAPI {
|
|
t.Fatalf("expected ExitAPI, got %d", exitErr.Code)
|
|
}
|
|
if exitErr.Detail == nil || !strings.Contains(exitErr.Detail.Message, "invalid JSON response") {
|
|
t.Fatalf("expected JSON diagnostic message, got %#v", exitErr.Detail)
|
|
}
|
|
}
|
|
|
|
func TestWrapJSONResponseParseError_UnexpectedEOFIsAPIDiagnostic(t *testing.T) {
|
|
err := WrapJSONResponseParseError(io.ErrUnexpectedEOF, []byte("{"))
|
|
if err == nil {
|
|
t.Fatal("expected error")
|
|
}
|
|
|
|
var exitErr *output.ExitError
|
|
if !errors.As(err, &exitErr) {
|
|
t.Fatalf("expected ExitError, got %T", err)
|
|
}
|
|
if exitErr.Code != output.ExitAPI {
|
|
t.Fatalf("expected ExitAPI, got %d", exitErr.Code)
|
|
}
|
|
if exitErr.Detail == nil || !strings.Contains(exitErr.Detail.Message, "invalid JSON response") {
|
|
t.Fatalf("expected invalid JSON diagnostic, got %#v", exitErr.Detail)
|
|
}
|
|
}
|