新增待办过期和历史归档任务

This commit is contained in:
jsowell
2026-07-17 18:06:21 +08:00
parent 09d98eb18d
commit b6b052b9df
9 changed files with 229 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
package com.jsowell.quartz.task;
import com.jsowell.system.domain.dto.TodoTaskMaintenanceResult;
import com.jsowell.system.service.TodoTaskMaintenanceService;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Field;
import java.util.Date;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
class TodoTaskMaintenanceTaskTest {
@Test
void maintain_shouldDelegateToMaintenanceService() {
TodoTaskMaintenanceService service = mock(TodoTaskMaintenanceService.class);
TodoTaskMaintenanceTask task = new TodoTaskMaintenanceTask();
setField(task, "todoTaskMaintenanceService", service);
when(service.maintain()).thenReturn(new TodoTaskMaintenanceResult(1, 2, new Date()));
task.maintain();
verify(service).maintain();
}
private static void setField(Object target, String fieldName, Object value) {
try {
Field field = TodoTaskMaintenanceTask.class.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(target, value);
} catch (Exception exception) {
throw new RuntimeException(exception);
}
}
}

View File

@@ -0,0 +1,51 @@
package com.jsowell.system.service;
import com.jsowell.system.domain.dto.TodoTaskMaintenanceResult;
import com.jsowell.system.mapper.SysTodoTaskMapper;
import com.jsowell.system.service.impl.TodoTaskMaintenanceServiceImpl;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import java.lang.reflect.Field;
import java.util.Date;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
class TodoTaskMaintenanceServiceImplTest {
@Test
void maintain_shouldExpireAndKeepAtLeast180Days() {
SysTodoTaskMapper mapper = mock(SysTodoTaskMapper.class);
TodoTaskMaintenanceServiceImpl service = new TodoTaskMaintenanceServiceImpl();
setField(service, "todoTaskMapper", mapper);
setField(service, "retentionDays", 30);
when(mapper.expireDueTasks(any(Date.class), any(String.class))).thenReturn(2);
when(mapper.archiveTerminalTasks(any(Date.class), any(String.class))).thenReturn(3);
TodoTaskMaintenanceResult result = service.maintain();
assertEquals(2, result.getExpiredCount());
assertEquals(3, result.getArchivedCount());
ArgumentCaptor<Date> nowCaptor = ArgumentCaptor.forClass(Date.class);
ArgumentCaptor<Date> archiveCaptor = ArgumentCaptor.forClass(Date.class);
verify(mapper).expireDueTasks(nowCaptor.capture(), any(String.class));
verify(mapper).archiveTerminalTasks(archiveCaptor.capture(), any(String.class));
long retentionDays = (nowCaptor.getValue().getTime() - archiveCaptor.getValue().getTime())
/ (24L * 60 * 60 * 1000);
assertTrue(retentionDays >= 179);
}
private static void setField(Object target, String fieldName, Object value) {
try {
Field field = TodoTaskMaintenanceServiceImpl.class.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(target, value);
} catch (Exception exception) {
throw new RuntimeException(exception);
}
}
}