fix(audio): fix audioTextResponse decode (#638)
* fix(audio): fix audioTextResponse decode * test(audio): add audioTextResponse decode test * test(audio): simplify code
This commit is contained in:
10
client.go
10
client.go
@@ -193,10 +193,14 @@ func decodeResponse(body io.Reader, v any) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if result, ok := v.(*string); ok {
|
switch o := v.(type) {
|
||||||
return decodeString(body, result)
|
case *string:
|
||||||
}
|
return decodeString(body, o)
|
||||||
|
case *audioTextResponse:
|
||||||
|
return decodeString(body, &o.Text)
|
||||||
|
default:
|
||||||
return json.NewDecoder(body).Decode(v)
|
return json.NewDecoder(body).Decode(v)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeString(body io.Reader, output *string) error {
|
func decodeString(body io.Reader, output *string) error {
|
||||||
|
|||||||
@@ -7,9 +7,11 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/sashabaranov/go-openai/internal/test"
|
"github.com/sashabaranov/go-openai/internal/test"
|
||||||
|
"github.com/sashabaranov/go-openai/internal/test/checks"
|
||||||
)
|
)
|
||||||
|
|
||||||
var errTestRequestBuilderFailed = errors.New("test request builder failed")
|
var errTestRequestBuilderFailed = errors.New("test request builder failed")
|
||||||
@@ -43,6 +45,7 @@ func TestDecodeResponse(t *testing.T) {
|
|||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
value interface{}
|
value interface{}
|
||||||
|
expected interface{}
|
||||||
body io.Reader
|
body io.Reader
|
||||||
hasError bool
|
hasError bool
|
||||||
}{
|
}{
|
||||||
@@ -50,16 +53,21 @@ func TestDecodeResponse(t *testing.T) {
|
|||||||
name: "nil input",
|
name: "nil input",
|
||||||
value: nil,
|
value: nil,
|
||||||
body: bytes.NewReader([]byte("")),
|
body: bytes.NewReader([]byte("")),
|
||||||
|
expected: nil,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "string input",
|
name: "string input",
|
||||||
value: &stringInput,
|
value: &stringInput,
|
||||||
body: bytes.NewReader([]byte("test")),
|
body: bytes.NewReader([]byte("test")),
|
||||||
|
expected: "test",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "map input",
|
name: "map input",
|
||||||
value: &map[string]interface{}{},
|
value: &map[string]interface{}{},
|
||||||
body: bytes.NewReader([]byte(`{"test": "test"}`)),
|
body: bytes.NewReader([]byte(`{"test": "test"}`)),
|
||||||
|
expected: map[string]interface{}{
|
||||||
|
"test": "test",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "reader return error",
|
name: "reader return error",
|
||||||
@@ -67,14 +75,38 @@ func TestDecodeResponse(t *testing.T) {
|
|||||||
body: &errorReader{err: errors.New("dummy")},
|
body: &errorReader{err: errors.New("dummy")},
|
||||||
hasError: true,
|
hasError: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "audio text input",
|
||||||
|
value: &audioTextResponse{},
|
||||||
|
body: bytes.NewReader([]byte("test")),
|
||||||
|
expected: audioTextResponse{
|
||||||
|
Text: "test",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEqual := func(t *testing.T, expected, actual interface{}) {
|
||||||
|
t.Helper()
|
||||||
|
if expected == actual {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
v := reflect.ValueOf(actual).Elem().Interface()
|
||||||
|
if !reflect.DeepEqual(v, expected) {
|
||||||
|
t.Fatalf("Unexpected value: %v, expected: %v", v, expected)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
err := decodeResponse(tc.body, tc.value)
|
err := decodeResponse(tc.body, tc.value)
|
||||||
if (err != nil) != tc.hasError {
|
if tc.hasError {
|
||||||
t.Errorf("Unexpected error: %v", err)
|
checks.HasError(t, err, "Unexpected nil error")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
assertEqual(t, tc.expected, tc.value)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user