Skip to content

Commit d4f6f59

Browse files
isidoreJayBazuziScottBob
committed
*** moving to quartz
Co-Authored-By: Jay Bazuzi <1259628+JayBazuzi@users.noreply.github.com> Co-Authored-By: Scott Wierschem <28421044+ScottBob@users.noreply.github.com>
1 parent 86d7dc8 commit d4f6f59

5 files changed

Lines changed: 70 additions & 10 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Unit Test Style Guide
2+
3+
## Approvals vs Asserts
4+
5+
* Preferable tests over multiple asserts.
6+
* Use toStrings and Printers. If the toString on an object is good, use it. If not, create a printing function either in the test or in production code and use that.

approvaltests-util-tests/pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@
2929
<artifactId>velocity-engine-core</artifactId>
3030
<version>2.4.1</version>
3131
</dependency>
32-
<dependency>
33-
<groupId>quartz</groupId>
34-
<artifactId>quartz</artifactId>
35-
<version>1.5.2</version>
36-
<optional>true</optional>
37-
</dependency>
3832
<dependency>
3933
<groupId>com.google.code.gson</groupId>
4034
<artifactId>gson</artifactId>
@@ -68,6 +62,12 @@
6862
<artifactId>approvaltests-util</artifactId>
6963
<version>${project.parent.version}</version>
7064
</dependency>
65+
<dependency>
66+
<groupId>org.quartz-scheduler</groupId>
67+
<artifactId>quartz</artifactId>
68+
<version>2.4.0</version>
69+
<scope>test</scope>
70+
</dependency>
7171
</dependencies>
7272

7373
<build>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.spun.util.quartz;
2+
3+
import org.approvaltests.Approvals;
4+
import org.junit.jupiter.api.Test;
5+
import org.quartz.JobKey;
6+
import org.quartz.Trigger;
7+
import org.quartz.impl.triggers.SimpleTriggerImpl;
8+
9+
import java.util.Date;
10+
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
import static org.junit.jupiter.api.Assertions.assertNotNull;
13+
import static org.junit.jupiter.api.Assertions.assertTrue;
14+
15+
class QuartzUtilsTest
16+
{
17+
@Test
18+
void testCreateTrigger()
19+
{
20+
// Arrange
21+
SimpleTriggerImpl oldTrigger = new SimpleTriggerImpl();
22+
oldTrigger.setName("oldName");
23+
oldTrigger.setGroup("oldGroup");
24+
// A JobKey is required for getTriggerBuilder() and for the trigger to be valid for scheduling with a scheduler
25+
oldTrigger.setJobKey(new JobKey("jobName", "jobGroup"));
26+
String newName = "testTriggerName";
27+
String newGroup = "testTriggerGroup";
28+
long beforeTime = System.currentTimeMillis();
29+
// Act
30+
Trigger newTrigger = QuartzUtils.createTrigger(oldTrigger, newName, newGroup);
31+
long afterTime = System.currentTimeMillis();
32+
// Assert
33+
assertNotNull(newTrigger, "New trigger should not be null");
34+
assertEquals(newName, newTrigger.getKey().getName(), "Trigger name should be updated");
35+
assertEquals(newGroup, newTrigger.getKey().getGroup(), "Trigger group should be updated");
36+
assertNotNull(newTrigger.getStartTime(), "Start time should be set");
37+
// Check if start time is within a small delta (e.g., 100ms) of the call time to account for execution time
38+
assertTrue(
39+
newTrigger.getStartTime().getTime() >= beforeTime
40+
&& newTrigger.getStartTime().getTime() <= afterTime + 100,
41+
"Start time should be approximately now. Expected between " + beforeTime + " and " + (afterTime + 100)
42+
+ " but was " + newTrigger.getStartTime().getTime());
43+
assertNotNull(newTrigger.getEndTime(), "End time should be set");
44+
assertEquals(new Date(Long.MAX_VALUE).getTime(), newTrigger.getEndTime().getTime(),
45+
"End time should be Long.MAX_VALUE");
46+
// Verify that the JobKey is carried over
47+
assertEquals(oldTrigger.getJobKey(), newTrigger.getJobKey(), "JobKey should be carried over from old trigger");
48+
// Use ApprovalTests to verify the trigger's key aspects
49+
Approvals.verify(String.format("Trigger Key: %s\nJob Key: %s\nStart Time: %s\nEnd Time: %s",
50+
newTrigger.getKey(), newTrigger.getJobKey(), newTrigger.getStartTime(), newTrigger.getEndTime()));
51+
}
52+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Trigger Key: testTriggerGroup.testTriggerName
2+
Job Key: jobGroup.jobName
3+
Start Time: Thu May 15 22:06:52 UTC 2025
4+
End Time: Sun Aug 17 07:12:55 UTC 292278994

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@ public class QuartzUtils
99
{
1010
public static Trigger createTrigger(Trigger oldTrigger, String name, String defaultGroup)
1111
{
12-
// Get a TriggerBuilder that is configured to produce a Trigger
13-
// identical to the oldTrigger one in terms of job, schedule type etc.
1412
TriggerBuilder<? extends Trigger> builder = oldTrigger.getTriggerBuilder();
15-
// Now, set the new identity (name and group) and start/end times
16-
Trigger newTrigger = builder.withIdentity(name, defaultGroup).startAt(new Date()) // Start immediately
13+
Trigger newTrigger = builder.withIdentity(name, defaultGroup) //
14+
.startAt(new Date()) // Start immediately
1715
.endAt(new Date(Long.MAX_VALUE)) // Effectively never ends
1816
.build();
1917
return newTrigger;

0 commit comments

Comments
 (0)