76 lines
2.2 KiB
Go
76 lines
2.2 KiB
Go
package contracts
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestASRInputSampleRateExamples(t *testing.T) {
|
|
schema, err := CompileCurrent("http-task-detail.schema.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, tc := range []struct {
|
|
name string
|
|
rate float64
|
|
}{
|
|
{"8khz", 8000},
|
|
{"16khz", 16000},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
fixture, err := Files.ReadFile("schema/examples/config-read-task-asr-" + tc.name + ".json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var doc map[string]any
|
|
if err := json.Unmarshal(fixture, &doc); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
params := doc["agent"].(map[string]any)["asr"].(map[string]any)["params"].(map[string]any)
|
|
if got := params["sample_rate"]; got != tc.rate {
|
|
t.Fatalf("sample_rate=%v, want %v", got, tc.rate)
|
|
}
|
|
if err := schema.Validate(doc); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Schema acceptance describes the task input, not a working resampler or a
|
|
// provider's actual capabilities. Do not bind it to Agent's internal rate.
|
|
func TestASRSampleRateSchemaDoesNotBindInternalFormat(t *testing.T) {
|
|
schema, err := CompileCurrent("http-task-detail.schema.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, mode := range []string{"asr", "full"} {
|
|
fixture, err := Files.ReadFile("schema/examples/config-read-task-" + mode + ".json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, tc := range []struct {
|
|
name string
|
|
params map[string]any
|
|
valid bool
|
|
}{
|
|
{"empty parameters remain valid", map[string]any{}, true},
|
|
{"8khz input", map[string]any{"sample_rate": 8000}, true},
|
|
{"16khz input", map[string]any{"sample_rate": 16000}, true},
|
|
{"no fixed supported-rate enumeration", map[string]any{"sample_rate": 48000}, true},
|
|
{"nested parameters remain invalid", map[string]any{"sample_rate": map[string]any{"hz": 8000}}, false},
|
|
} {
|
|
t.Run(mode+"/"+tc.name, func(t *testing.T) {
|
|
var doc map[string]any
|
|
if err := json.Unmarshal(fixture, &doc); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
doc["agent"].(map[string]any)["asr"].(map[string]any)["params"] = tc.params
|
|
if err := schema.Validate(doc); (err == nil) != tc.valid {
|
|
t.Fatalf("valid=%t, want %t: %v", err == nil, tc.valid, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|