chatdesk-ui/auth_v2.169.0/internal/conf/rate_test.go

69 lines
2.0 KiB
Go

package conf
import (
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestRateDecode(t *testing.T) {
cases := []struct {
str string
exp Rate
err string
}{
{str: "1800",
exp: Rate{Events: 1800, OverTime: time.Hour, typ: IntervalRateType}},
{str: "1800.0",
exp: Rate{Events: 1800, OverTime: time.Hour, typ: IntervalRateType}},
{str: "3600/1h",
exp: Rate{Events: 3600, OverTime: time.Hour, typ: BurstRateType}},
{str: "3600/1h0m0s",
exp: Rate{Events: 3600, OverTime: time.Hour, typ: BurstRateType}},
{str: "100/24h",
exp: Rate{Events: 100, OverTime: time.Hour * 24, typ: BurstRateType}},
{str: "", exp: Rate{},
err: `rate: value does not match`},
{str: "1h", exp: Rate{},
err: `rate: value does not match`},
{str: "/", exp: Rate{},
err: `rate: events part of rate value`},
{str: "/1h", exp: Rate{},
err: `rate: events part of rate value`},
{str: "3600.0/1h", exp: Rate{},
err: `rate: events part of rate value "3600.0/1h" failed to parse`},
{str: "100/", exp: Rate{},
err: `rate: over-time part of rate value`},
{str: "100/1", exp: Rate{},
err: `rate: over-time part of rate value`},
// zero events
{str: "0/1h",
exp: Rate{Events: 0, OverTime: time.Hour, typ: BurstRateType}},
{str: "0/24h",
exp: Rate{Events: 0, OverTime: time.Hour * 24, typ: BurstRateType}},
}
for idx, tc := range cases {
var r Rate
err := r.Decode(tc.str)
require.Equal(t, tc.exp, r) // verify don't mutate r on errr
t.Logf("tc #%v - duration str %v", idx, tc.str)
if tc.err != "" {
require.Error(t, err)
require.Contains(t, err.Error(), tc.err)
continue
}
require.NoError(t, err)
require.Equal(t, tc.exp, r)
require.Equal(t, tc.exp.typ, r.GetRateType())
}
// GetRateType() zero value
require.Equal(t, IntervalRateType, (&Rate{}).GetRateType())
// String()
require.Equal(t, "0.000000", (&Rate{}).String())
require.Equal(t, "100/1h0m0s", (&Rate{Events: 100, OverTime: time.Hour}).String())
}