* Implement optional io.Reader in AudioRequest (#303) (#265) * Fix err shadowing * Add test to cover AudioRequest io.Reader usage * Add additional test cases to cover AudioRequest io.Reader usage * Add test to cover opening the file specified in an AudioRequest
This commit is contained in:
@@ -2,6 +2,7 @@ package openai //nolint:testpackage // testing private field
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -11,12 +12,10 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/sashabaranov/go-openai/internal/test"
|
||||
"github.com/sashabaranov/go-openai/internal/test/checks"
|
||||
|
||||
"context"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestAudio Tests the transcription and translation endpoints of the API using the mocked server.
|
||||
@@ -65,6 +64,16 @@ func TestAudio(t *testing.T) {
|
||||
_, err = tc.createFn(ctx, req)
|
||||
checks.NoError(t, err, "audio API error")
|
||||
})
|
||||
|
||||
t.Run(tc.name+" (with reader)", func(t *testing.T) {
|
||||
req := AudioRequest{
|
||||
FilePath: "fake.webm",
|
||||
Reader: bytes.NewBuffer([]byte(`some webm binary data`)),
|
||||
Model: "whisper-3",
|
||||
}
|
||||
_, err = tc.createFn(ctx, req)
|
||||
checks.NoError(t, err, "audio API error")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,3 +222,54 @@ func TestAudioWithFailingFormBuilder(t *testing.T) {
|
||||
checks.ErrorIs(t, err, mockFailedErr, "audioMultipartForm should return error if form builder fails")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateFileField(t *testing.T) {
|
||||
t.Run("createFileField failing file", func(t *testing.T) {
|
||||
dir, cleanup := test.CreateTestDirectory(t)
|
||||
defer cleanup()
|
||||
path := filepath.Join(dir, "fake.mp3")
|
||||
test.CreateTestFile(t, path)
|
||||
|
||||
req := AudioRequest{
|
||||
FilePath: path,
|
||||
}
|
||||
|
||||
mockFailedErr := fmt.Errorf("mock form builder fail")
|
||||
mockBuilder := &mockFormBuilder{
|
||||
mockCreateFormFile: func(string, *os.File) error {
|
||||
return mockFailedErr
|
||||
},
|
||||
}
|
||||
|
||||
err := createFileField(req, mockBuilder)
|
||||
checks.ErrorIs(t, err, mockFailedErr, "createFileField using a file should return error if form builder fails")
|
||||
})
|
||||
|
||||
t.Run("createFileField failing reader", func(t *testing.T) {
|
||||
req := AudioRequest{
|
||||
FilePath: "test.wav",
|
||||
Reader: bytes.NewBuffer([]byte(`wav test contents`)),
|
||||
}
|
||||
|
||||
mockFailedErr := fmt.Errorf("mock form builder fail")
|
||||
mockBuilder := &mockFormBuilder{
|
||||
mockCreateFormFileReader: func(string, io.Reader, string) error {
|
||||
return mockFailedErr
|
||||
},
|
||||
}
|
||||
|
||||
err := createFileField(req, mockBuilder)
|
||||
checks.ErrorIs(t, err, mockFailedErr, "createFileField using a reader should return error if form builder fails")
|
||||
})
|
||||
|
||||
t.Run("createFileField failing open", func(t *testing.T) {
|
||||
req := AudioRequest{
|
||||
FilePath: "non_existing_file.wav",
|
||||
}
|
||||
|
||||
mockBuilder := &mockFormBuilder{}
|
||||
|
||||
err := createFileField(req, mockBuilder)
|
||||
checks.HasError(t, err, "createFileField using file should return error when open file fails")
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user