1515package llm_token_ratelimit
1616
1717import (
18+ "encoding/json"
1819 "testing"
1920
2021 "gopkg.in/yaml.v3"
2122)
2223
23- func TestIdentifierType_UnmarshalYAML (t * testing.T ) {
24+ func TestTokenEncoderProvider_UnmarshalJSON (t * testing.T ) {
2425 tests := []struct {
2526 name string
26- yamlData string
27+ jsonData string
28+ expected TokenEncoderProvider
29+ wantErr bool
30+ }{
31+ {"openai provider" , `{"provider": "openai"}` , OpenAIEncoderProvider , false },
32+ {"unknown provider" , `{"provider": "unknown"}` , OpenAIEncoderProvider , true },
33+ {"empty provider" , `{"provider": ""}` , OpenAIEncoderProvider , true },
34+ {"number as provider" , `{"provider": 0}` , OpenAIEncoderProvider , true },
35+ {"invalid number" , `{"provider": 999}` , OpenAIEncoderProvider , true },
36+ }
37+
38+ for _ , tt := range tests {
39+ t .Run (tt .name , func (t * testing.T ) {
40+ var data struct {
41+ Provider TokenEncoderProvider `json:"provider"`
42+ }
43+
44+ err := json .Unmarshal ([]byte (tt .jsonData ), & data )
45+ if tt .wantErr {
46+ if err == nil {
47+ t .Errorf ("Expected error but got none" )
48+ }
49+ } else {
50+ if err != nil {
51+ t .Errorf ("Unexpected error: %v" , err )
52+ }
53+ if data .Provider != tt .expected {
54+ t .Errorf ("Expected %v, got %v" , tt .expected , data .Provider )
55+ }
56+ }
57+ })
58+ }
59+ }
60+
61+ func TestIdentifierType_UnmarshalJSON (t * testing.T ) {
62+ tests := []struct {
63+ name string
64+ jsonData string
2765 expected IdentifierType
2866 wantErr bool
2967 }{
30- {"all identifier" , `type: all` , AllIdentifier , false },
31- {"header identifier" , `type: header` , Header , false },
32- {"unknown identifier" , `type: unknown` , AllIdentifier , true },
33- {"empty identifier" , `type: ""` , AllIdentifier , true },
34- {"number as identifier" , `type: 123` , AllIdentifier , true },
68+ {"all identifier" , `{"type": "all"}` , AllIdentifier , false },
69+ {"header identifier" , `{"type": "header"}` , Header , false },
70+ {"unknown identifier" , `{"type": "unknown"}` , AllIdentifier , true },
71+ {"empty identifier" , `{"type": ""}` , AllIdentifier , true },
72+ {"number as identifier - 0" , `{"type": 0}` , AllIdentifier , true },
73+ {"number as identifier - 1" , `{"type": 1}` , Header , true },
74+ {"invalid number" , `{"type": 999}` , AllIdentifier , true },
3575 }
3676
3777 for _ , tt := range tests {
3878 t .Run (tt .name , func (t * testing.T ) {
3979 var data struct {
40- Type IdentifierType `yaml :"type"`
80+ Type IdentifierType `json :"type"`
4181 }
4282
43- err := yaml .Unmarshal ([]byte (tt .yamlData ), & data )
83+ err := json .Unmarshal ([]byte (tt .jsonData ), & data )
4484 if tt .wantErr {
4585 if err == nil {
4686 t .Errorf ("Expected error but got none" )
@@ -57,27 +97,30 @@ func TestIdentifierType_UnmarshalYAML(t *testing.T) {
5797 }
5898}
5999
60- func TestCountStrategy_UnmarshalYAML (t * testing.T ) {
100+ func TestCountStrategy_UnmarshalJSON (t * testing.T ) {
61101 tests := []struct {
62102 name string
63- yamlData string
103+ jsonData string
64104 expected CountStrategy
65105 wantErr bool
66106 }{
67- {"total tokens" , `strategy: total-tokens` , TotalTokens , false },
68- {"input tokens" , `strategy: input-tokens` , InputTokens , false },
69- {"output tokens" , `strategy: output-tokens` , OutputTokens , false },
70- {"unknown strategy" , `strategy: unknown-tokens` , TotalTokens , true },
71- {"empty strategy" , `strategy: ""` , TotalTokens , true },
107+ {"total tokens" , `{"strategy": "total-tokens"}` , TotalTokens , false },
108+ {"input tokens" , `{"strategy": "input-tokens"}` , InputTokens , false },
109+ {"output tokens" , `{"strategy": "output-tokens"}` , OutputTokens , false },
110+ {"unknown strategy" , `{"strategy": "unknown-tokens"}` , TotalTokens , true },
111+ {"empty strategy" , `{"strategy": ""}` , TotalTokens , true },
112+ {"number as strategy - 0" , `{"strategy": 0}` , TotalTokens , true },
113+ {"number as strategy - 1" , `{"strategy": 1}` , InputTokens , true },
114+ {"number as strategy - 2" , `{"strategy": 2}` , OutputTokens , true },
72115 }
73116
74117 for _ , tt := range tests {
75118 t .Run (tt .name , func (t * testing.T ) {
76119 var data struct {
77- Strategy CountStrategy `yaml :"strategy"`
120+ Strategy CountStrategy `json :"strategy"`
78121 }
79122
80- err := yaml .Unmarshal ([]byte (tt .yamlData ), & data )
123+ err := json .Unmarshal ([]byte (tt .jsonData ), & data )
81124 if tt .wantErr {
82125 if err == nil {
83126 t .Errorf ("Expected error but got none" )
@@ -94,28 +137,32 @@ func TestCountStrategy_UnmarshalYAML(t *testing.T) {
94137 }
95138}
96139
97- func TestTimeUnit_UnmarshalYAML (t * testing.T ) {
140+ func TestTimeUnit_UnmarshalJSON (t * testing.T ) {
98141 tests := []struct {
99142 name string
100- yamlData string
143+ jsonData string
101144 expected TimeUnit
102145 wantErr bool
103146 }{
104- {"second unit" , `unit: second` , Second , false },
105- {"minute unit" , `unit: minute` , Minute , false },
106- {"hour unit" , `unit: hour` , Hour , false },
107- {"day unit" , `unit: day` , Day , false },
108- {"unknown unit" , `unit: week` , Second , true },
109- {"empty unit" , `unit: ""` , Second , true },
147+ {"second unit" , `{"unit": "second"}` , Second , false },
148+ {"minute unit" , `{"unit": "minute"}` , Minute , false },
149+ {"hour unit" , `{"unit": "hour"}` , Hour , false },
150+ {"day unit" , `{"unit": "day"}` , Day , false },
151+ {"unknown unit" , `{"unit": "week"}` , Second , true },
152+ {"empty unit" , `{"unit": ""}` , Second , true },
153+ {"number as unit - 0" , `{"unit": 0}` , Second , true },
154+ {"number as unit - 1" , `{"unit": 1}` , Minute , true },
155+ {"number as unit - 2" , `{"unit": 2}` , Hour , true },
156+ {"number as unit - 3" , `{"unit": 3}` , Day , true },
110157 }
111158
112159 for _ , tt := range tests {
113160 t .Run (tt .name , func (t * testing.T ) {
114161 var data struct {
115- Unit TimeUnit `yaml :"unit"`
162+ Unit TimeUnit `json :"unit"`
116163 }
117164
118- err := yaml .Unmarshal ([]byte (tt .yamlData ), & data )
165+ err := json .Unmarshal ([]byte (tt .jsonData ), & data )
119166 if tt .wantErr {
120167 if err == nil {
121168 t .Errorf ("Expected error but got none" )
@@ -132,25 +179,28 @@ func TestTimeUnit_UnmarshalYAML(t *testing.T) {
132179 }
133180}
134181
135- func TestStrategy_UnmarshalYAML (t * testing.T ) {
182+ func TestStrategy_UnmarshalJSON (t * testing.T ) {
136183 tests := []struct {
137184 name string
138- yamlData string
185+ jsonData string
139186 expected Strategy
140187 wantErr bool
141188 }{
142- {"fixed window" , `strategy: fixed-window` , FixedWindow , false },
143- {"unknown strategy" , `strategy: sliding-window` , FixedWindow , true },
144- {"empty strategy" , `strategy: ""` , FixedWindow , true },
189+ {"fixed window" , `{"strategy": "fixed-window"}` , FixedWindow , false },
190+ {"peta strategy" , `{"strategy": "peta"}` , PETA , false },
191+ {"unknown strategy" , `{"strategy": "sliding-window"}` , FixedWindow , true },
192+ {"empty strategy" , `{"strategy": ""}` , FixedWindow , true },
193+ {"number as strategy - 0" , `{"strategy": 0}` , FixedWindow , true },
194+ {"number as strategy - 1" , `{"strategy": 1}` , PETA , true },
145195 }
146196
147197 for _ , tt := range tests {
148198 t .Run (tt .name , func (t * testing.T ) {
149199 var data struct {
150- Strategy Strategy `yaml :"strategy"`
200+ Strategy Strategy `json :"strategy"`
151201 }
152202
153- err := yaml .Unmarshal ([]byte (tt .yamlData ), & data )
203+ err := json .Unmarshal ([]byte (tt .jsonData ), & data )
154204 if tt .wantErr {
155205 if err == nil {
156206 t .Errorf ("Expected error but got none" )
0 commit comments