snapshot of https://github.com/traggo/server.git (master, 2026-09-16; blobs > 131072B omitted)
Some checks failed
build / build (push) Failing after 3s
Some checks failed
build / build (push) Failing after 3s
This commit is contained in:
275
timespan/get_test.go
Normal file
275
timespan/get_test.go
Normal file
@@ -0,0 +1,275 @@
|
||||
package timespan
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/traggo/server/generated/gqlmodel"
|
||||
"github.com/traggo/server/model"
|
||||
"github.com/traggo/server/test"
|
||||
"github.com/traggo/server/test/fake"
|
||||
)
|
||||
|
||||
var (
|
||||
timeSpan1 = &model.TimeSpan{
|
||||
ID: 1,
|
||||
UserID: 5,
|
||||
StartUserTime: test.Time("2019-06-10T18:30:00Z"),
|
||||
EndUserTime: test.TimeP("2019-06-10T18:40:00Z"),
|
||||
StartUTC: test.Time("2019-06-10T18:30:00Z"),
|
||||
EndUTC: test.TimeP("2019-06-10T18:40:00Z"),
|
||||
OffsetUTC: 0,
|
||||
Tags: []model.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
modelTimeSpan1 = gqlmodel.TimeSpan{
|
||||
ID: 1,
|
||||
Start: test.ModelTime("2019-06-10T18:30:00Z"),
|
||||
End: test.ModelTimeP("2019-06-10T18:40:00Z"),
|
||||
Tags: []*gqlmodel.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
timeSpan2 = &model.TimeSpan{
|
||||
ID: 2,
|
||||
UserID: 5,
|
||||
StartUserTime: test.Time("2019-06-10T18:40:00Z"),
|
||||
EndUserTime: test.TimeP("2019-06-10T18:50:00Z"),
|
||||
StartUTC: test.Time("2019-06-10T18:40:00Z"),
|
||||
EndUTC: test.TimeP("2019-06-10T18:50:00Z"),
|
||||
OffsetUTC: 0,
|
||||
Tags: []model.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
modelTimeSpan2 = gqlmodel.TimeSpan{
|
||||
ID: 2,
|
||||
Start: test.ModelTime("2019-06-10T18:40:00Z"),
|
||||
End: test.ModelTimeP("2019-06-10T18:50:00Z"),
|
||||
Tags: []*gqlmodel.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
timeSpan3 = &model.TimeSpan{
|
||||
ID: 3,
|
||||
UserID: 5,
|
||||
StartUserTime: test.Time("2019-06-10T18:50:00Z"),
|
||||
EndUserTime: test.TimeP("2019-06-10T19:00:00Z"),
|
||||
StartUTC: test.Time("2019-06-10T18:50:00Z"),
|
||||
EndUTC: test.TimeP("2019-06-10T19:00:00Z"),
|
||||
OffsetUTC: 0,
|
||||
Tags: []model.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
modelTimeSpan3 = gqlmodel.TimeSpan{
|
||||
ID: 3,
|
||||
Start: test.ModelTime("2019-06-10T18:50:00Z"),
|
||||
End: test.ModelTimeP("2019-06-10T19:00:00Z"),
|
||||
Tags: []*gqlmodel.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
timeSpan4 = &model.TimeSpan{
|
||||
ID: 4,
|
||||
UserID: 5,
|
||||
StartUserTime: test.Time("2019-06-10T18:00:00Z"),
|
||||
EndUserTime: test.TimeP("2019-06-10T19:00:00Z"),
|
||||
StartUTC: test.Time("2019-06-10T18:00:00Z"),
|
||||
EndUTC: test.TimeP("2019-06-10T19:00:00Z"),
|
||||
OffsetUTC: 0,
|
||||
Tags: []model.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
modelTimeSpan4 = gqlmodel.TimeSpan{
|
||||
ID: 4,
|
||||
Start: test.ModelTime("2019-06-10T18:00:00Z"),
|
||||
End: test.ModelTimeP("2019-06-10T19:00:00Z"),
|
||||
Tags: []*gqlmodel.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
runningTimeSpan = &model.TimeSpan{
|
||||
ID: 5,
|
||||
UserID: 5,
|
||||
StartUserTime: test.Time("2019-06-11T18:00:00Z"),
|
||||
StartUTC: test.Time("2019-06-11T18:00:00Z"),
|
||||
EndUserTime: nil,
|
||||
EndUTC: nil,
|
||||
OffsetUTC: 0,
|
||||
Tags: []model.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
modelRunningTimeSpan = gqlmodel.TimeSpan{
|
||||
ID: 5,
|
||||
Start: test.ModelTime("2019-06-11T18:00:00Z"),
|
||||
End: nil,
|
||||
Tags: []*gqlmodel.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
timeSpanOtherUser = &model.TimeSpan{
|
||||
ID: 6,
|
||||
UserID: 2,
|
||||
StartUserTime: test.Time("2019-06-10T18:30:00Z"),
|
||||
EndUserTime: test.TimeP("2019-06-10T18:40:00Z"),
|
||||
StartUTC: test.Time("2019-06-10T18:30:00Z"),
|
||||
EndUTC: test.TimeP("2019-06-10T18:40:00Z"),
|
||||
OffsetUTC: 0,
|
||||
Tags: []model.TimeSpanTag{
|
||||
{Key: "test"},
|
||||
{Key: "test2"},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
type data struct {
|
||||
DB []*model.TimeSpan
|
||||
From *model.Time
|
||||
To *model.Time
|
||||
Expected []*gqlmodel.TimeSpan
|
||||
Cursor *gqlmodel.InputCursor
|
||||
}
|
||||
|
||||
func (d data) String() string {
|
||||
str := "DB=["
|
||||
for _, v := range d.DB {
|
||||
str += fmt.Sprint(v.ID) + ","
|
||||
}
|
||||
str = str + "]"
|
||||
if d.From != nil {
|
||||
str = str + "|From=" + d.From.Time().Format(time.RFC3339)
|
||||
}
|
||||
if d.To != nil {
|
||||
str = str + "|To=" + d.To.Time().Format(time.RFC3339)
|
||||
}
|
||||
|
||||
str += "|Expected=["
|
||||
for _, v := range d.Expected {
|
||||
str += fmt.Sprint(v.ID) + ","
|
||||
}
|
||||
str = str + "]"
|
||||
return str
|
||||
}
|
||||
|
||||
func TestGet(t *testing.T) {
|
||||
d := []data{
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpanOtherUser},
|
||||
From: nil,
|
||||
To: nil,
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan1},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4, runningTimeSpan},
|
||||
From: nil,
|
||||
To: nil,
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan3, &modelTimeSpan2, &modelTimeSpan1, &modelTimeSpan4},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4},
|
||||
From: nil,
|
||||
To: nil,
|
||||
Cursor: &gqlmodel.InputCursor{PageSize: p(1)},
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan3},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4},
|
||||
From: nil,
|
||||
To: nil,
|
||||
Cursor: &gqlmodel.InputCursor{PageSize: p(1), Offset: p(1), StartID: p(4)},
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan2},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4},
|
||||
From: nil,
|
||||
To: nil,
|
||||
Cursor: &gqlmodel.InputCursor{PageSize: p(1), Offset: p(0), StartID: p(1)},
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan1},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4},
|
||||
From: test.ModelTimeP("2019-06-10T18:40:01+02:00"),
|
||||
To: nil,
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan3, &modelTimeSpan2, &modelTimeSpan4},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4},
|
||||
From: modelTimeSpan1.End,
|
||||
To: nil,
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan3, &modelTimeSpan2, &modelTimeSpan1, &modelTimeSpan4},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4},
|
||||
From: nil,
|
||||
To: test.ModelTimeP("2019-06-10T18:45:00+02:00"),
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan2, &modelTimeSpan1, &modelTimeSpan4},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4},
|
||||
From: test.ModelTimeP("2019-06-10T18:35:00+02:00"),
|
||||
To: test.ModelTimeP("2019-06-10T18:45:00+02:00"),
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan2, &modelTimeSpan1, &modelTimeSpan4},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{timeSpan1, timeSpan2, timeSpan3, timeSpan4},
|
||||
From: test.ModelTimeP("2019-06-10T18:55:00+02:00"),
|
||||
To: test.ModelTimeP("2019-06-10T18:56:00+02:00"),
|
||||
Expected: []*gqlmodel.TimeSpan{&modelTimeSpan3, &modelTimeSpan4},
|
||||
},
|
||||
{
|
||||
DB: []*model.TimeSpan{runningTimeSpan},
|
||||
From: test.ModelTimeP("2019-06-11T18:30:00Z"),
|
||||
To: test.ModelTimeP("2019-06-11T19:00:00Z"),
|
||||
Expected: nil,
|
||||
},
|
||||
}
|
||||
|
||||
for i, testData := range d {
|
||||
t.Run(fmt.Sprintf("%d>%s", i, testData), func(t *testing.T) {
|
||||
db := test.InMemoryDB(t)
|
||||
db.User(5)
|
||||
db.User(2)
|
||||
defer db.Close()
|
||||
for _, entry := range testData.DB {
|
||||
db.Create(entry)
|
||||
}
|
||||
|
||||
resolver := ResolverForTimeSpan{DB: db.DB}
|
||||
timeSpans, err := resolver.TimeSpans(fake.User(5), testData.From, testData.To, testData.Cursor)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, testData.Expected, timeSpans.TimeSpans)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGet_fail_toBeforeStart(t *testing.T) {
|
||||
db := test.InMemoryDB(t)
|
||||
defer db.Close()
|
||||
|
||||
resolver := ResolverForTimeSpan{DB: db.DB}
|
||||
timeSpans, err := resolver.TimeSpans(fake.User(5), test.ModelTimeP("2019-06-10T18:30:00+02:00"),
|
||||
test.ModelTimeP("2019-06-10T17:30:00+02:00"), nil)
|
||||
require.Nil(t, timeSpans)
|
||||
require.EqualError(t, err, "fromInclusive must be before toInclusive")
|
||||
}
|
||||
|
||||
func p(i int) *int {
|
||||
return &i
|
||||
}
|
||||
Reference in New Issue
Block a user