Skip to content

Commit

Permalink
Consider ActivePeriod when calculating NextWater
Browse files Browse the repository at this point in the history
  • Loading branch information
calvinmclean committed Dec 29, 2024
1 parent 1544831 commit f7334c9
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 14 deletions.
36 changes: 25 additions & 11 deletions garden-app/server/zone_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/rs/xid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)

var (
Expand Down Expand Up @@ -1097,11 +1098,30 @@ func TestWaterHistory(t *testing.T) {
}

func TestGetNextWaterTime(t *testing.T) {
clock.MockTime()
defer clock.Reset()

activePeriodWS := createExampleWaterSchedule()
activePeriodWS.ActivePeriod = &pkg.ActivePeriod{
StartMonth: "September",
EndMonth: "November",
}

tests := []struct {
name string
expectedDiff time.Duration
ws *pkg.WaterSchedule
expectedTime time.Time
}{
{"ZeroSkip", 0},
{
"ZeroSkip",
createExampleWaterSchedule(),
time.Date(2023, time.August, 23, 18, 24, 52, 0, time.UTC),
},
{
"OutsideActivePeriod",
activePeriodWS,
time.Date(2023, time.September, 0o1, 18, 24, 52, 0, time.UTC),
},
}

for _, tt := range tests {
Expand All @@ -1114,20 +1134,14 @@ func TestGetNextWaterTime(t *testing.T) {
zr := &ZonesAPI{
worker: worker.NewWorker(storageClient, nil, nil, slog.Default()),
}
ws := createExampleWaterSchedule()

err = zr.worker.ScheduleWaterAction(ws)
err = zr.worker.ScheduleWaterAction(tt.ws)
assert.NoError(t, err)
zr.worker.StartAsync()
defer zr.worker.Stop()

NextWaterTime := zr.worker.GetNextWaterTime(ws)
NextWaterTimeWithSkip := zr.worker.GetNextWaterTime(ws)

diff := NextWaterTimeWithSkip.Sub(*NextWaterTime)
if diff != tt.expectedDiff {
t.Errorf("Unexpected difference between next watering times: expected=%v, actual=%v", tt.expectedDiff, diff)
}
nextWaterTime := zr.worker.GetNextWaterTime(tt.ws)
require.Equal(t, tt.expectedTime, *nextWaterTime)
})
}
}
Expand Down
11 changes: 8 additions & 3 deletions garden-app/worker/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,10 +166,15 @@ func (w *Worker) GetNextWaterTime(ws *pkg.WaterSchedule) *time.Time {

for _, job := range w.scheduler.Jobs() {
for _, tag := range job.Tags() {
if tag == ws.ID.String() {
result := job.NextRun()
return &result
if tag != ws.ID.String() {
continue
}

result := job.NextRun()
for !ws.IsActive(result) {
result = result.Add(ws.Interval.Duration)
}
return &result
}
}
return nil
Expand Down

0 comments on commit f7334c9

Please sign in to comment.