You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/api/types_test.go

69 lines
1.4 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package api
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestTypes(t *testing.T) {
t.Parallel()
tests := []struct {
name string
json string
want any
wantErrContains string
}{
{
name: "Duration-valid",
json: `"12345s"`,
want: Duration{Duration: 12345000000000},
},
{
name: "Duration-valid-with-float",
json: `"1.2345s"`,
want: Duration{Duration: 1234500000},
},
{
name: "Duration-valid",
json: `"1h"`,
want: Duration{Duration: 3600000000000},
},
{
name: "UInt64String-InvalidNumber",
json: `"abcd"`,
want: Duration{Duration: 0},
wantErrContains: "invalid duration \"abcd\"",
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
var got any
var err error
switch tc.want.(type) {
case Duration:
var i Duration
err = json.Unmarshal([]byte(tc.json), &i)
got = i
default:
t.Fatalf("invalid type for test: %s", tc.name)
}
if tc.wantErrContains != "" {
require.Error(err)
assert.Equal(tc.want, got)
assert.ErrorContains(err, tc.wantErrContains)
return
}
require.NoError(err)
assert.Equal(tc.want, got)
})
}
}