Ver código fonte

更新通知公告模块单测

budliang 4 anos atrás
pai
commit
ccba513f3b

+ 3 - 1
src/main/java/cn/iocoder/dashboard/modules/system/service/notice/impl/SysNoticeServiceImpl.java

@@ -9,6 +9,7 @@ import cn.iocoder.dashboard.modules.system.convert.notice.SysNoticeConvert;
 import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper;
 import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO;
 import cn.iocoder.dashboard.modules.system.service.notice.SysNoticeService;
+import com.google.common.annotations.VisibleForTesting;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -60,7 +61,8 @@ public class SysNoticeServiceImpl implements SysNoticeService {
         noticeMapper.deleteById(id);
     }
 
-    private void checkNoticeExists(Long id) {
+    @VisibleForTesting
+    public void checkNoticeExists(Long id) {
         if (id == null) {
             return;
         }

+ 73 - 20
src/test/java/cn/iocoder/dashboard/modules/system/service/notice/SysNoticeServiceImplTest.java

@@ -1,49 +1,85 @@
 package cn.iocoder.dashboard.modules.system.service.notice;
 
-import cn.iocoder.dashboard.BaseSpringBootUnitTest;
+import cn.iocoder.dashboard.BaseDbUnitTest;
 import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
+import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticeCreateReqVO;
+import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticePageReqVO;
 import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticeUpdateReqVO;
 import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO;
 import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper;
 import cn.iocoder.dashboard.modules.system.enums.notice.SysNoticeTypeEnum;
+import cn.iocoder.dashboard.modules.system.service.notice.impl.SysNoticeServiceImpl;
+import cn.iocoder.dashboard.util.object.ObjectUtils;
 import org.junit.jupiter.api.Test;
+import org.springframework.context.annotation.Import;
 
 import javax.annotation.Resource;
 
 import java.util.function.Consumer;
 
 import static cn.hutool.core.util.RandomUtil.randomEle;
+import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND;
 import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
+import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException;
+import static cn.iocoder.dashboard.util.RandomUtils.randomLongId;
 import static cn.iocoder.dashboard.util.RandomUtils.randomPojo;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.*;
 
-
-class SysNoticeServiceImplTest extends BaseSpringBootUnitTest {
+@Import(SysNoticeServiceImpl.class)
+class SysNoticeServiceImplTest extends BaseDbUnitTest {
 
     @Resource
-    private SysNoticeService sysNoticeService;
+    private SysNoticeServiceImpl sysNoticeService;
 
     @Resource
     private SysNoticeMapper sysNoticeMapper;
 
     @Test
-    void testPageNotices_success() {
-        // todo: 待更新
+    public void testPageNotices_success() {
+        // 插入前置数据
+        SysNoticeDO dbNotice = randomPojo(SysNoticeDO.class, o -> {
+            o.setTitle("尼古拉斯赵四来啦!");
+            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
+            o.setType(randomEle(SysNoticeTypeEnum.values()).getType());
+        });
+        sysNoticeMapper.insert(dbNotice);
+
+        // 测试 title 不匹配
+        sysNoticeMapper.insert(ObjectUtils.clone(dbNotice, o -> o.setTitle("尼古拉斯凯奇也来啦!")));
+        // 测试 status 不匹配
+        sysNoticeMapper.insert(ObjectUtils.clone(dbNotice, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
+
+
+        // 查询
+        SysNoticePageReqVO reqVO = new SysNoticePageReqVO();
+        reqVO.setTitle("尼古拉斯赵四来啦!");
+        reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
+        PageResult<SysNoticeDO> pageResult = sysNoticeService.pageNotices(reqVO);
+
+        // 验证查询结果经过筛选
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbNotice, pageResult.getList().get(0));
+
     }
 
     @Test
-    void testGetNotice_success() {
+    public void testGetNotice_success() {
         // 插入前置数据
-        int noticeId = sysNoticeMapper.insert(randomSysNoticeDO());
+        SysNoticeDO dbNotice = randomSysNoticeDO();
+        sysNoticeMapper.insert(dbNotice);
 
         // 查询
-        assertNotNull(sysNoticeService.getNotice(new Long(noticeId)));
+        SysNoticeDO notice = sysNoticeService.getNotice(dbNotice.getId());
+
+        // 验证插入与读取对象是否一致
+        assertNotNull(notice);
+        assertPojoEquals(dbNotice, notice);
     }
 
     @Test
-    void testCreateNotice_success() {
+    public void testCreateNotice_success() {
         // 准备参数
         SysNoticeCreateReqVO reqVO = randomSysNoticeCreateReqVO();
 
@@ -57,31 +93,48 @@ class SysNoticeServiceImplTest extends BaseSpringBootUnitTest {
     }
 
     @Test
-    void testUpdateNotice_success() {
+    public void testUpdateNotice_success() {
         // 插入前置数据
-        int noticeId = sysNoticeMapper.insert(randomSysNoticeDO());
+        SysNoticeDO dbNoticeDO = randomSysNoticeDO();
+        sysNoticeMapper.insert(dbNoticeDO);
 
         // 准备更新参数
-        SysNoticeUpdateReqVO reqVO = randomSysNoticeUpdateReqVO(o -> o.setId(new Long(noticeId)));
+        SysNoticeUpdateReqVO reqVO = randomSysNoticeUpdateReqVO(o -> o.setId(dbNoticeDO.getId()));
 
         // 更新
         sysNoticeService.updateNotice(reqVO);
 
         // 检验是否更新成功
-        SysNoticeDO notice = sysNoticeMapper.selectById(noticeId);
+        SysNoticeDO notice = sysNoticeMapper.selectById(reqVO.getId());
         assertPojoEquals(reqVO, notice);
     }
 
     @Test
-    void testDeleteNotice_success() {
+    public void testDeleteNotice_success() {
         // 插入前置数据
-        int noticeId = sysNoticeMapper.insert(randomSysNoticeDO());
+        SysNoticeDO dbNotice = randomSysNoticeDO();
+        sysNoticeMapper.insert(dbNotice);
 
         // 删除
-        sysNoticeService.deleteNotice(new Long(noticeId));
+        sysNoticeService.deleteNotice(dbNotice.getId());
 
         // 检查是否删除成功
-        assertNull(sysNoticeMapper.selectById(noticeId));
+        assertNull(sysNoticeMapper.selectById(dbNotice.getId()));
+    }
+
+    @Test
+    public void checkNoticeExists_success() {
+        // 插入前置数据
+        SysNoticeDO dbNotice = randomSysNoticeDO();
+        sysNoticeMapper.insert(dbNotice);
+
+        // 成功调用
+        sysNoticeService.checkNoticeExists(dbNotice.getId());
+    }
+
+    @Test
+    public void checkNoticeExists_noExists() {
+        assertServiceException(() -> sysNoticeService.checkNoticeExists(randomLongId()), NOTICE_NOT_FOUND);
     }
 
     @SafeVarargs

+ 15 - 0
src/test/resources/sql/create_tables.sql

@@ -129,3 +129,18 @@ CREATE TABLE `sys_user_session` (
     "deleted" bit NOT NULL DEFAULT FALSE,
     PRIMARY KEY (`id`)
 ) COMMENT '用户在线 Session';
+
+CREATE TABLE IF NOT EXISTS "sys_notice" (
+	"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+	"title" varchar(50) NOT NULL COMMENT '公告标题',
+	"content" text NOT NULL COMMENT '公告内容',
+	"notice_type" tinyint NOT NULL COMMENT '公告类型(1通知 2公告)',
+	"status" tinyint NOT NULL DEFAULT '0' COMMENT '公告状态(0正常 1关闭)',
+	"creator" varchar(64) DEFAULT '' COMMENT '创建者',
+	"create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+	"updater" varchar(64) DEFAULT '' COMMENT '更新者',
+	"update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+	"deleted" bit NOT NULL DEFAULT 0 COMMENT '是否删除',
+	PRIMARY KEY("id")
+) COMMENT '通知公告表';
+