Commit ccba513f3bcfb4ec64029c810e2641f7795f4431

Authored by budliang
1 parent 72422ad2

更新通知公告模块单测

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; @@ -9,6 +9,7 @@ import cn.iocoder.dashboard.modules.system.convert.notice.SysNoticeConvert;
9 import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper; 9 import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper;
10 import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO; 10 import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO;
11 import cn.iocoder.dashboard.modules.system.service.notice.SysNoticeService; 11 import cn.iocoder.dashboard.modules.system.service.notice.SysNoticeService;
  12 +import com.google.common.annotations.VisibleForTesting;
12 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
13 14
14 import javax.annotation.Resource; 15 import javax.annotation.Resource;
@@ -60,7 +61,8 @@ public class SysNoticeServiceImpl implements SysNoticeService { @@ -60,7 +61,8 @@ public class SysNoticeServiceImpl implements SysNoticeService {
60 noticeMapper.deleteById(id); 61 noticeMapper.deleteById(id);
61 } 62 }
62 63
63 - private void checkNoticeExists(Long id) { 64 + @VisibleForTesting
  65 + public void checkNoticeExists(Long id) {
64 if (id == null) { 66 if (id == null) {
65 return; 67 return;
66 } 68 }
src/test/java/cn/iocoder/dashboard/modules/system/service/notice/SysNoticeServiceImplTest.java
1 package cn.iocoder.dashboard.modules.system.service.notice; 1 package cn.iocoder.dashboard.modules.system.service.notice;
2 2
3 -import cn.iocoder.dashboard.BaseSpringBootUnitTest; 3 +import cn.iocoder.dashboard.BaseDbUnitTest;
4 import cn.iocoder.dashboard.common.enums.CommonStatusEnum; 4 import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
  5 +import cn.iocoder.dashboard.common.pojo.PageResult;
5 import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticeCreateReqVO; 6 import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticeCreateReqVO;
  7 +import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticePageReqVO;
6 import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticeUpdateReqVO; 8 import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticeUpdateReqVO;
7 import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO; 9 import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO;
8 import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper; 10 import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper;
9 import cn.iocoder.dashboard.modules.system.enums.notice.SysNoticeTypeEnum; 11 import cn.iocoder.dashboard.modules.system.enums.notice.SysNoticeTypeEnum;
  12 +import cn.iocoder.dashboard.modules.system.service.notice.impl.SysNoticeServiceImpl;
  13 +import cn.iocoder.dashboard.util.object.ObjectUtils;
10 import org.junit.jupiter.api.Test; 14 import org.junit.jupiter.api.Test;
  15 +import org.springframework.context.annotation.Import;
11 16
12 import javax.annotation.Resource; 17 import javax.annotation.Resource;
13 18
14 import java.util.function.Consumer; 19 import java.util.function.Consumer;
15 20
16 import static cn.hutool.core.util.RandomUtil.randomEle; 21 import static cn.hutool.core.util.RandomUtil.randomEle;
  22 +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND;
17 import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; 23 import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
  24 +import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException;
  25 +import static cn.iocoder.dashboard.util.RandomUtils.randomLongId;
18 import static cn.iocoder.dashboard.util.RandomUtils.randomPojo; 26 import static cn.iocoder.dashboard.util.RandomUtils.randomPojo;
19 -import static org.junit.jupiter.api.Assertions.assertNotNull;  
20 -import static org.junit.jupiter.api.Assertions.assertNull; 27 +import static org.junit.jupiter.api.Assertions.*;
21 28
22 -  
23 -class SysNoticeServiceImplTest extends BaseSpringBootUnitTest { 29 +@Import(SysNoticeServiceImpl.class)
  30 +class SysNoticeServiceImplTest extends BaseDbUnitTest {
24 31
25 @Resource 32 @Resource
26 - private SysNoticeService sysNoticeService; 33 + private SysNoticeServiceImpl sysNoticeService;
27 34
28 @Resource 35 @Resource
29 private SysNoticeMapper sysNoticeMapper; 36 private SysNoticeMapper sysNoticeMapper;
30 37
31 @Test 38 @Test
32 - void testPageNotices_success() {  
33 - // todo: 待更新 39 + public void testPageNotices_success() {
  40 + // 插入前置数据
  41 + SysNoticeDO dbNotice = randomPojo(SysNoticeDO.class, o -> {
  42 + o.setTitle("尼古拉斯赵四来啦!");
  43 + o.setStatus(CommonStatusEnum.ENABLE.getStatus());
  44 + o.setType(randomEle(SysNoticeTypeEnum.values()).getType());
  45 + });
  46 + sysNoticeMapper.insert(dbNotice);
  47 +
  48 + // 测试 title 不匹配
  49 + sysNoticeMapper.insert(ObjectUtils.clone(dbNotice, o -> o.setTitle("尼古拉斯凯奇也来啦!")));
  50 + // 测试 status 不匹配
  51 + sysNoticeMapper.insert(ObjectUtils.clone(dbNotice, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
  52 +
  53 +
  54 + // 查询
  55 + SysNoticePageReqVO reqVO = new SysNoticePageReqVO();
  56 + reqVO.setTitle("尼古拉斯赵四来啦!");
  57 + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
  58 + PageResult<SysNoticeDO> pageResult = sysNoticeService.pageNotices(reqVO);
  59 +
  60 + // 验证查询结果经过筛选
  61 + assertEquals(1, pageResult.getTotal());
  62 + assertEquals(1, pageResult.getList().size());
  63 + assertPojoEquals(dbNotice, pageResult.getList().get(0));
  64 +
34 } 65 }
35 66
36 @Test 67 @Test
37 - void testGetNotice_success() { 68 + public void testGetNotice_success() {
38 // 插入前置数据 69 // 插入前置数据
39 - int noticeId = sysNoticeMapper.insert(randomSysNoticeDO()); 70 + SysNoticeDO dbNotice = randomSysNoticeDO();
  71 + sysNoticeMapper.insert(dbNotice);
40 72
41 // 查询 73 // 查询
42 - assertNotNull(sysNoticeService.getNotice(new Long(noticeId))); 74 + SysNoticeDO notice = sysNoticeService.getNotice(dbNotice.getId());
  75 +
  76 + // 验证插入与读取对象是否一致
  77 + assertNotNull(notice);
  78 + assertPojoEquals(dbNotice, notice);
43 } 79 }
44 80
45 @Test 81 @Test
46 - void testCreateNotice_success() { 82 + public void testCreateNotice_success() {
47 // 准备参数 83 // 准备参数
48 SysNoticeCreateReqVO reqVO = randomSysNoticeCreateReqVO(); 84 SysNoticeCreateReqVO reqVO = randomSysNoticeCreateReqVO();
49 85
@@ -57,31 +93,48 @@ class SysNoticeServiceImplTest extends BaseSpringBootUnitTest { @@ -57,31 +93,48 @@ class SysNoticeServiceImplTest extends BaseSpringBootUnitTest {
57 } 93 }
58 94
59 @Test 95 @Test
60 - void testUpdateNotice_success() { 96 + public void testUpdateNotice_success() {
61 // 插入前置数据 97 // 插入前置数据
62 - int noticeId = sysNoticeMapper.insert(randomSysNoticeDO()); 98 + SysNoticeDO dbNoticeDO = randomSysNoticeDO();
  99 + sysNoticeMapper.insert(dbNoticeDO);
63 100
64 // 准备更新参数 101 // 准备更新参数
65 - SysNoticeUpdateReqVO reqVO = randomSysNoticeUpdateReqVO(o -> o.setId(new Long(noticeId))); 102 + SysNoticeUpdateReqVO reqVO = randomSysNoticeUpdateReqVO(o -> o.setId(dbNoticeDO.getId()));
66 103
67 // 更新 104 // 更新
68 sysNoticeService.updateNotice(reqVO); 105 sysNoticeService.updateNotice(reqVO);
69 106
70 // 检验是否更新成功 107 // 检验是否更新成功
71 - SysNoticeDO notice = sysNoticeMapper.selectById(noticeId); 108 + SysNoticeDO notice = sysNoticeMapper.selectById(reqVO.getId());
72 assertPojoEquals(reqVO, notice); 109 assertPojoEquals(reqVO, notice);
73 } 110 }
74 111
75 @Test 112 @Test
76 - void testDeleteNotice_success() { 113 + public void testDeleteNotice_success() {
77 // 插入前置数据 114 // 插入前置数据
78 - int noticeId = sysNoticeMapper.insert(randomSysNoticeDO()); 115 + SysNoticeDO dbNotice = randomSysNoticeDO();
  116 + sysNoticeMapper.insert(dbNotice);
79 117
80 // 删除 118 // 删除
81 - sysNoticeService.deleteNotice(new Long(noticeId)); 119 + sysNoticeService.deleteNotice(dbNotice.getId());
82 120
83 // 检查是否删除成功 121 // 检查是否删除成功
84 - assertNull(sysNoticeMapper.selectById(noticeId)); 122 + assertNull(sysNoticeMapper.selectById(dbNotice.getId()));
  123 + }
  124 +
  125 + @Test
  126 + public void checkNoticeExists_success() {
  127 + // 插入前置数据
  128 + SysNoticeDO dbNotice = randomSysNoticeDO();
  129 + sysNoticeMapper.insert(dbNotice);
  130 +
  131 + // 成功调用
  132 + sysNoticeService.checkNoticeExists(dbNotice.getId());
  133 + }
  134 +
  135 + @Test
  136 + public void checkNoticeExists_noExists() {
  137 + assertServiceException(() -> sysNoticeService.checkNoticeExists(randomLongId()), NOTICE_NOT_FOUND);
85 } 138 }
86 139
87 @SafeVarargs 140 @SafeVarargs
src/test/resources/sql/create_tables.sql
@@ -129,3 +129,18 @@ CREATE TABLE `sys_user_session` ( @@ -129,3 +129,18 @@ CREATE TABLE `sys_user_session` (
129 "deleted" bit NOT NULL DEFAULT FALSE, 129 "deleted" bit NOT NULL DEFAULT FALSE,
130 PRIMARY KEY (`id`) 130 PRIMARY KEY (`id`)
131 ) COMMENT '用户在线 Session'; 131 ) COMMENT '用户在线 Session';
  132 +
  133 +CREATE TABLE IF NOT EXISTS "sys_notice" (
  134 + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  135 + "title" varchar(50) NOT NULL COMMENT '公告标题',
  136 + "content" text NOT NULL COMMENT '公告内容',
  137 + "notice_type" tinyint NOT NULL COMMENT '公告类型(1通知 2公告)',
  138 + "status" tinyint NOT NULL DEFAULT '0' COMMENT '公告状态(0正常 1关闭)',
  139 + "creator" varchar(64) DEFAULT '' COMMENT '创建者',
  140 + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  141 + "updater" varchar(64) DEFAULT '' COMMENT '更新者',
  142 + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  143 + "deleted" bit NOT NULL DEFAULT 0 COMMENT '是否删除',
  144 + PRIMARY KEY("id")
  145 +) COMMENT '通知公告表';
  146 +