Skip to content

Commit 32d7193

Browse files
committed
Add test
1 parent 4cf4606 commit 32d7193

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

components/usage/pkg/db/types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package db
66

77
import (
88
"database/sql/driver"
9+
"errors"
910
"fmt"
1011
"github.com/relvacode/iso8601"
1112
"time"
@@ -34,6 +35,10 @@ func (n *VarcharTime) Scan(value interface{}) error {
3435

3536
switch s := value.(type) {
3637
case []uint8:
38+
if len(s) == 0 {
39+
return errors.New("failed to parse empty varchar time")
40+
}
41+
3742
parsed, err := iso8601.ParseString(string(s))
3843
if err != nil {
3944
return fmt.Errorf("failed to parse %v into ISO8601: %w", string(s), err)

components/usage/pkg/db/types_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package db
6+
7+
import (
8+
"github.com/stretchr/testify/require"
9+
"testing"
10+
"time"
11+
)
12+
13+
func TestVarcharTime_Scan(t *testing.T) {
14+
for _, scenario := range []struct {
15+
Name string
16+
17+
Input interface{}
18+
Expected time.Time
19+
Error bool
20+
}{
21+
{
22+
Name: "nil value errors",
23+
Input: nil,
24+
Error: true,
25+
},
26+
{
27+
Name: "empty uint8 slice errors",
28+
Input: []uint8{},
29+
Error: true,
30+
},
31+
{
32+
Name: "fails with string",
33+
Input: "2019-05-10T09:54:28.185Z",
34+
Error: true,
35+
},
36+
{
37+
Name: "parses valid ISO 8601 from TypeScript",
38+
Input: []uint8("2019-05-10T09:54:28.185Z"),
39+
Expected: time.Date(2019, 05, 10, 9, 54, 28, 185000000, time.UTC),
40+
},
41+
} {
42+
t.Run(scenario.Name, func(t *testing.T) {
43+
var vt VarcharTime
44+
err := vt.Scan(scenario.Input)
45+
if scenario.Error {
46+
require.Error(t, err)
47+
} else {
48+
require.NoError(t, err)
49+
require.Equal(t, scenario.Expected, time.Time(vt))
50+
}
51+
})
52+
}
53+
}

0 commit comments

Comments
 (0)