mirror of
https://github.com/coder/coder.git
synced 2025-03-14 10:09:57 +00:00
* chore: add /v2 to import module path go mod requires semantic versioning with versions greater than 1.x This was a mechanical update by running: ``` go install github.com/marwan-at-work/mod/cmd/mod@latest mod upgrade ``` Migrate generated files to import /v2 * Fix gen
157 lines
2.8 KiB
Go
157 lines
2.8 KiB
Go
package codersdk_test
|
|
|
|
import (
|
|
"database/sql"
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/coder/coder/v2/codersdk"
|
|
)
|
|
|
|
func TestNullTime_MarshalJSON(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t1, err := time.Parse(time.RFC3339, "2022-08-18T00:00:00Z")
|
|
require.NoError(t, err)
|
|
bt1, err := json.Marshal(t1)
|
|
require.NoError(t, err)
|
|
|
|
tests := []struct {
|
|
name string
|
|
input sql.NullTime
|
|
want string
|
|
}{
|
|
{
|
|
name: "valid zero",
|
|
input: sql.NullTime{Valid: true},
|
|
want: `"0001-01-01T00:00:00Z"`,
|
|
},
|
|
{
|
|
name: "invalid zero",
|
|
input: sql.NullTime{Valid: false},
|
|
want: "null",
|
|
},
|
|
{
|
|
name: "valid time",
|
|
input: sql.NullTime{Time: t1, Valid: true},
|
|
want: string(bt1),
|
|
},
|
|
{
|
|
name: "null time",
|
|
input: sql.NullTime{Time: t1, Valid: false},
|
|
want: "null",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tr := codersdk.NewNullTime(tt.input.Time, tt.input.Valid)
|
|
got, err := tr.MarshalJSON()
|
|
require.NoError(t, err)
|
|
require.Equal(t, tt.want, string(got))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNullTime_UnmarshalJSON(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t1, err := time.Parse(time.RFC3339, "2022-08-18T00:00:00Z")
|
|
require.NoError(t, err)
|
|
bt1, err := json.Marshal(t1)
|
|
require.NoError(t, err)
|
|
|
|
type request struct {
|
|
Time codersdk.NullTime `json:"time"`
|
|
}
|
|
|
|
tests := []struct {
|
|
name string
|
|
data string
|
|
want codersdk.NullTime
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "null",
|
|
data: `{"time": null}`,
|
|
want: codersdk.NullTime{},
|
|
},
|
|
{
|
|
name: "empty",
|
|
data: `{}`,
|
|
want: codersdk.NullTime{},
|
|
},
|
|
{
|
|
name: "empty string",
|
|
data: `{"time": ""}`,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "valid time",
|
|
data: fmt.Sprintf(`{"time": %s}`, bt1),
|
|
want: codersdk.NewNullTime(t1, true),
|
|
},
|
|
{
|
|
name: "invalid time",
|
|
data: fmt.Sprintf(`{"time": %q}`, `2022-08-18T00:00:00`),
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var req request
|
|
err := json.Unmarshal([]byte(tt.data), &req)
|
|
if tt.wantErr {
|
|
require.Error(t, err)
|
|
return
|
|
}
|
|
require.NoError(t, err)
|
|
require.Equal(t, tt.want, req.Time)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNullTime_IsZero(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
input sql.NullTime
|
|
want bool
|
|
}{
|
|
{
|
|
name: "zero",
|
|
input: sql.NullTime{},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "not zero",
|
|
input: sql.NullTime{Time: time.Now(), Valid: true},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "null is zero",
|
|
input: sql.NullTime{Time: time.Now(), Valid: false},
|
|
want: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tr := codersdk.NullTime{NullTime: tt.input}
|
|
require.Equal(t, tt.want, tr.IsZero())
|
|
})
|
|
}
|
|
}
|