Skip to content

Commit de573a7

Browse files
committed
Changed Between behaviour in EverydayUnit.
1 parent 47fe6a4 commit de573a7

File tree

2 files changed

+116
-129
lines changed

2 files changed

+116
-129
lines changed

FluentScheduler.UnitTests/Fluent/3.Duration/EverydayUnitTests.cs

Lines changed: 107 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -74,27 +74,26 @@ public void AtTimeSpan()
7474
public void AtMultipleTimeSpan()
7575
{
7676
// Arrange
77-
var now = new DateTime(2025, 8, 20, 10, 0, 0);
78-
var expected = new DateTime(2025, 8, 20, 15, 0, 0);
79-
8077
var timeSpans = new TimeSpan[] { new(15, 0, 0), new(16, 0, 0), new(17, 0, 0) };
78+
var now = new DateTime(2025, 8, 20, 10, 0, 0);
79+
var expected = new DateTime(2025, 8, 20).Add(timeSpans[0]);
8180

8281
var fluentCalculator = new FluentTimeCalculator();
8382
var calculator = (ITimeCalculator)fluentCalculator;
84-
var run = new EverydayUnit(fluentCalculator);
83+
var run = new RunSpecifier(fluentCalculator);
8584

8685
calculator.Now = () => now;
8786

8887
// Act
89-
run.At(timeSpans);
88+
run.Everyday().At(timeSpans);
9089
var calculated = calculator.Calculate(now)!;
9190

9291
// Assert
9392
Equal(expected, calculated.Value);
94-
93+
9594
// Arrange
9695
now = now.AddHours(5.1);
97-
expected = expected.AddHours(1);
96+
expected = expected.Date.Add(timeSpans[1]);
9897

9998
// Act
10099
calculated = calculator.Calculate(now)!;
@@ -104,7 +103,49 @@ public void AtMultipleTimeSpan()
104103

105104
// Arrange
106105
now = now.AddHours(1.1);
107-
expected = expected.AddHours(1);
106+
expected = expected.Date.Add(timeSpans[2]);
107+
108+
// Act
109+
calculated = calculator.Calculate(now)!;
110+
111+
// Assert
112+
Equal(expected, calculated.Value);
113+
114+
// Arrange
115+
now = now.AddHours(1.1);
116+
expected = new DateTime(2025, 8, 21, 15, 0, 0);
117+
118+
// Act
119+
calculated = calculator.Calculate(now)!;
120+
121+
// Assert
122+
Equal(expected, calculated.Value);
123+
}
124+
125+
[Fact]
126+
public void AtMultipleTimeSpan2()
127+
{
128+
// Arrange
129+
var timeSpans = new TimeSpan[] { new(15, 0, 0), new(16, 0, 0), new(17, 0, 0) };
130+
var now = new DateTime(2025, 8, 20, 15, 1, 0);
131+
var expected = new DateTime(2025, 8, 20).Add(timeSpans[1]);
132+
133+
var fluentCalculator = new FluentTimeCalculator();
134+
var calculator = (ITimeCalculator)fluentCalculator;
135+
var run = new RunSpecifier(fluentCalculator);
136+
137+
calculator.Now = () => now;
138+
139+
// Act
140+
run.Everyday().At(timeSpans);
141+
var calculated = calculator.Calculate(now)!;
142+
143+
// Assert
144+
Equal(expected, calculated.Value);
145+
146+
// Arrange
147+
now = now.AddHours(1.1);
148+
expected = expected.Date.Add(timeSpans[2]);
108149

109150
// Act
110151
calculated = calculator.Calculate(now)!;
@@ -158,14 +199,11 @@ public void AtMultipleNullTimeSpan()
158199
}
159200

160201
[Fact]
161-
public void Between17and19TimeSpan()
202+
public void EverydayAt15()
162203
{
163204
// Arrange
164-
var now = new DateTime(2025, 08, 24, 16, 30, 0);
165-
var expectedDate = new DateTime(2025, 08, 24, 17, 30, 0);
166-
167-
var from = new TimeSpan(17, 30, 0);
168-
var to = new TimeSpan(19, 30, 0);
205+
var now = new DateTime(2025, 08, 24, 14, 30, 0);
206+
var expectedDate = new DateTime(2025, 08, 24, 15, 0, 0);
169207

170208
var fluentCalculator = new FluentTimeCalculator();
171209
var calculator = (ITimeCalculator)fluentCalculator;
@@ -174,22 +212,28 @@ public void Between17and19TimeSpan()
174212
calculator.Now = () => now;
175213

176214
// Act
177-
run.Everyday().Between(from, to);
215+
run.Everyday().At(15, 0);
178216
var calculated = calculator.Calculate(now)!;
179217

180218
// Assert
181219
Equal(expectedDate, calculated.Value);
182-
}
183220

221+
now = expectedDate;
222+
223+
calculated = calculator.Calculate(expectedDate)!;
224+
225+
expectedDate = expectedDate.AddDays(1);
226+
227+
// Assert
228+
Equal(expectedDate, calculated.Value);
229+
}
230+
184231
[Fact]
185-
public void Between21and23TimeSpan()
232+
public void EverydayAt16()
186233
{
187234
// Arrange
188-
var now = new DateTime(2025, 8, 11, 23, 40, 0);
189-
var expectedDate = new DateTime(2025, 08, 12, 21, 30, 0);
190-
191-
var from = new TimeSpan(21, 30, 0);
192-
var to = new TimeSpan(23, 30, 0);
235+
var now = new DateTime(2025, 08, 24, 16, 0, 0);
236+
var expectedDate = new DateTime(2025, 08, 24, 16, 0, 0);
193237

194238
var fluentCalculator = new FluentTimeCalculator();
195239
var calculator = (ITimeCalculator)fluentCalculator;
@@ -198,23 +242,31 @@ public void Between21and23TimeSpan()
198242
calculator.Now = () => now;
199243

200244
// Act
201-
run.Everyday().Between(from, to);
202-
245+
run.Everyday().At(16, 0);
203246
var calculated = calculator.Calculate(now)!;
204247

205248
// Assert
206249
Equal(expectedDate, calculated.Value);
250+
251+
now = expectedDate;
252+
253+
calculated = calculator.Calculate(expectedDate)!;
254+
255+
expectedDate = expectedDate.AddDays(1);
256+
257+
// Assert
258+
Equal(expectedDate, calculated.Value);
207259
}
208260

209261
[Fact]
210-
public void Between19and22TimeSpan()
262+
public void Between17and19TimeSpan()
211263
{
212264
// Arrange
213-
var now = new DateTime(2025, 08, 19, 23, 50, 0);
214-
var expectedDate = new DateTime(2025, 08, 20, 19, 30, 0);
265+
var now = new DateTime(2025, 08, 24, 16, 30, 0);
266+
var expectedDate = new DateTime(2025, 08, 24, 17, 30, 0);
215267

216-
var from = new TimeSpan(19, 30, 0);
217-
var to = new TimeSpan(22, 30, 0);
268+
var from = new TimeSpan(17, 30, 0);
269+
var to = new TimeSpan(19, 30, 0);
218270

219271
var fluentCalculator = new FluentTimeCalculator();
220272
var calculator = (ITimeCalculator)fluentCalculator;
@@ -228,19 +280,28 @@ public void Between19and22TimeSpan()
228280

229281
// Assert
230282
Equal(expectedDate, calculated.Value);
283+
}
231284

232-
now = expectedDate.AddMinutes(5);
233-
expectedDate = now;
285+
[Fact]
286+
public void Between21and23TimeSpan()
287+
{
288+
// Arrange
289+
var now = new DateTime(2025, 09, 10, 23, 40, 0);
290+
var expectedDate = new DateTime(2025, 09, 10, 21, 30, 0);
234291

235-
calculated = calculator.Calculate(now)!;
292+
var from = new TimeSpan(21, 30, 0);
293+
var to = new TimeSpan(23, 30, 0);
236294

237-
// Assert
238-
Equal(expectedDate, calculated.Value);
295+
var fluentCalculator = new FluentTimeCalculator();
296+
var calculator = (ITimeCalculator)fluentCalculator;
297+
var run = new RunSpecifier(fluentCalculator);
298+
299+
calculator.Now = () => now;
239300

240-
now = new DateTime(2025, 08, 20).Add(to).AddMinutes(1);
241-
expectedDate = new DateTime(2025, 08, 21).Add(from);
301+
// Act
302+
run.Everyday().Between(from, to);
242303

243-
calculated = calculator.Calculate(now)!;
304+
var calculated = calculator.Calculate(now)!;
244305

245306
// Assert
246307
Equal(expectedDate, calculated.Value);
@@ -269,31 +330,8 @@ public void Between23and2TimeSpan()
269330
// Assert
270331
Equal(expectedDate, calculated.Value);
271332

272-
// Arrange
273-
now = now.AddHours(1);
274-
expectedDate = now;
275-
276-
// Act
277-
calculated = calculator.Calculate(now)!;
278-
279-
// Assert
280-
Equal(expectedDate, calculated.Value);
281-
282-
// Arrange
283-
now = now.AddHours(2);
284-
expectedDate = now;
333+
expectedDate = expectedDate.AddDays(1);
285334

286-
// Act
287-
calculated = calculator.Calculate(now)!;
288-
289-
// Assert
290-
Equal(expectedDate, calculated.Value);
291-
292-
// Arrange
293-
now = now.AddHours(6);
294-
expectedDate = new DateTime(2025, 08, 25, 23, 0, 0);
295-
296-
// Act
297335
calculated = calculator.Calculate(now)!;
298336

299337
// Assert
@@ -320,31 +358,8 @@ public void Between23and2()
320358
// Assert
321359
Equal(expectedDate, calculated.Value);
322360

323-
// Arrange
324-
now = now.AddHours(1);
325-
expectedDate = now;
361+
expectedDate = expectedDate.AddDays(1);
326362

327-
// Act
328-
calculated = calculator.Calculate(now)!;
329-
330-
// Assert
331-
Equal(expectedDate, calculated.Value);
332-
333-
// Arrange
334-
now = now.AddHours(2);
335-
expectedDate = now;
336-
337-
// Act
338-
calculated = calculator.Calculate(now)!;
339-
340-
// Assert
341-
Equal(expectedDate, calculated.Value);
342-
343-
// Arrange
344-
now = now.AddHours(6);
345-
expectedDate = new DateTime(2025, 08, 25, 23, 0, 0);
346-
347-
// Act
348363
calculated = calculator.Calculate(now)!;
349364

350365
// Assert
@@ -355,8 +370,8 @@ public void Between23and2()
355370
public void Between19and22()
356371
{
357372
// Arrange
358-
var now = new DateTime(2025, 08, 19, 23, 50, 0);
359-
var expectedDate = new DateTime(2025, 08, 20, 19, 30, 0);
373+
var now = new DateTime(2025, 08, 24, 20, 0, 0);
374+
var expectedDate = new DateTime(2025, 08, 24, 20, 0, 0);
360375

361376
var fluentCalculator = new FluentTimeCalculator();
362377
var calculator = (ITimeCalculator)fluentCalculator;
@@ -365,24 +380,22 @@ public void Between19and22()
365380
calculator.Now = () => now;
366381

367382
// Act
368-
run.Everyday().Between(19, 30, 22, 30);
383+
run.Everyday().Between(19, 0, 22, 0);
369384
var calculated = calculator.Calculate(now)!;
370385

371386
// Assert
372387
Equal(expectedDate, calculated.Value);
373388

374-
now = expectedDate.AddMinutes(5);
375-
expectedDate = now;
389+
calculated = calculator.Calculate(expectedDate)!;
376390

377-
calculated = calculator.Calculate(now)!;
391+
expectedDate = expectedDate.Date.AddDays(1).Add(new TimeSpan(19, 0, 0));
378392

379393
// Assert
380394
Equal(expectedDate, calculated.Value);
381395

382-
now = new DateTime(2025, 08, 20).Add(new TimeSpan(22, 30, 0)).AddMinutes(1);
383-
expectedDate = new DateTime(2025, 08, 21).Add(new TimeSpan(19, 30, 0));
396+
calculated = calculator.Calculate(expectedDate)!;
384397

385-
calculated = calculator.Calculate(now)!;
398+
expectedDate = expectedDate.AddDays(1);
386399

387400
// Assert
388401
Equal(expectedDate, calculated.Value);

FluentScheduler/Fluent/3.Duration/EverydayUnit.cs

Lines changed: 9 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ public void At(int hour, int minute)
2020
{
2121
ThrowHelper.ThrowIfOutOfMilitaryTimeRange(hour, minute);
2222

23-
_calculator.PeriodCalculations.Add(_ =>
23+
_calculator.PeriodCalculations.Add(last =>
2424
{
2525
ITimeCalculator timeCalculator = _calculator;
2626
var now = timeCalculator.Now();
2727

28-
var next = new DateTime(now.Year, now.Month, now.Day, hour, minute, 0);
28+
var next = new DateTime(last.Year, last.Month, last.Day, hour, minute, 0);
2929

3030
return now > next ? next.AddDays(1) : next;
3131
});
@@ -84,43 +84,17 @@ public void Between(TimeSpan from, TimeSpan to)
8484
throw new ArgumentException($"The parameters '{nameof(from)}' and '{nameof(to)}' must not be equal.");
8585

8686
_calculator.PeriodCalculations.Add(
87-
_ =>
87+
last =>
8888
{
89-
ITimeCalculator timeCalculator = _calculator;
90-
var now = timeCalculator.Now();
91-
92-
var doesNotCrossMidnight = from < to;
89+
var fromDate = new DateTime(last.Year, last.Month, last.Day).Add(from);
90+
var toDate = new DateTime(last.Year, last.Month, last.Day).Add(to);
91+
var now = ((ITimeCalculator)_calculator).Now();
9392

94-
DateTime next;
93+
var next = new DateTime(last.Year, last.Month, last.Day).Add(from);
9594

96-
if (doesNotCrossMidnight)
95+
if (now >= fromDate && now <= toDate)
9796
{
98-
var startToday = now.Date.Add(from);
99-
var endToday = now.Date.Add(to);
100-
101-
var nowBetweenStartAndEnd = now >= startToday && now < endToday;
102-
103-
if (nowBetweenStartAndEnd)
104-
next = now;
105-
else
106-
next = now < startToday ? startToday : startToday.AddDays(1);
107-
}
108-
else
109-
{
110-
var startYesterday = now.Date.AddDays(-1).Add(from);
111-
var endToday = now.Date.Add(to);
112-
113-
var startToday = now.Date.Add(from);
114-
var endTomorrow = now.Date.AddDays(1).Add(to);
115-
116-
var nowBetweenStartAndEnd =
117-
(now >= startYesterday && now < endToday) ||
118-
(now >= startToday && now < endTomorrow);
119-
120-
if (nowBetweenStartAndEnd)
121-
next = now;
122-
else
123-
next = now < startToday ? startToday : startToday.AddDays(1);
97+
next = now;
12498
}
12599

126100
return next;

0 commit comments

Comments
 (0)