智慧水务管理系统 - 精河县供水工程综合管理平台

AnnouncementServiceTest.java 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package com.water.config;
  2. import com.water.common.core.exception.BusinessException;
  3. import com.water.config.entity.Announcement;
  4. import com.water.config.mapper.AnnouncementMapper;
  5. import com.water.config.service.AnnouncementService;
  6. import org.junit.jupiter.api.BeforeEach;
  7. import org.junit.jupiter.api.Test;
  8. import org.junit.jupiter.api.extension.ExtendWith;
  9. import org.mockito.InjectMocks;
  10. import org.mockito.Mock;
  11. import org.mockito.junit.jupiter.MockitoExtension;
  12. import static org.junit.jupiter.api.Assertions.*;
  13. import static org.mockito.ArgumentMatchers.any;
  14. import static org.mockito.Mockito.*;
  15. @ExtendWith(MockitoExtension.class)
  16. class AnnouncementServiceTest {
  17. @Mock
  18. private AnnouncementMapper announcementMapper;
  19. @InjectMocks
  20. private AnnouncementService announcementService;
  21. private Announcement draft;
  22. @BeforeEach
  23. void setUp() {
  24. draft = new Announcement();
  25. draft.setTitle("系统维护通知");
  26. draft.setContent("今晚22:00-次日06:00系统维护");
  27. draft.setType(2);
  28. draft.setChannels("[\"site\",\"sms\"]");
  29. }
  30. @Test
  31. void createAnnouncement_setsDraftStatus() {
  32. when(announcementMapper.insert(any())).thenReturn(1);
  33. Announcement result = announcementService.createAnnouncement(draft);
  34. assertEquals(0, result.getPublishStatus());
  35. verify(announcementMapper).insert(any(Announcement.class));
  36. }
  37. @Test
  38. void publish_draft_success() {
  39. Announcement existing = new Announcement();
  40. existing.setId(1L);
  41. existing.setPublishStatus(0);
  42. existing.setChannels("[\"site\"]");
  43. when(announcementMapper.selectById(1L)).thenReturn(existing);
  44. when(announcementMapper.updateById(any())).thenReturn(1);
  45. assertDoesNotThrow(() -> announcementService.publish(1L));
  46. verify(announcementMapper).updateById(argThat(a ->
  47. a.getPublishStatus() == 1 && a.getPublishTime() != null));
  48. }
  49. @Test
  50. void publish_alreadyPublished_throws() {
  51. Announcement existing = new Announcement();
  52. existing.setId(1L);
  53. existing.setPublishStatus(1);
  54. when(announcementMapper.selectById(1L)).thenReturn(existing);
  55. BusinessException ex = assertThrows(BusinessException.class,
  56. () -> announcementService.publish(1L));
  57. assertEquals("只有草稿状态的公告可以发布", ex.getMessage());
  58. }
  59. @Test
  60. void withdraw_notPublished_throws() {
  61. Announcement existing = new Announcement();
  62. existing.setId(1L);
  63. existing.setPublishStatus(0);
  64. when(announcementMapper.selectById(1L)).thenReturn(existing);
  65. BusinessException ex = assertThrows(BusinessException.class,
  66. () -> announcementService.withdraw(1L));
  67. assertEquals("只有已发布的公告可以撤回", ex.getMessage());
  68. }
  69. @Test
  70. void delete_published_throws() {
  71. Announcement existing = new Announcement();
  72. existing.setId(1L);
  73. existing.setPublishStatus(1);
  74. when(announcementMapper.selectById(1L)).thenReturn(existing);
  75. BusinessException ex = assertThrows(BusinessException.class,
  76. () -> announcementService.deleteAnnouncement(1L));
  77. assertEquals("已发布的公告不可删除,请先撤回", ex.getMessage());
  78. }
  79. @Test
  80. void getAnnouncementStats_aggregatesByStatus() {
  81. when(announcementMapper.selectCount(any())).thenReturn(5L);
  82. java.util.Map<String, Object> stats = announcementService.getAnnouncementStats();
  83. assertEquals(5L, stats.get("total"));
  84. assertEquals(5L, stats.get("draft"));
  85. assertEquals(5L, stats.get("published"));
  86. assertEquals(5L, stats.get("withdrawn"));
  87. }
  88. }