blocky/config/schedules_test.go

108 lines
2.2 KiB
Go

package config
import (
"context"
"time"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("Schedules", func() {
const (
group = "testGroup"
)
var (
schedules Schedules
ctx context.Context
cancel context.CancelFunc
)
BeforeEach(func() {
schedules = make(Schedules)
ctx, cancel = context.WithCancel(context.Background())
hr, _ := parseHoursRange("09:00-17:00")
schedules[group] = []Schedule{
{
Days: []day{day(time.Saturday)},
HoursRanges: []hoursRange{hr},
},
}
})
AfterEach(func() {
cancel()
})
Describe("Refresh", func() {
When("refresh loop running", func() {
go schedules.Refresh(ctx, nil)
time.Sleep(time.Second)
It("should set the Active field", func() {
now := time.Now()
weekDay := now.Weekday()
hour := now.Hour()
if weekDay == time.Saturday && hour >= 9 && hour < 17 {
Expect(schedules[group][0].Active).To(BeTrue())
} else {
Expect(schedules[group][0].Active).To(BeFalse())
}
})
})
It("should set the Active field to true when schedule is active", func() {
fakeTime := getFakeTime(time.Saturday, "10:00")
go schedules.Refresh(ctx, fakeTime)
time.Sleep(time.Second)
Expect(schedules[group][0].Active).To(BeTrue())
})
It("should set the Active field to false when schedule is inactive", func() {
fakeTime := getFakeTime(time.Saturday, "19:00")
schedules[group][0].Active = true
go schedules.Refresh(ctx, fakeTime)
time.Sleep(time.Second)
Expect(schedules[group][0].Active).To(BeFalse())
})
})
Describe("IsActive", func() {
When("schedule is active", func() {
It("should return true", func() {
fakeTime := getFakeTime(time.Saturday, "10:00")
isActive := schedules.IsActive(group, fakeTime)
Expect(isActive).To(BeTrue())
})
})
When("schedule is inactive", func() {
It("should return false", func() {
fakeTime := getFakeTime(time.Sunday, "10:00")
isActive := schedules.IsActive(group, fakeTime)
Expect(isActive).To(BeFalse())
})
})
})
})
func getFakeTime(wk time.Weekday, hr string) func() time.Time {
return func() time.Time {
t, err := time.Parse("15:04", hr)
if err != nil {
panic(err)
}
return getRefTime(t).AddDate(0, 0, int(wk)+1)
}
}