Skip to content

Commit 4b359cb

Browse files
isidoreJayBazuziScottBob
committed
- F DateUtils.toString, EndOfTime, QuartzUtils.toString, Timestamp date format scrubber
Co-Authored-By: Jay Bazuzi <[email protected]> Co-Authored-By: Scott Wierschem <[email protected]>
1 parent 2bc7ee0 commit 4b359cb

File tree

10 files changed

+65
-37
lines changed

10 files changed

+65
-37
lines changed

.windsurf/UnitTestStyleGuide.process.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
### Dates, GUIDS and other non-deterministic values
1515

1616
If you are printing dates, guids, or any other non-deterministic values to an `.approved.` file.
17+
Always use the scrubbers provided by ApprovalTests.
1718
Please read [Scrubbers](../approvaltests/docs/Scrubbers.md) and add on Options to the Approvals.verify call.
1819

19-
Example:
20+
Either use Scrubbers or DateScrubber.
21+
#### Scrubbers Example:
2022

2123
```java
2224
Approvals.verifyAll("guids", guids, new Options(Scrubbers::scrubGuid));

approvaltests-tests/src/test/java/org/approvaltests/scrubbers/DateScrubberTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,7 @@ void supportedFormats()
6868
void textExamples()
6969
{
7070
String[] examples = """
71-
05/13/2014 11:50:49 PM
72-
2024-12-18T14:04:46-0500
73-
2025-07-17 14:58:02,123456
71+
2025-05-15 16:57:04.599
7472
""".split("\n");
7573
Approvals.verifyAll("Date scrubbing", examples, this::verifyScrubbing);
7674
}

approvaltests-tests/src/test/java/org/approvaltests/scrubbers/DateScrubberTest.supportedFormats.approved.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@
1919
| 2024-12-17 | \d{4}-\d{2}-\d{2} |
2020
| 2024-12-18T14:04:46.746130Z | \d{4}-\d{1,2}-\d{1,2}T\d{1,2}:\d{2}:\d{2}(\.\d{1,9})?Z |
2121
| 13/05/2014 23:50:49 | \d{2}[-/.]\d{2}[-/.]\d{4}\s\d{2}:\d{2}(:\d{2})?( (?:pm\|am\|PM\|AM))? |
22+
| 2025-05-15 16:57:04.599 | \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} |
2223

2324

approvaltests-tests/src/test/java/org/approvaltests/scrubbers/DateScrubberTest.testGetDateScrubber.approved.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,3 +136,8 @@ RegExScrubber[\d{2}[-/.]\d{2}[-/.]\d{4}\s\d{2}:\d{2}(:\d{2})?( (?:pm|am|PM|AM))?
136136
Example: {'date':"[Date1]"}
137137

138138

139+
Scrubbing for 2025-05-15 16:57:04.599:
140+
RegExScrubber[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}]
141+
Example: {'date':"[Date1]"}
142+
143+

approvaltests-tests/src/test/java/org/approvaltests/scrubbers/DateScrubberTest.textExamples.approved.txt

Whitespace-only changes.
Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,31 @@
11
package com.spun.util.quartz;
22

33
import org.approvaltests.Approvals;
4+
import org.approvaltests.core.Options;
5+
import org.approvaltests.scrubbers.DateScrubber;
46
import org.junit.jupiter.api.Test;
57
import org.quartz.JobKey;
68
import org.quartz.Trigger;
79
import org.quartz.impl.triggers.SimpleTriggerImpl;
810

9-
class QuartzUtilsTest {
10-
@Test
11-
void testCreateTrigger() {
12-
// Arrange
13-
SimpleTriggerImpl oldTrigger = new SimpleTriggerImpl();
14-
oldTrigger.setName("oldName");
15-
oldTrigger.setGroup("oldGroup");
16-
oldTrigger.setJobKey(new JobKey("jobName", "jobGroup"));
17-
18-
// Act
19-
Trigger newTrigger = QuartzUtils.createTrigger(oldTrigger, "testTriggerName", "testTriggerGroup");
20-
21-
// Verify
22-
String output = String.format(
23-
"Trigger:\n" +
24-
" Key: %s\n" +
25-
" Job Key: %s\n" +
26-
" Start Time: %s\n" +
27-
" End Time: %s",
28-
newTrigger.getKey(),
29-
newTrigger.getJobKey(),
30-
newTrigger.getStartTime(),
31-
newTrigger.getEndTime()
32-
);
33-
34-
Approvals.verify(output);
35-
}
36-
}
11+
class QuartzUtilsTest
12+
{
13+
@Test
14+
void testCreateTriggerFromTrigger()
15+
{
16+
var expected = """
17+
Trigger:
18+
Key: newGroup.newName
19+
Job Key: jobGroup.jobName
20+
Start Time: [Date1]
21+
End Time: <EndOfTime>
22+
""";
23+
SimpleTriggerImpl oldTrigger = new SimpleTriggerImpl();
24+
oldTrigger.setName("oldName");
25+
oldTrigger.setGroup("oldGroup");
26+
oldTrigger.setJobKey(new JobKey("jobName", "jobGroup"));
27+
Trigger newTrigger = QuartzUtils.createTrigger(oldTrigger, "newName", "newGroup");
28+
DateScrubber scrubber = DateScrubber.getScrubberFor("2025-05-15 16:57:04.599");
29+
Approvals.verify(QuartzUtils.toString(newTrigger), new Options().inline(expected).withScrubber(scrubber));
30+
}
31+
}

approvaltests-util-tests/src/test/java/com/spun/util/quartz/QuartzUtilsTest.testCreateTrigger.approved.txt

Lines changed: 0 additions & 4 deletions
This file was deleted.

approvaltests-util/src/main/java/com/spun/util/DateUtils.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,4 +294,27 @@ public static Calendar setTime(Calendar day, int hour, int minute)
294294
return new GregorianCalendar(day.get(Calendar.YEAR), day.get(Calendar.MONTH), day.get(Calendar.DAY_OF_MONTH),
295295
hour, minute);
296296
}
297+
public static boolean isEndOfTime(Date time)
298+
{
299+
return time.getTime() == Long.MAX_VALUE;
300+
}
301+
public static String toString(Date date)
302+
{
303+
if (date == null)
304+
{
305+
return "null";
306+
}
307+
else if (isEndOfTime(date))
308+
{
309+
return "<EndOfTime>";
310+
}
311+
else if (date.getTime() == 0)
312+
{
313+
return "<Epoch>";
314+
}
315+
else
316+
{
317+
return asTimestamp(date).toString();
318+
}
319+
}
297320
}

approvaltests-util/src/main/java/com/spun/util/quartz/QuartzUtils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.spun.util.quartz;
22

3+
import com.spun.util.DateUtils;
34
import org.quartz.Trigger;
45
import org.quartz.TriggerBuilder;
56

@@ -16,4 +17,9 @@ public static Trigger createTrigger(Trigger oldTrigger, String name, String defa
1617
.build();
1718
return newTrigger;
1819
}
20+
public static String toString(Trigger trigger)
21+
{
22+
return String.format("Trigger:\n Key: %s\n Job Key: %s\n Start Time: %s\n End Time: %s", trigger.getKey(),
23+
trigger.getJobKey(), DateUtils.toString(trigger.getStartTime()), DateUtils.toString(trigger.getEndTime()));
24+
}
1925
}

approvaltests/src/main/java/org/approvaltests/scrubbers/DateScrubber.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ public static SupportedFormat[] getSupportedFormats()
4646
"2024-12-18T14:04:46.746130834Z"),
4747
__("\\d{2}[-/.]\\d{2}[-/.]\\d{4}\\s\\d{2}:\\d{2}(:\\d{2})?( (?:pm|am|PM|AM))?",
4848
"13/05/2014 23:50:49", "13.05.2014 23:50:49", "13-05-2014 23:50:49",
49-
"13.05.2014 23:50", "05/13/2014 11:50:49 PM"),};
49+
"13.05.2014 23:50", "05/13/2014 11:50:49 PM"),
50+
__("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}",
51+
"2025-05-15 16:57:04.599"),};
5052
}
5153
private static SupportedFormat __(String regex, String... examples)
5254
{

0 commit comments

Comments
 (0)