175 lines
6.3 KiB
Java
175 lines
6.3 KiB
Java
package com.zeodao.reminder.service;
|
|
|
|
import com.zeodao.reminder.config.TaskReminderConfig;
|
|
import com.zeodao.reminder.util.HolidayUtil;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
import org.mockito.InjectMocks;
|
|
import org.mockito.Mock;
|
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
|
import java.time.LocalDate;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.ArgumentMatchers.anyString;
|
|
import static org.mockito.ArgumentMatchers.eq;
|
|
import static org.mockito.Mockito.*;
|
|
|
|
/**
|
|
* 任务提醒服务测试类
|
|
*
|
|
* @author Zeodao
|
|
* @version 2.0.0
|
|
*/
|
|
@ExtendWith(MockitoExtension.class)
|
|
class TaskReminderServiceTest {
|
|
|
|
@Mock
|
|
private WechatWebhookService wechatWebhookService;
|
|
|
|
@Mock
|
|
private HolidayUtil holidayUtil;
|
|
|
|
@Mock
|
|
private TaskReminderConfig taskReminderConfig;
|
|
|
|
@InjectMocks
|
|
private TaskReminderService taskReminderService;
|
|
|
|
private TaskReminderConfig.Group testGroup;
|
|
|
|
@BeforeEach
|
|
void setUp() {
|
|
// 创建测试群组配置
|
|
testGroup = new TaskReminderConfig.Group();
|
|
testGroup.setId("test-group");
|
|
testGroup.setName("测试群组");
|
|
testGroup.setEnabled(true);
|
|
|
|
TaskReminderConfig.Webhook webhook = new TaskReminderConfig.Webhook();
|
|
webhook.setUrl("https://test.webhook.url");
|
|
testGroup.setWebhook(webhook);
|
|
|
|
Map<String, TaskReminderConfig.Schedule> schedules = new HashMap<>();
|
|
|
|
TaskReminderConfig.Schedule morningSchedule = new TaskReminderConfig.Schedule();
|
|
morningSchedule.setTime("0 0 9 * * MON-FRI");
|
|
morningSchedule.setMessage("测试早上消息");
|
|
schedules.put("morning", morningSchedule);
|
|
|
|
TaskReminderConfig.Schedule eveningSchedule = new TaskReminderConfig.Schedule();
|
|
eveningSchedule.setTime("0 30 17 * * MON-FRI");
|
|
eveningSchedule.setMessage("测试晚上消息");
|
|
schedules.put("evening", eveningSchedule);
|
|
|
|
testGroup.setSchedules(schedules);
|
|
}
|
|
|
|
@Test
|
|
void testSendReminderOnWorkday() {
|
|
// 模拟工作日
|
|
when(holidayUtil.isWeekend(any(LocalDate.class))).thenReturn(false);
|
|
when(holidayUtil.isHoliday(any(LocalDate.class))).thenReturn(false);
|
|
when(taskReminderConfig.getGroupById("test-group")).thenReturn(testGroup);
|
|
when(wechatWebhookService.createTaskReminderMessage(anyString(), anyString(), anyString())).thenReturn("测试消息");
|
|
when(wechatWebhookService.sendMarkdownMessage(anyString(), anyString())).thenReturn(true);
|
|
|
|
// 执行测试
|
|
taskReminderService.sendReminder("test-group", "morning");
|
|
|
|
// 验证
|
|
verify(wechatWebhookService, times(1)).sendMarkdownMessage(eq("test-group"), anyString());
|
|
}
|
|
|
|
@Test
|
|
void testSendReminderOnWeekend() {
|
|
// 模拟周末
|
|
when(holidayUtil.isWeekend(any(LocalDate.class))).thenReturn(true);
|
|
|
|
// 执行测试
|
|
taskReminderService.sendReminder("test-group", "morning");
|
|
|
|
// 验证不发送消息
|
|
verify(wechatWebhookService, never()).sendMarkdownMessage(anyString(), anyString());
|
|
}
|
|
|
|
@Test
|
|
void testSendReminderOnHoliday() {
|
|
// 模拟节假日(不是周末,但是节假日)
|
|
when(holidayUtil.isWeekend(any(LocalDate.class))).thenReturn(false);
|
|
when(holidayUtil.isHoliday(any(LocalDate.class))).thenReturn(true);
|
|
|
|
// 执行测试
|
|
taskReminderService.sendReminder("test-group", "morning");
|
|
|
|
// 验证不发送消息
|
|
verify(wechatWebhookService, never()).sendMarkdownMessage(anyString(), anyString());
|
|
// 验证两个方法都被调用了
|
|
verify(holidayUtil, times(1)).isWeekend(any(LocalDate.class));
|
|
verify(holidayUtil, times(1)).isHoliday(any(LocalDate.class));
|
|
}
|
|
|
|
@Test
|
|
void testSendAllMorningReminders() {
|
|
// 模拟工作日
|
|
when(holidayUtil.isWeekend(any(LocalDate.class))).thenReturn(false);
|
|
when(holidayUtil.isHoliday(any(LocalDate.class))).thenReturn(false);
|
|
when(taskReminderConfig.getEnabledGroups()).thenReturn(Arrays.asList(testGroup));
|
|
when(taskReminderConfig.getGroupById("test-group")).thenReturn(testGroup);
|
|
when(wechatWebhookService.createTaskReminderMessage(anyString(), anyString(), anyString())).thenReturn("测试消息");
|
|
when(wechatWebhookService.sendMarkdownMessage(anyString(), anyString())).thenReturn(true);
|
|
|
|
// 执行测试
|
|
taskReminderService.sendAllMorningReminders();
|
|
|
|
// 验证
|
|
verify(wechatWebhookService, times(1)).sendMarkdownMessage(eq("test-group"), anyString());
|
|
}
|
|
|
|
@Test
|
|
void testSendAllEveningReminders() {
|
|
// 模拟工作日
|
|
when(holidayUtil.isWeekend(any(LocalDate.class))).thenReturn(false);
|
|
when(holidayUtil.isHoliday(any(LocalDate.class))).thenReturn(false);
|
|
when(taskReminderConfig.getEnabledGroups()).thenReturn(Arrays.asList(testGroup));
|
|
when(taskReminderConfig.getGroupById("test-group")).thenReturn(testGroup);
|
|
when(wechatWebhookService.createTaskReminderMessage(anyString(), anyString(), anyString())).thenReturn("测试消息");
|
|
when(wechatWebhookService.sendMarkdownMessage(anyString(), anyString())).thenReturn(true);
|
|
|
|
// 执行测试
|
|
taskReminderService.sendAllEveningReminders();
|
|
|
|
// 验证
|
|
verify(wechatWebhookService, times(1)).sendMarkdownMessage(eq("test-group"), anyString());
|
|
}
|
|
|
|
@Test
|
|
void testSendReminderWithInvalidGroup() {
|
|
// 模拟群组不存在
|
|
when(taskReminderConfig.getGroupById("invalid-group")).thenReturn(null);
|
|
|
|
// 执行测试
|
|
taskReminderService.sendReminder("invalid-group", "morning");
|
|
|
|
// 验证不发送消息
|
|
verify(wechatWebhookService, never()).sendMarkdownMessage(anyString(), anyString());
|
|
}
|
|
|
|
@Test
|
|
void testSendReminderWithDisabledGroup() {
|
|
// 创建禁用的群组
|
|
testGroup.setEnabled(false);
|
|
when(taskReminderConfig.getGroupById("test-group")).thenReturn(testGroup);
|
|
|
|
// 执行测试
|
|
taskReminderService.sendReminder("test-group", "morning");
|
|
|
|
// 验证不发送消息
|
|
verify(wechatWebhookService, never()).sendMarkdownMessage(anyString(), anyString());
|
|
}
|
|
}
|