-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser_test.go
More file actions
103 lines (88 loc) · 2.38 KB
/
parser_test.go
File metadata and controls
103 lines (88 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package llmproxy
import (
"bytes"
"errors"
"io"
"testing"
)
// MockBodyParser is a test double for BodyParser.
type MockBodyParser struct {
Meta BodyMetadata
RawBody []byte
Err error
}
func (m *MockBodyParser) Parse(body io.ReadCloser) (BodyMetadata, []byte, error) {
body.Close()
return m.Meta, m.RawBody, m.Err
}
// MockRequestEnricher is a test double for RequestEnricher.
type MockRequestEnricher struct {
Err error
}
func (m *MockRequestEnricher) Enrich(req interface{}, meta BodyMetadata, rawBody []byte) error {
return m.Err
}
// MockResponseExtractor is a test double for ResponseExtractor.
type MockResponseExtractor struct {
Meta ResponseMetadata
RawBody []byte
Err error
}
func (m *MockResponseExtractor) Extract(resp interface{}) (ResponseMetadata, []byte, error) {
return m.Meta, m.RawBody, m.Err
}
// MockURLResolver is a test double for URLResolver.
type MockURLResolver struct {
URL string
Err error
}
func (m *MockURLResolver) Resolve(meta BodyMetadata) (interface{}, error) {
if m.Err != nil {
return nil, m.Err
}
return m.URL, m.Err
}
func TestBodyParser(t *testing.T) {
t.Run("returns metadata and raw body", func(t *testing.T) {
expected := BodyMetadata{Model: "gpt-4"}
raw := []byte(`{"model":"gpt-4"}`)
parser := &MockBodyParser{Meta: expected, RawBody: raw}
meta, body, err := parser.Parse(io.NopCloser(bytes.NewReader(raw)))
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if meta.Model != "gpt-4" {
t.Errorf("expected model gpt-4, got %s", meta.Model)
}
if !bytes.Equal(body, raw) {
t.Errorf("raw body mismatch")
}
})
t.Run("returns error on failure", func(t *testing.T) {
parser := &MockBodyParser{Err: errors.New("parse error")}
_, _, err := parser.Parse(io.NopCloser(bytes.NewReader([]byte{})))
if err == nil {
t.Fatal("expected error")
}
})
}
func TestBaseProvider(t *testing.T) {
t.Run("returns configured values", func(t *testing.T) {
parser := &MockBodyParser{}
provider := NewBaseProvider("test",
WithBodyParser(parser),
)
if provider.Name() != "test" {
t.Errorf("expected name test, got %s", provider.Name())
}
if provider.BodyParser() != parser {
t.Error("body parser mismatch")
}
})
t.Run("returns nil for unconfigured components", func(t *testing.T) {
provider := NewBaseProvider("test")
if provider.BodyParser() != nil {
t.Error("expected nil body parser")
}
})
}