- Introduced new test cases for Structured and Semantic providers to validate schema retrieval functionality. - Updated existing tests across various providers to ensure they check for non-nil schemas, enhancing error handling and test coverage. - Ensured consistency in error messages for schema validation across different provider tests.
223 lines
6.6 KiB
Go
223 lines
6.6 KiB
Go
package converters
|
|
|
|
import (
|
|
"testing"
|
|
|
|
kbtypes "github.com/yaoapp/yao/kb/types"
|
|
)
|
|
|
|
func TestWhisper_Make(t *testing.T) {
|
|
whisper := &Whisper{}
|
|
|
|
// Note: Whisper converter requires connectors to be loaded
|
|
// All tests will fail in test environment due to missing connectors
|
|
|
|
t.Run("nil option should return error due to missing connector", func(t *testing.T) {
|
|
_, err := whisper.Make(nil)
|
|
if err == nil {
|
|
t.Error("Expected error due to missing connector")
|
|
}
|
|
// Error is expected because connector is not loaded in test environment
|
|
})
|
|
|
|
t.Run("empty option should return error due to missing connector", func(t *testing.T) {
|
|
option := &kbtypes.ProviderOption{}
|
|
_, err := whisper.Make(option)
|
|
if err == nil {
|
|
t.Error("Expected error due to missing connector")
|
|
}
|
|
// Error is expected because connector is not loaded in test environment
|
|
})
|
|
|
|
t.Run("option with all audio properties should return error due to missing connector", func(t *testing.T) {
|
|
option := &kbtypes.ProviderOption{
|
|
Properties: map[string]interface{}{
|
|
"connector": "openai.whisper",
|
|
"model": "whisper-1",
|
|
"language": "en",
|
|
"chunk_duration": 45.0,
|
|
"mapping_duration": 10.0,
|
|
"silence_threshold": -35.0,
|
|
"silence_min_length": 2.0,
|
|
"enable_silence_detection": false,
|
|
"max_concurrency": 8,
|
|
"temp_dir": "/tmp/whisper",
|
|
"cleanup_temp": false,
|
|
"options": map[string]interface{}{
|
|
"temperature": 0.0,
|
|
},
|
|
},
|
|
}
|
|
_, err := whisper.Make(option)
|
|
if err == nil {
|
|
t.Error("Expected error due to missing connector")
|
|
}
|
|
// Error is expected because openai.whisper connector is not loaded
|
|
})
|
|
|
|
t.Run("float64 values should be handled correctly but still return error", func(t *testing.T) {
|
|
option := &kbtypes.ProviderOption{
|
|
Properties: map[string]interface{}{
|
|
"connector": "openai.whisper",
|
|
"chunk_duration": 30.5, // float64
|
|
"mapping_duration": 5.2, // float64
|
|
"silence_threshold": -42.3, // float64
|
|
"silence_min_length": 1.8, // float64
|
|
},
|
|
}
|
|
_, err := whisper.Make(option)
|
|
if err == nil {
|
|
t.Error("Expected error due to missing connector")
|
|
}
|
|
// Error is expected because connector is not loaded
|
|
})
|
|
|
|
t.Run("int values should be converted to float64 for duration fields but still return error", func(t *testing.T) {
|
|
option := &kbtypes.ProviderOption{
|
|
Properties: map[string]interface{}{
|
|
"connector": "openai.whisper",
|
|
"chunk_duration": 30, // int
|
|
"mapping_duration": 5, // int
|
|
"silence_threshold": -40, // int
|
|
"silence_min_length": 1, // int
|
|
"max_concurrency": 6, // int
|
|
},
|
|
}
|
|
_, err := whisper.Make(option)
|
|
if err == nil {
|
|
t.Error("Expected error due to missing connector")
|
|
}
|
|
// Error is expected because connector is not loaded
|
|
})
|
|
|
|
t.Run("boolean values should be handled correctly but still return error", func(t *testing.T) {
|
|
option := &kbtypes.ProviderOption{
|
|
Properties: map[string]interface{}{
|
|
"connector": "openai.whisper",
|
|
"enable_silence_detection": true,
|
|
"cleanup_temp": false,
|
|
},
|
|
}
|
|
_, err := whisper.Make(option)
|
|
if err == nil {
|
|
t.Error("Expected error due to missing connector")
|
|
}
|
|
// Error is expected because connector is not loaded
|
|
})
|
|
|
|
t.Run("invalid property types should be ignored but still return error", func(t *testing.T) {
|
|
option := &kbtypes.ProviderOption{
|
|
Properties: map[string]interface{}{
|
|
"connector": 123, // invalid type
|
|
"chunk_duration": "invalid", // invalid type
|
|
"enable_silence_detection": "invalid", // invalid type
|
|
"max_concurrency": "invalid", // invalid type
|
|
"options": "not a map", // invalid type
|
|
},
|
|
}
|
|
_, err := whisper.Make(option)
|
|
if err == nil {
|
|
t.Error("Expected error due to missing connector")
|
|
}
|
|
// Error is expected because connector is not loaded
|
|
})
|
|
|
|
t.Run("partial properties should use defaults for missing values but still return error", func(t *testing.T) {
|
|
option := &kbtypes.ProviderOption{
|
|
Properties: map[string]interface{}{
|
|
"connector": "openai.whisper",
|
|
"chunk_duration": 60.0,
|
|
// Other properties should use defaults
|
|
},
|
|
}
|
|
_, err := whisper.Make(option)
|
|
if err == nil {
|
|
t.Error("Expected error due to missing connector")
|
|
}
|
|
// Error is expected because connector is not loaded
|
|
})
|
|
}
|
|
|
|
func TestWhisper_AutoDetect(t *testing.T) {
|
|
whisper := &Whisper{
|
|
Autodetect: []string{".mp3", ".wav", ".m4a", "audio/mpeg", "audio/wav"},
|
|
MatchPriority: 10,
|
|
}
|
|
|
|
t.Run("should detect .mp3 files", func(t *testing.T) {
|
|
match, priority, err := whisper.AutoDetect("audio.mp3", "")
|
|
if err != nil {
|
|
t.Errorf("Expected no error, got %v", err)
|
|
}
|
|
if !match {
|
|
t.Error("Expected match for .mp3 file")
|
|
}
|
|
if priority != 10 {
|
|
t.Errorf("Expected priority 10, got %d", priority)
|
|
}
|
|
})
|
|
|
|
t.Run("should detect .wav files", func(t *testing.T) {
|
|
match, priority, err := whisper.AutoDetect("recording.wav", "")
|
|
if err != nil {
|
|
t.Errorf("Expected no error, got %v", err)
|
|
}
|
|
if !match {
|
|
t.Error("Expected match for .wav file")
|
|
}
|
|
if priority != 10 {
|
|
t.Errorf("Expected priority 10, got %d", priority)
|
|
}
|
|
})
|
|
|
|
t.Run("should detect by content type", func(t *testing.T) {
|
|
match, priority, err := whisper.AutoDetect("unknown", "audio/mpeg")
|
|
if err != nil {
|
|
t.Errorf("Expected no error, got %v", err)
|
|
}
|
|
if !match {
|
|
t.Error("Expected match for audio/mpeg content type")
|
|
}
|
|
if priority != 10 {
|
|
t.Errorf("Expected priority 10, got %d", priority)
|
|
}
|
|
})
|
|
|
|
t.Run("should not detect unsupported files", func(t *testing.T) {
|
|
match, priority, err := whisper.AutoDetect("video.mp4", "video/mp4")
|
|
if err != nil {
|
|
t.Errorf("Expected no error, got %v", err)
|
|
}
|
|
if match {
|
|
t.Error("Expected no match for .mp4 file")
|
|
}
|
|
if priority != 0 {
|
|
t.Errorf("Expected priority 0, got %d", priority)
|
|
}
|
|
})
|
|
|
|
t.Run("empty autodetect should not match", func(t *testing.T) {
|
|
emptyWhisper := &Whisper{}
|
|
match, priority, err := emptyWhisper.AutoDetect("audio.mp3", "audio/mpeg")
|
|
if err != nil {
|
|
t.Errorf("Expected no error, got %v", err)
|
|
}
|
|
if match {
|
|
t.Error("Expected no match when autodetect is empty")
|
|
}
|
|
if priority != 0 {
|
|
t.Errorf("Expected priority 0, got %d", priority)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestWhisper_Schema(t *testing.T) {
|
|
whisper := &Whisper{}
|
|
schema, err := whisper.Schema(nil, "en")
|
|
if err != nil {
|
|
t.Errorf("Expected no error, got %v", err)
|
|
}
|
|
if schema == nil {
|
|
t.Error("Expected non-nil schema from factory.GetSchemaFromBindata")
|
|
}
|
|
}
|