mirror of https://github.com/coder/coder.git
120 lines
3.6 KiB
Go
120 lines
3.6 KiB
Go
package cli
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
//nolint:paralleltest // t.Setenv
|
|
func TestParseCLISchedule(t *testing.T) {
|
|
for _, testCase := range []struct {
|
|
name string
|
|
input []string
|
|
expectedSchedule string
|
|
expectedError string
|
|
tzEnv string
|
|
}{
|
|
{
|
|
name: "TimeAndDayOfWeekAndLocation",
|
|
input: []string{"09:00AM", "Sun-Sat", "America/Chicago"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * Sun-Sat",
|
|
tzEnv: "UTC",
|
|
},
|
|
{
|
|
name: "TimeOfDay24HourAndDayOfWeekAndLocation",
|
|
input: []string{"09:00", "Sun-Sat", "America/Chicago"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * Sun-Sat",
|
|
tzEnv: "UTC",
|
|
},
|
|
{
|
|
name: "TimeOfDay24HourAndDayOfWeekAndLocationButItsAllQuoted",
|
|
input: []string{"09:00 Sun-Sat America/Chicago"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * Sun-Sat",
|
|
tzEnv: "UTC",
|
|
},
|
|
{
|
|
name: "TimeOfDayOnly",
|
|
input: []string{"09:00AM"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * *",
|
|
tzEnv: "America/Chicago",
|
|
},
|
|
{
|
|
name: "Time24Military",
|
|
input: []string{"0900"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * *",
|
|
tzEnv: "America/Chicago",
|
|
},
|
|
{
|
|
name: "DayOfWeekAndTime",
|
|
input: []string{"09:00AM", "Sun-Sat"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * Sun-Sat",
|
|
tzEnv: "America/Chicago",
|
|
},
|
|
{
|
|
name: "TimeAndLocation",
|
|
input: []string{"09:00AM", "America/Chicago"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * *",
|
|
tzEnv: "UTC",
|
|
},
|
|
{
|
|
name: "LazyTime",
|
|
input: []string{"9am", "America/Chicago"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * *",
|
|
tzEnv: "UTC",
|
|
},
|
|
{
|
|
name: "ZeroPrefixedLazyTime",
|
|
input: []string{"09am", "America/Chicago"},
|
|
expectedSchedule: "CRON_TZ=America/Chicago 0 9 * * *",
|
|
tzEnv: "UTC",
|
|
},
|
|
{
|
|
name: "InvalidTime",
|
|
input: []string{"nine"},
|
|
expectedError: errInvalidTimeFormat.Error(),
|
|
},
|
|
{
|
|
name: "DayOfWeekAndInvalidTime",
|
|
input: []string{"nine", "Sun-Sat"},
|
|
expectedError: errInvalidTimeFormat.Error(),
|
|
},
|
|
{
|
|
name: "InvalidTimeAndLocation",
|
|
input: []string{"nine", "America/Chicago"},
|
|
expectedError: errInvalidTimeFormat.Error(),
|
|
},
|
|
{
|
|
name: "DayOfWeekAndInvalidTimeAndLocation",
|
|
input: []string{"nine", "Sun-Sat", "America/Chicago"},
|
|
expectedError: errInvalidTimeFormat.Error(),
|
|
},
|
|
{
|
|
name: "TimezoneProvidedInsteadOfLocation",
|
|
input: []string{"09:00AM", "Sun-Sat", "CST"},
|
|
expectedError: errUnsupportedTimezone.Error(),
|
|
},
|
|
{
|
|
name: "WhoKnows",
|
|
input: []string{"Time", "is", "a", "human", "construct"},
|
|
expectedError: errInvalidTimeFormat.Error(),
|
|
},
|
|
} {
|
|
testCase := testCase
|
|
//nolint:paralleltest // t.Setenv
|
|
t.Run(testCase.name, func(t *testing.T) {
|
|
t.Setenv("TZ", testCase.tzEnv)
|
|
actualSchedule, actualError := parseCLISchedule(testCase.input...)
|
|
if testCase.expectedError != "" {
|
|
assert.Nil(t, actualSchedule)
|
|
assert.ErrorContains(t, actualError, testCase.expectedError)
|
|
return
|
|
}
|
|
assert.NoError(t, actualError)
|
|
if assert.NotEmpty(t, actualSchedule) {
|
|
assert.Equal(t, testCase.expectedSchedule, actualSchedule.String())
|
|
}
|
|
})
|
|
}
|
|
}
|