Merge pull request #4 from joerghoh/bugfix/fix-CleanUpTest

SLING-11346 : merge from upstream
diff --git a/src/test/java/org/apache/sling/event/impl/jobs/tasks/CleanUpTest.java b/src/test/java/org/apache/sling/event/impl/jobs/tasks/CleanUpTest.java
index 4be8487..c729b7a 100644
--- a/src/test/java/org/apache/sling/event/impl/jobs/tasks/CleanUpTest.java
+++ b/src/test/java/org/apache/sling/event/impl/jobs/tasks/CleanUpTest.java
@@ -56,6 +56,8 @@
 import org.mockito.junit.MockitoJUnitRunner;
 import org.mockito.junit.MockitoRule;
 import org.mockito.quality.Strictness;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CleanUpTest {
@@ -141,15 +143,11 @@
 
     @Before
     public void setUp() {
-        // let's use a fixed calendar which we can fast-forward as needed
-        Calendar realCalendar = Calendar.getInstance();
-        clock = new DynamicClock(Clock.fixed(realCalendar.toInstant(), ZoneId.systemDefault()), null);
-
         setupConfiguration();
         setUpTask();
+        getCalendarInstance();
         createResource(JobManagerConfiguration.DEFAULT_REPOSITORY_PATH);
 
-        task.setClock(clock);
     }
     public static DefaultInstanceDescription createInstanceDescription(
             String instanceId, boolean isLocal, ClusterView clusterView) {
@@ -231,10 +229,19 @@
         return ctx.create().resource(rootPath);
     }
 
-    // new calendar based on the (test) clock
+    // new calendar based on current date
     private Calendar getCalendarInstance() {
+        Calendar cal = Calendar.getInstance();
+        return getCalendarInstance(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH),
+                cal.get(Calendar.HOUR),cal.get(Calendar.MINUTE));
+    }
+
+    // new calendar based on provided data
+    private Calendar getCalendarInstance(int year, int month, int day, int hour, int minute) {
         Calendar calendar = Calendar.getInstance();
-        calendar.setTimeInMillis(clock.millis());
+        calendar.set(year,month,day,hour,minute);
+        this.clock = new DynamicClock(Clock.fixed(calendar.toInstant(), ZoneId.systemDefault()), null);
+        task.setClock(clock);
         return calendar;
     }
 
@@ -390,7 +397,7 @@
 
     @Test
     public void testUnassignedSimple() throws PersistenceException {
-        Calendar calendar = getCalendarInstance();
+        Calendar calendar = getCalendarInstance(2022,4,17,17,30); // 2022 May 17, 17:30
         Resource job = createJobResourceForDate(UNASSIGNED_JOBS_JCR_PATH, calendar);
         calendar.add(Calendar.DAY_OF_YEAR,-1);
         createEmptyJobResourceForDate(UNASSIGNED_JOBS_JCR_PATH, calendar);
@@ -400,20 +407,33 @@
         // so let's simulate an hour
         simulate(60, Duration.ofMinutes(1));
 
-        // after the first run it will just have marked the folder for deletion, but not deleted, so counter is still the same
-        assertEquals(8, countFolders(UNASSIGNED_JOBS_JCR_PATH));
-
-        // simulate 72 hours
-        for( int i = 0; i < 72; i++) {
-            simulate(60, Duration.ofMinutes(1));
-        }
+        // after the first run it will just have marked the folder for deletion, but not deleted, 
+        // so counter is still the same
         assertEquals(8, countFolders(UNASSIGNED_JOBS_JCR_PATH));
 
         deleteResource(job);
 
+        // additional 72 hours
         for( int i = 0; i < 72; i++) {
             simulate(60, Duration.ofMinutes(1));
         }
-        assertEquals(4, countFolders(UNASSIGNED_JOBS_JCR_PATH));
+
+        assertEquals(4, countFolders(UNASSIGNED_JOBS_JCR_PATH)); // unassigned/test/2022/05
+    }
+
+    @Test
+    public void testUnassignedDec31() throws PersistenceException {
+        Calendar calendar = getCalendarInstance(2021,11,31,17,30); // 2021 Dec 31, 17:30
+        Resource job = createJobResourceForDate(UNASSIGNED_JOBS_JCR_PATH, calendar);
+        calendar.add(Calendar.DAY_OF_YEAR,-1);
+        createEmptyJobResourceForDate(UNASSIGNED_JOBS_JCR_PATH, calendar);
+        assertEquals(11, countFolders(UNASSIGNED_JOBS_JCR_PATH));
+        deleteResource(job);
+
+        // 72 hours later => now it's 2022
+        for( int i = 0; i < 72; i++) {
+            simulate(60, Duration.ofMinutes(1));
+        }
+        assertEquals(2, countFolders(UNASSIGNED_JOBS_JCR_PATH)); // unassigned/test
     }
 }