task-reminder/src/test/java/com/zeodao/reminder/service/TaskReminderServiceTest.java
2025-05-28 11:08:07 +08:00

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());
}
}