119 lines
2.3 KiB
Go
119 lines
2.3 KiB
Go
package objectid_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"go.neonxp.ru/objectid"
|
|
)
|
|
|
|
func TestID_String(t *testing.T) {
|
|
objectid.Seed()
|
|
id1 := objectid.New()
|
|
id1String := id1.String()
|
|
id2, err := objectid.FromString(id1String)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if !reflect.DeepEqual(id1, id2) {
|
|
t.Errorf("ID2 = %v, want %v", id2, id1)
|
|
}
|
|
wantErr := "is invalid object id (length=3)"
|
|
if _, err := objectid.FromString("test"); !strings.HasSuffix(err.Error(), wantErr) {
|
|
t.Errorf("Err = %v, want suffix %s", err, wantErr)
|
|
}
|
|
}
|
|
|
|
func TestID_JSON(t *testing.T) {
|
|
objectid.Seed()
|
|
type testStruct struct {
|
|
ID objectid.ID `json:"oid"`
|
|
}
|
|
|
|
t1 := testStruct{
|
|
ID: objectid.New(),
|
|
}
|
|
|
|
b1, err := json.Marshal(t1)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
t2 := new(testStruct)
|
|
|
|
if err := json.Unmarshal(b1, t2); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(t1, *t2) {
|
|
t.Errorf("T2 = %v, want %v", t2, t1)
|
|
}
|
|
|
|
id := objectid.New()
|
|
wantErr := fmt.Errorf(" is invalid object id (length=0)")
|
|
if err := id.UnmarshalJSON(nil); err.Error() != wantErr.Error() {
|
|
t.Errorf("UnmarshalJSON(nil) = %v, want %v", err, wantErr)
|
|
}
|
|
}
|
|
|
|
func TestID_Time(t *testing.T) {
|
|
objectid.Seed()
|
|
testTime, _ := time.Parse(time.RFC3339, "2020-12-20T10:11:50Z")
|
|
id := objectid.FromTime(testTime.UTC())
|
|
if got := id.Time(); !reflect.DeepEqual(got.UTC(), testTime) {
|
|
t.Errorf("ID.Time() = %v, want %v", got.String(), testTime.String())
|
|
}
|
|
}
|
|
|
|
func TestID_Counter(t *testing.T) {
|
|
objectid.Seed()
|
|
for i := 1; i <= 10; i++ {
|
|
id := objectid.New()
|
|
if id.Counter() != uint64(i) {
|
|
t.Errorf("id.Counter = %d, want %d", i, id.Counter())
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestID_Less(t *testing.T) {
|
|
objectid.Seed()
|
|
type args struct {
|
|
i2 objectid.ID
|
|
}
|
|
nowTime := time.Now()
|
|
tests := []struct {
|
|
name string
|
|
i objectid.ID
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "by time",
|
|
i: objectid.New(),
|
|
args: args{
|
|
i2: objectid.New(),
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "by counter",
|
|
i: objectid.FromTime(nowTime),
|
|
args: args{
|
|
i2: objectid.FromTime(nowTime),
|
|
},
|
|
want: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := tt.i.Less(tt.args.i2); got != tt.want {
|
|
t.Errorf("ID.Less() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|