package urlutil import ( "fmt" "net/url" "strconv" "testing" "time" "github.com/stretchr/testify/assert" ) func TestBuildTimeParameters(t *testing.T) { t.Parallel() params := make(url.Values) BuildTimeParameters(params, time.Minute) assert.True(t, params.Has(QueryIssued)) assert.True(t, params.Has(QueryExpiry)) ms1, _ := strconv.Atoi(params.Get(QueryIssued)) ms2, _ := strconv.Atoi(params.Get(QueryExpiry)) assert.Equal(t, 60000, ms2-ms1) } func TestValidateTimeParameters(t *testing.T) { t.Parallel() msNow := time.Now().UnixMilli() for _, tc := range []struct { name string params url.Values err string }{ {"empty", url.Values{}, "invalid issued timestamp"}, {"missing issued", url.Values{QueryExpiry: {fmt.Sprint(msNow + 10000)}}, "invalid issued timestamp"}, {"missing expiry", url.Values{QueryIssued: {fmt.Sprint(msNow + 10000)}}, "invalid expiry timestamp"}, {"invalid issued", url.Values{ QueryIssued: {fmt.Sprint(msNow + 120000)}, QueryExpiry: {fmt.Sprint(msNow + 240000)}, }, "issued in the future"}, {"invalid expiry", url.Values{ QueryIssued: {fmt.Sprint(msNow - 120000)}, QueryExpiry: {fmt.Sprint(msNow - 240000)}, }, "expired"}, {"valid", url.Values{ QueryIssued: {fmt.Sprint(msNow)}, QueryExpiry: {fmt.Sprint(msNow)}, }, ""}, } { tc := tc t.Run(tc.name, func(t *testing.T) { t.Parallel() err := ValidateTimeParameters(tc.params) if tc.err == "" { assert.NoError(t, err) } else { assert.ErrorContains(t, err, tc.err) } }) } }