@@ -32,6 +32,8 @@ func TestTriggerCreationFromXML(t *testing.T) {
3232 fixedDay = "Tuesday"
3333 }
3434
35+ timezone := `(Z|[+-]\d{2}:\d{2})`
36+
3537 fixtures := []struct {
3638 description string
3739 schedules []string
@@ -42,155 +44,155 @@ func TestTriggerCreationFromXML(t *testing.T) {
4244 {
4345 "only once" ,
4446 []string {"2020-01-02 03:04" },
45- `<TimeTrigger>\s*<StartBoundary>2020-01-02T03:04:00\+00:00 </StartBoundary>\s*</TimeTrigger>` ,
47+ `<TimeTrigger>\s*<StartBoundary>2020-01-02T03:04:00` + timezone + ` </StartBoundary>\s*</TimeTrigger>` ,
4648 1 ,
4749 time.Time {},
4850 },
4951 // daily
5052 {
5153 "once every day" ,
5254 []string {"*-*-* 03:04" },
53- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00\+00:00 </StartBoundary>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
55+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
5456 1 ,
5557 time.Time {},
5658 },
5759 {
5860 "every hour" ,
5961 []string {"*-*-* *:04" },
60- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:04:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1H</Interval>\s*<Duration>PT23H</Duration>\s*</Repetition>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
62+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:04:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1H</Interval>\s*<Duration>PT23H</Duration>\s*</Repetition>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
6163 1 ,
6264 time.Time {},
6365 },
6466 {
6567 "every minute" ,
6668 []string {"*-*-* *:*" },
67- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>P1D</Duration>\s*</Repetition>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
69+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>P1D</Duration>\s*</Repetition>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
6870 1 ,
6971 time.Time {},
7072 },
7173 {
7274 "every minute at 12" ,
7375 []string {"*-*-* 12:*" },
74- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T12:\d{2}:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>PT59M</Duration>\s*</Repetition>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
76+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T12:\d{2}:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>PT59M</Duration>\s*</Repetition>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
7577 1 ,
7678 time.Time {},
7779 },
7880 // daily - more than one
7981 {
8082 "three times a day" ,
8183 []string {"*-*-* 03..05:04" },
82- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1H</Interval>\s*<Duration>PT2H</Duration>\s*</Repetition>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
84+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1H</Interval>\s*<Duration>PT2H</Duration>\s*</Repetition>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
8385 1 ,
8486 time.Time {},
8587 },
8688 {
8789 "twice every hour" ,
8890 []string {"*-*-* *:04..05" },
89- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:00\+00:00 </StartBoundary>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
91+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:00` + timezone + ` </StartBoundary>\s*<ScheduleByDay>\s*<DaysInterval>1</DaysInterval>\s*</ScheduleByDay>\s*</CalendarTrigger>` ,
9092 48 ,
9193 time.Time {},
9294 },
9395 // weekly
9496 {
9597 "once weekly" ,
9698 []string {"mon *-*-* 03:04" },
97- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00\+00:00 </StartBoundary>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
99+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
98100 1 ,
99101 time.Time {},
100102 },
101103 {
102104 "every hour on mondays" ,
103105 []string {strings .ToLower (fixedDay )[:3 ] + " *-*-* *:04" },
104- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:04:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1H</Interval>\s*<Duration>PT23H</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<` + fixedDay + `></` + fixedDay + `>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
106+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:04:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1H</Interval>\s*<Duration>PT23H</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<` + fixedDay + `></` + fixedDay + `>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
105107 1 ,
106108 time.Time {},
107109 },
108110 {
109111 "every minute on mondays" ,
110112 []string {strings .ToLower (fixedDay )[:3 ] + " *-*-* *:*" },
111- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>P1D</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<` + fixedDay + `></` + fixedDay + `>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
113+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>P1D</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<` + fixedDay + `></` + fixedDay + `>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
112114 1 ,
113115 time.Time {},
114116 },
115117 {
116118 "every minute at 12 on mondays" ,
117119 []string {"mon *-*-* 12:*" },
118- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T12:\d{2}:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>PT59M</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
120+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T12:\d{2}:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>PT59M</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
119121 1 ,
120122 time.Time {},
121123 },
122124 // more than once weekly
123125 {
124126 "twice weekly" ,
125127 []string {"mon *-*-* 03..04:04" },
126- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1H</Interval>\s*<Duration>PT1H</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
128+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1H</Interval>\s*<Duration>PT1H</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
127129 1 ,
128130 time.Time {},
129131 },
130132 {
131133 "twice mondays and tuesdays" ,
132134 []string {"mon,tue *-*-* 03:04..06" },
133- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00\+00:00 </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>PT2M</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<Monday></Monday>\s*<Tuesday></Tuesday>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
135+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T03:04:00` + timezone + ` </StartBoundary>\s*<Repetition>\s*<Interval>PT1M</Interval>\s*<Duration>PT2M</Duration>\s*</Repetition>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<Monday></Monday>\s*<Tuesday></Tuesday>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
134136 1 ,
135137 time.Time {},
136138 },
137139 {
138140 "twice on fixed day" ,
139141 []string {strings .ToLower (fixedDay )[:3 ] + " *-*-* *:04..05" },
140- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:00\+00:00 </StartBoundary>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<` + fixedDay + `></` + fixedDay + `>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
142+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:00` + timezone + ` </StartBoundary>\s*<ScheduleByWeek>\s*<WeeksInterval>1</WeeksInterval>\s*<DaysOfWeek>\s*<` + fixedDay + `></` + fixedDay + `>\s*</DaysOfWeek>\s*</ScheduleByWeek>\s*</CalendarTrigger>` ,
141143 48 ,
142144 time.Time {},
143145 },
144146 // monthly
145147 {
146148 "once monthly" ,
147149 []string {"*-01-* 03:04" },
148- `<CalendarTrigger>\s*<StartBoundary>\d{4}-01-\d{2}T03:04:00\+00:00 </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*<January></January>\s*</Months>\s*<DaysOfMonth>\s*` + generateEveryDayString () + `</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
150+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-01-\d{2}T03:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*<January></January>\s*</Months>\s*<DaysOfMonth>\s*` + generateEveryDayString () + `</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
149151 1 ,
150152 time.Time {},
151153 },
152154 {
153155 "every hour in january" ,
154156 []string {"*-01-* *:04" },
155- `<CalendarTrigger>\s*<StartBoundary>\d{4}-01-\d{2}T\d{2}:04:00\+00:00 </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*<January></January>\s*</Months>\s*<DaysOfMonth>\s*` + generateEveryDayString () + `</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
157+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-01-\d{2}T\d{2}:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*<January></January>\s*</Months>\s*<DaysOfMonth>\s*` + generateEveryDayString () + `</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
156158 24 ,
157159 time.Time {},
158160 },
159161 // monthly with weekdays
160162 {
161163 "mondays in January" ,
162164 []string {"mon *-01-* 03:04" },
163- `<CalendarTrigger>\s*<StartBoundary>\d{4}-01-\d{2}T03:04:00\+00:00 </StartBoundary>\s*<ScheduleByMonthDayOfWeek>\s*<Months>\s*<January></January>\s*</Months>\s*<Weeks>\s*<Week>1</Week>\s*<Week>2</Week>\s*<Week>3</Week>\s*<Week>4</Week>\s*<Week>Last</Week>\s*</Weeks>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByMonthDayOfWeek>\s*</CalendarTrigger>` ,
165+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-01-\d{2}T03:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByMonthDayOfWeek>\s*<Months>\s*<January></January>\s*</Months>\s*<Weeks>\s*<Week>1</Week>\s*<Week>2</Week>\s*<Week>3</Week>\s*<Week>4</Week>\s*<Week>Last</Week>\s*</Weeks>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByMonthDayOfWeek>\s*</CalendarTrigger>` ,
164166 1 ,
165167 time.Time {},
166168 },
167169 {
168170 "every hour on Mondays in january" ,
169171 []string {"mon *-01-* *:04" },
170- `<CalendarTrigger>\s*<StartBoundary>\d{4}-01-\d{2}T\d{2}:04:00\+00:00 </StartBoundary>\s*<ScheduleByMonthDayOfWeek>\s*<Months>\s*<January></January>\s*</Months>\s*<Weeks>\s*<Week>1</Week>\s*<Week>2</Week>\s*<Week>3</Week>\s*<Week>4</Week>\s*<Week>Last</Week>\s*</Weeks>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByMonthDayOfWeek>\s*</CalendarTrigger>` ,
172+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-01-\d{2}T\d{2}:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByMonthDayOfWeek>\s*<Months>\s*<January></January>\s*</Months>\s*<Weeks>\s*<Week>1</Week>\s*<Week>2</Week>\s*<Week>3</Week>\s*<Week>4</Week>\s*<Week>Last</Week>\s*</Weeks>\s*<DaysOfWeek>\s*<Monday></Monday>\s*</DaysOfWeek>\s*</ScheduleByMonthDayOfWeek>\s*</CalendarTrigger>` ,
171173 24 ,
172174 time.Time {},
173175 },
174176 // // some days every month
175177 {
176178 "one day per month" ,
177179 []string {"*-*-0" + dayOfTheMonth + " 03:04" },
178- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-0` + dayOfTheMonth + `T03:04:00\+00:00 </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*` + generateEveryMonthString () + `</Months>\s*<DaysOfMonth>\s*<Day>` + dayOfTheMonth + `</Day>\s*</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
180+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-0` + dayOfTheMonth + `T03:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*` + generateEveryMonthString () + `</Months>\s*<DaysOfMonth>\s*<Day>` + dayOfTheMonth + `</Day>\s*</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
179181 1 ,
180182 time.Time {},
181183 },
182184 {
183185 "every hour on the 1st of each month" ,
184186 []string {"*-*-0" + dayOfTheMonth + " *:04" },
185- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-0` + dayOfTheMonth + `T\d{2}:04:00\+00:00 </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*` + generateEveryMonthString () + `</Months>\s*<DaysOfMonth>\s*<Day>` + dayOfTheMonth + `</Day>\s*</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
187+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-0` + dayOfTheMonth + `T\d{2}:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*` + generateEveryMonthString () + `</Months>\s*<DaysOfMonth>\s*<Day>` + dayOfTheMonth + `</Day>\s*</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
186188 24 , // 1 per hour
187189 time.Time {},
188190 },
189191 // // more than once per month
190192 {
191193 "twice in one day per month" ,
192194 []string {"*-*-0" + dayOfTheMonth + " 03..04:04" },
193- `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-0` + dayOfTheMonth + `T\d{2}:04:00\+00:00 </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*` + generateEveryMonthString () + `</Months>\s*<DaysOfMonth>\s*<Day>` + dayOfTheMonth + `</Day>\s*</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
195+ `<CalendarTrigger>\s*<StartBoundary>\d{4}-\d{2}-0` + dayOfTheMonth + `T\d{2}:04:00` + timezone + ` </StartBoundary>\s*<ScheduleByMonth>\s*<Months>\s*` + generateEveryMonthString () + `</Months>\s*<DaysOfMonth>\s*<Day>` + dayOfTheMonth + `</Day>\s*</DaysOfMonth>\s*</ScheduleByMonth>\s*</CalendarTrigger>` ,
194196 2 ,
195197 time.Time {},
196198 },
@@ -219,6 +221,7 @@ func TestTriggerCreationFromXML(t *testing.T) {
219221 }
220222 buffer := & bytes.Buffer {}
221223 task := createTaskDefinition (scheduleConfig , schedules , fixture .from )
224+ taskInLocal (& task )
222225 err = createTaskFile (task , buffer )
223226 require .NoError (t , err )
224227
@@ -248,3 +251,19 @@ func generateEveryMonthString() string {
248251 }
249252 return everyMonth
250253}
254+
255+ func taskInLocal (task * Task ) {
256+ for i := range task .Triggers .TimeTrigger {
257+ if task .Triggers .TimeTrigger [i ].StartBoundary != nil {
258+ * task .Triggers .TimeTrigger [i ].StartBoundary = task .Triggers .TimeTrigger [i ].StartBoundary .Local ()
259+ }
260+ }
261+ for i := range task .Triggers .CalendarTrigger {
262+ if task .Triggers .CalendarTrigger [i ].StartBoundary != nil {
263+ * task .Triggers .CalendarTrigger [i ].StartBoundary = task .Triggers .CalendarTrigger [i ].StartBoundary .Local ()
264+ }
265+ if task .Triggers .CalendarTrigger [i ].EndBoundary != nil {
266+ * task .Triggers .CalendarTrigger [i ].EndBoundary = task .Triggers .CalendarTrigger [i ].EndBoundary .Local ()
267+ }
268+ }
269+ }
0 commit comments