package api import ( "encoding/json" "math" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestKeepAliveParsingFromJSON(t *testing.T) { tests := []struct { name string req string exp *Duration }{ { name: "Positive Integer", req: `{ "keep_alive": 42 }`, exp: &Duration{42 * time.Second}, }, { name: "Positive Float", req: `{ "keep_alive": 42.5 }`, exp: &Duration{42 * time.Second}, }, { name: "Positive Integer String", req: `{ "keep_alive": "42m" }`, exp: &Duration{42 * time.Minute}, }, { name: "Negative Integer", req: `{ "keep_alive": -1 }`, exp: &Duration{math.MaxInt64}, }, { name: "Negative Float", req: `{ "keep_alive": -3.14 }`, exp: &Duration{math.MaxInt64}, }, { name: "Negative Integer String", req: `{ "keep_alive": "-1m" }`, exp: &Duration{math.MaxInt64}, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { var dec ChatRequest err := json.Unmarshal([]byte(test.req), &dec) require.NoError(t, err) assert.Equal(t, test.exp, dec.KeepAlive) }) } } func TestDurationMarshalUnmarshal(t *testing.T) { tests := []struct { name string input time.Duration expected time.Duration }{ { "negative duration", time.Duration(-1), time.Duration(math.MaxInt64), }, { "positive duration", 42 * time.Second, 42 * time.Second, }, { "another positive duration", 42 * time.Minute, 42 * time.Minute, }, { "zero duration", time.Duration(0), time.Duration(0), }, { "max duration", time.Duration(math.MaxInt64), time.Duration(math.MaxInt64), }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { b, err := json.Marshal(Duration{test.input}) require.NoError(t, err) var d Duration err = json.Unmarshal(b, &d) require.NoError(t, err) assert.Equal(t, test.expected, d.Duration, "input %v, marshalled %v, got %v", test.input, string(b), d.Duration) }) } }