Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
ac25dbe2
提交
ac25dbe2
authored
2月 02, 2023
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善 SmsCodeServiceImpl 单元测试
上级
5a18223b
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
419 行增加
和
196 行删除
+419
-196
SmsCodeApi.java
...va/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java
+3
-3
SmsCodeValidateReqDTO.java
...module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java
+1
-1
SmsCodeApiImpl.java
...n/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java
+3
-3
SmsCodeService.java
...coder/yudao/module/system/service/sms/SmsCodeService.java
+2
-2
SmsCodeServiceImpl.java
...r/yudao/module/system/service/sms/SmsCodeServiceImpl.java
+14
-16
SmsChannelServiceTest.java
...udao/module/system/service/sms/SmsChannelServiceTest.java
+27
-28
SmsCodeServiceImplTest.java
...dao/module/system/service/sms/SmsCodeServiceImplTest.java
+209
-0
SmsLogServiceImplTest.java
...udao/module/system/service/sms/SmsLogServiceImplTest.java
+47
-47
SmsSendServiceTest.java
...r/yudao/module/system/service/sms/SmsSendServiceTest.java
+0
-0
SmsTemplateServiceImplTest.java
...module/system/service/sms/SmsTemplateServiceImplTest.java
+59
-61
clean.sql
.../yudao-module-system-biz/src/test/resources/sql/clean.sql
+1
-0
create_tables.sql
...odule-system-biz/src/test/resources/sql/create_tables.sql
+53
-35
没有找到文件。
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java
浏览文件 @
ac25dbe2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
api
.
sms
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCode
Check
ReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCode
Validate
ReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO
;
import
cn.iocoder.yudao.module.system.enums.ApiConstants
;
...
...
@@ -29,8 +29,8 @@ public interface SmsCodeApi {
@ApiOperation
(
"验证短信验证码,并进行使用"
)
CommonResult
<
Boolean
>
useSmsCode
(
@Valid
@RequestBody
SmsCodeUseReqDTO
reqDTO
);
@GetMapping
(
PREFIX
+
"/
check
"
)
@GetMapping
(
PREFIX
+
"/
validate
"
)
@ApiOperation
(
"检查验证码是否有效"
)
CommonResult
<
Boolean
>
checkSmsCode
(
@Valid
@RequestBody
SmsCodeCheck
ReqDTO
reqDTO
);
CommonResult
<
Boolean
>
validateSmsCode
(
@Valid
@RequestBody
SmsCodeValidate
ReqDTO
reqDTO
);
}
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCode
Check
ReqDTO.java
→
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCode
Validate
ReqDTO.java
浏览文件 @
ac25dbe2
...
...
@@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull;
@ApiModel
(
"RPC 服务 - 短信验证码的校验 Request DTO"
)
@Data
public
class
SmsCode
Check
ReqDTO
{
public
class
SmsCode
Validate
ReqDTO
{
@ApiModelProperty
(
value
=
"手机号"
,
required
=
true
,
example
=
"15601691300"
)
@Mobile
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java
浏览文件 @
ac25dbe2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
api
.
sms
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCode
Check
ReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCode
Validate
ReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO
;
import
cn.iocoder.yudao.module.system.service.sms.SmsCodeService
;
...
...
@@ -35,8 +35,8 @@ public class SmsCodeApiImpl implements SmsCodeApi {
}
@Override
public
CommonResult
<
Boolean
>
checkSmsCode
(
SmsCodeCheck
ReqDTO
reqDTO
)
{
smsCodeService
.
check
SmsCode
(
reqDTO
);
public
CommonResult
<
Boolean
>
validateSmsCode
(
SmsCodeValidate
ReqDTO
reqDTO
)
{
smsCodeService
.
validate
SmsCode
(
reqDTO
);
return
success
(
true
);
}
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java
浏览文件 @
ac25dbe2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
service
.
sms
;
import
cn.iocoder.yudao.framework.common.exception.ServiceException
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeCheckReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeValidateReqDTO
;
import
javax.validation.Valid
;
...
...
@@ -35,6 +35,6 @@ public interface SmsCodeService {
*
* @param reqDTO 校验请求
*/
void
checkSmsCode
(
@Valid
SmsCodeCheck
ReqDTO
reqDTO
);
void
validateSmsCode
(
@Valid
SmsCodeValidate
ReqDTO
reqDTO
);
}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java
浏览文件 @
ac25dbe2
...
...
@@ -3,11 +3,9 @@ package cn.iocoder.yudao.module.system.service.sms;
import
cn.hutool.core.date.LocalDateTimeUtil
;
import
cn.hutool.core.lang.Assert
;
import
cn.hutool.core.map.MapUtil
;
import
cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil
;
import
cn.iocoder.yudao.framework.common.util.date.DateUtils
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeCheckReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeValidateReqDTO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO
;
import
cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper
;
import
cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum
;
...
...
@@ -16,11 +14,11 @@ import org.springframework.stereotype.Service;
import
org.springframework.validation.annotation.Validated
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.time.temporal.ChronoUnit
;
import
static
cn
.
hutool
.
core
.
util
.
RandomUtil
.
randomInt
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
exception
.
util
.
ServiceExceptionUtil
.
exception
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
util
.
date
.
DateUtils
.
isToday
;
import
static
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
ErrorCodeConstants
.*;
/**
...
...
@@ -58,11 +56,11 @@ public class SmsCodeServiceImpl implements SmsCodeService {
if
(
lastSmsCode
!=
null
)
{
if
(
LocalDateTimeUtil
.
between
(
lastSmsCode
.
getCreateTime
(),
LocalDateTime
.
now
()).
toMillis
()
<
smsCodeProperties
.
getSendFrequency
().
toMillis
())
{
// 发送过于频繁
throw
ServiceExceptionUtil
.
exception
(
SMS_CODE_SEND_TOO_FAST
);
throw
exception
(
SMS_CODE_SEND_TOO_FAST
);
}
if
(
DateUtils
.
isToday
(
lastSmsCode
.
getCreateTime
())
&&
// 必须是今天,才能计算超过当天的上限
if
(
isToday
(
lastSmsCode
.
getCreateTime
())
&&
// 必须是今天,才能计算超过当天的上限
lastSmsCode
.
getTodayIndex
()
>=
smsCodeProperties
.
getSendMaximumQuantityPerDay
())
{
// 超过当天发送的上限。
throw
ServiceExceptionUtil
.
exception
(
SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY
);
throw
exception
(
SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY
);
}
// TODO 芋艿:提升,每个 IP 每天可发送数量
// TODO 芋艿:提升,每个 IP 每小时可发送数量
...
...
@@ -71,7 +69,7 @@ public class SmsCodeServiceImpl implements SmsCodeService {
// 创建验证码记录
String
code
=
String
.
valueOf
(
randomInt
(
smsCodeProperties
.
getBeginCode
(),
smsCodeProperties
.
getEndCode
()
+
1
));
SmsCodeDO
newSmsCode
=
SmsCodeDO
.
builder
().
mobile
(
mobile
).
code
(
code
).
scene
(
scene
)
.
todayIndex
(
lastSmsCode
!=
null
&&
DateUtils
.
isToday
(
lastSmsCode
.
getCreateTime
())
?
lastSmsCode
.
getTodayIndex
()
+
1
:
1
)
.
todayIndex
(
lastSmsCode
!=
null
&&
isToday
(
lastSmsCode
.
getCreateTime
())
?
lastSmsCode
.
getTodayIndex
()
+
1
:
1
)
.
createIp
(
ip
).
used
(
false
).
build
();
smsCodeMapper
.
insert
(
newSmsCode
);
return
code
;
...
...
@@ -80,32 +78,32 @@ public class SmsCodeServiceImpl implements SmsCodeService {
@Override
public
void
useSmsCode
(
SmsCodeUseReqDTO
reqDTO
)
{
// 检测验证码是否有效
SmsCodeDO
lastSmsCode
=
this
.
check
SmsCode0
(
reqDTO
.
getMobile
(),
reqDTO
.
getCode
(),
reqDTO
.
getScene
());
SmsCodeDO
lastSmsCode
=
validate
SmsCode0
(
reqDTO
.
getMobile
(),
reqDTO
.
getCode
(),
reqDTO
.
getScene
());
// 使用验证码
smsCodeMapper
.
updateById
(
SmsCodeDO
.
builder
().
id
(
lastSmsCode
.
getId
())
.
used
(
true
).
usedTime
(
LocalDateTime
.
now
()).
usedIp
(
reqDTO
.
getUsedIp
()).
build
());
}
@Override
public
void
checkSmsCode
(
SmsCodeCheck
ReqDTO
reqDTO
)
{
check
SmsCode0
(
reqDTO
.
getMobile
(),
reqDTO
.
getCode
(),
reqDTO
.
getScene
());
public
void
validateSmsCode
(
SmsCodeValidate
ReqDTO
reqDTO
)
{
validate
SmsCode0
(
reqDTO
.
getMobile
(),
reqDTO
.
getCode
(),
reqDTO
.
getScene
());
}
p
ublic
SmsCodeDO
check
SmsCode0
(
String
mobile
,
String
code
,
Integer
scene
)
{
p
rivate
SmsCodeDO
validate
SmsCode0
(
String
mobile
,
String
code
,
Integer
scene
)
{
// 校验验证码
SmsCodeDO
lastSmsCode
=
smsCodeMapper
.
selectLastByMobile
(
mobile
,
code
,
scene
);
// 若验证码不存在,抛出异常
if
(
lastSmsCode
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
SMS_CODE_NOT_FOUND
);
throw
exception
(
SMS_CODE_NOT_FOUND
);
}
// 超过时间
if
(
LocalDateTimeUtil
.
between
(
lastSmsCode
.
getCreateTime
(),
LocalDateTime
.
now
()).
toMillis
()
>=
smsCodeProperties
.
getExpireTimes
().
toMillis
())
{
// 验证码已过期
throw
ServiceExceptionUtil
.
exception
(
SMS_CODE_EXPIRED
);
throw
exception
(
SMS_CODE_EXPIRED
);
}
// 判断验证码是否已被使用
if
(
Boolean
.
TRUE
.
equals
(
lastSmsCode
.
getUsed
()))
{
throw
ServiceExceptionUtil
.
exception
(
SMS_CODE_USED
);
throw
exception
(
SMS_CODE_USED
);
}
return
lastSmsCode
;
}
...
...
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java
浏览文件 @
ac25dbe2
...
...
@@ -15,7 +15,6 @@ import org.springframework.boot.test.mock.mockito.MockBean;
import
org.springframework.context.annotation.Import
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
util
.
date
.
LocalDateTimeUtils
.
buildBetweenTime
;
...
...
@@ -118,8 +117,8 @@ public class SmsChannelServiceTest extends BaseDbUnitTest {
// 调用
smsChannelService
.
deleteSmsChannel
(
id
);
// 校验数据不存在了
assertNull
(
smsChannelMapper
.
selectById
(
id
));
// 校验数据不存在了
assertNull
(
smsChannelMapper
.
selectById
(
id
));
// 校验调用
verify
(
smsProducer
,
times
(
1
)).
sendSmsChannelRefreshMessage
();
}
...
...
@@ -178,31 +177,31 @@ public class SmsChannelServiceTest extends BaseDbUnitTest {
@Test
public
void
testGetSmsChannelPage
()
{
// mock 数据
SmsChannelDO
dbSmsChannel
=
randomPojo
(
SmsChannelDO
.
class
,
o
->
{
// 等会查询到
o
.
setSignature
(
"芋道源码"
);
o
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
o
.
setCreateTime
(
buildTime
(
2020
,
12
,
12
));
});
smsChannelMapper
.
insert
(
dbSmsChannel
);
// 测试 signature 不匹配
smsChannelMapper
.
insert
(
cloneIgnoreId
(
dbSmsChannel
,
o
->
o
.
setSignature
(
"源码"
)));
// 测试 status 不匹配
smsChannelMapper
.
insert
(
cloneIgnoreId
(
dbSmsChannel
,
o
->
o
.
setStatus
(
CommonStatusEnum
.
DISABLE
.
getStatus
())));
// 测试 createTime 不匹配
smsChannelMapper
.
insert
(
cloneIgnoreId
(
dbSmsChannel
,
o
->
o
.
setCreateTime
(
buildTime
(
2020
,
11
,
11
))));
// 准备参数
SmsChannelPageReqVO
reqVO
=
new
SmsChannelPageReqVO
();
reqVO
.
setSignature
(
"芋道"
);
reqVO
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
reqVO
.
setCreateTime
(
buildBetweenTime
(
2020
,
12
,
1
,
2020
,
12
,
24
));
// 调用
PageResult
<
SmsChannelDO
>
pageResult
=
smsChannelService
.
getSmsChannelPage
(
reqVO
);
// 断言
assertEquals
(
1
,
pageResult
.
getTotal
());
assertEquals
(
1
,
pageResult
.
getList
().
size
());
assertPojoEquals
(
dbSmsChannel
,
pageResult
.
getList
().
get
(
0
));
// mock 数据
SmsChannelDO
dbSmsChannel
=
randomPojo
(
SmsChannelDO
.
class
,
o
->
{
// 等会查询到
o
.
setSignature
(
"芋道源码"
);
o
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
o
.
setCreateTime
(
buildTime
(
2020
,
12
,
12
));
});
smsChannelMapper
.
insert
(
dbSmsChannel
);
// 测试 signature 不匹配
smsChannelMapper
.
insert
(
cloneIgnoreId
(
dbSmsChannel
,
o
->
o
.
setSignature
(
"源码"
)));
// 测试 status 不匹配
smsChannelMapper
.
insert
(
cloneIgnoreId
(
dbSmsChannel
,
o
->
o
.
setStatus
(
CommonStatusEnum
.
DISABLE
.
getStatus
())));
// 测试 createTime 不匹配
smsChannelMapper
.
insert
(
cloneIgnoreId
(
dbSmsChannel
,
o
->
o
.
setCreateTime
(
buildTime
(
2020
,
11
,
11
))));
// 准备参数
SmsChannelPageReqVO
reqVO
=
new
SmsChannelPageReqVO
();
reqVO
.
setSignature
(
"芋道"
);
reqVO
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
reqVO
.
setCreateTime
(
buildBetweenTime
(
2020
,
12
,
1
,
2020
,
12
,
24
));
// 调用
PageResult
<
SmsChannelDO
>
pageResult
=
smsChannelService
.
getSmsChannelPage
(
reqVO
);
// 断言
assertEquals
(
1
,
pageResult
.
getTotal
());
assertEquals
(
1
,
pageResult
.
getList
().
size
());
assertPojoEquals
(
dbSmsChannel
,
pageResult
.
getList
().
get
(
0
));
}
}
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java
0 → 100644
浏览文件 @
ac25dbe2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
service
.
sms
;
import
cn.hutool.core.map.MapUtil
;
import
cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants
;
import
cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeValidateReqDTO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO
;
import
cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper
;
import
cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum
;
import
cn.iocoder.yudao.module.system.framework.sms.SmsCodeProperties
;
import
com.baomidou.mybatisplus.annotation.DbType
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.test.mock.mockito.MockBean
;
import
org.springframework.context.annotation.Import
;
import
javax.annotation.Resource
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
static
cn
.
hutool
.
core
.
util
.
RandomUtil
.
randomEle
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
test
.
core
.
util
.
AssertUtils
.
assertPojoEquals
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
test
.
core
.
util
.
AssertUtils
.
assertServiceException
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
test
.
core
.
util
.
RandomUtils
.
randomPojo
;
import
static
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
ErrorCodeConstants
.*;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
import
static
org
.
mockito
.
ArgumentMatchers
.
eq
;
import
static
org
.
mockito
.
ArgumentMatchers
.
isNull
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
@Import
(
SmsCodeServiceImpl
.
class
)
public
class
SmsCodeServiceImplTest
extends
BaseDbUnitTest
{
@Resource
private
SmsCodeServiceImpl
smsCodeService
;
@Resource
private
SmsCodeMapper
smsCodeMapper
;
@MockBean
private
SmsCodeProperties
smsCodeProperties
;
@MockBean
private
SmsSendService
smsSendService
;
@BeforeEach
public
void
setUp
()
{
when
(
smsCodeProperties
.
getExpireTimes
()).
thenReturn
(
Duration
.
ofMinutes
(
5
));
when
(
smsCodeProperties
.
getSendFrequency
()).
thenReturn
(
Duration
.
ofMinutes
(
1
));
when
(
smsCodeProperties
.
getSendMaximumQuantityPerDay
()).
thenReturn
(
10
);
when
(
smsCodeProperties
.
getBeginCode
()).
thenReturn
(
9999
);
when
(
smsCodeProperties
.
getEndCode
()).
thenReturn
(
9999
);
}
@Test
public
void
sendSmsCode_success
()
{
// 准备参数
SmsCodeSendReqDTO
reqDTO
=
randomPojo
(
SmsCodeSendReqDTO
.
class
,
o
->
{
o
.
setMobile
(
"15601691300"
);
o
.
setScene
(
SmsSceneEnum
.
MEMBER_LOGIN
.
getScene
());
});
// mock 方法
SqlConstants
.
init
(
DbType
.
MYSQL
);
// 调用
smsCodeService
.
sendSmsCode
(
reqDTO
);
// 断言 code 验证码
SmsCodeDO
smsCodeDO
=
smsCodeMapper
.
selectOne
(
null
);
assertPojoEquals
(
reqDTO
,
smsCodeDO
);
assertEquals
(
"9999"
,
smsCodeDO
.
getCode
());
assertEquals
(
1
,
smsCodeDO
.
getTodayIndex
());
assertFalse
(
smsCodeDO
.
getUsed
());
// 断言调用
verify
(
smsSendService
).
sendSingleSms
(
eq
(
reqDTO
.
getMobile
()),
isNull
(),
isNull
(),
eq
(
"user-sms-login"
),
eq
(
MapUtil
.
of
(
"code"
,
"9999"
)));
}
@Test
public
void
sendSmsCode_tooFast
()
{
// mock 数据
SmsCodeDO
smsCodeDO
=
randomPojo
(
SmsCodeDO
.
class
,
o
->
o
.
setMobile
(
"15601691300"
).
setTodayIndex
(
1
));
smsCodeMapper
.
insert
(
smsCodeDO
);
// 准备参数
SmsCodeSendReqDTO
reqDTO
=
randomPojo
(
SmsCodeSendReqDTO
.
class
,
o
->
{
o
.
setMobile
(
"15601691300"
);
o
.
setScene
(
SmsSceneEnum
.
MEMBER_LOGIN
.
getScene
());
});
// mock 方法
SqlConstants
.
init
(
DbType
.
MYSQL
);
// 调用,并断言异常
assertServiceException
(()
->
smsCodeService
.
sendSmsCode
(
reqDTO
),
SMS_CODE_SEND_TOO_FAST
);
}
@Test
public
void
sendSmsCode_exceedDay
()
{
// mock 数据
SmsCodeDO
smsCodeDO
=
randomPojo
(
SmsCodeDO
.
class
,
o
->
o
.
setMobile
(
"15601691300"
).
setTodayIndex
(
10
).
setCreateTime
(
LocalDateTime
.
now
()));
smsCodeMapper
.
insert
(
smsCodeDO
);
// 准备参数
SmsCodeSendReqDTO
reqDTO
=
randomPojo
(
SmsCodeSendReqDTO
.
class
,
o
->
{
o
.
setMobile
(
"15601691300"
);
o
.
setScene
(
SmsSceneEnum
.
MEMBER_LOGIN
.
getScene
());
});
// mock 方法
SqlConstants
.
init
(
DbType
.
MYSQL
);
when
(
smsCodeProperties
.
getSendFrequency
()).
thenReturn
(
Duration
.
ofMillis
(
0
));
// 调用,并断言异常
assertServiceException
(()
->
smsCodeService
.
sendSmsCode
(
reqDTO
),
SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY
);
}
@Test
public
void
testUseSmsCode_success
()
{
// 准备参数
SmsCodeUseReqDTO
reqDTO
=
randomPojo
(
SmsCodeUseReqDTO
.
class
,
o
->
{
o
.
setMobile
(
"15601691300"
);
o
.
setScene
(
randomEle
(
SmsSceneEnum
.
values
()).
getScene
());
});
// mock 数据
SqlConstants
.
init
(
DbType
.
MYSQL
);
smsCodeMapper
.
insert
(
randomPojo
(
SmsCodeDO
.
class
,
o
->
{
o
.
setMobile
(
reqDTO
.
getMobile
()).
setScene
(
reqDTO
.
getScene
())
.
setCode
(
reqDTO
.
getCode
()).
setUsed
(
false
);
}));
// 调用
smsCodeService
.
useSmsCode
(
reqDTO
);
// 断言
SmsCodeDO
smsCodeDO
=
smsCodeMapper
.
selectOne
(
null
);
assertTrue
(
smsCodeDO
.
getUsed
());
assertNotNull
(
smsCodeDO
.
getUsedTime
());
assertEquals
(
reqDTO
.
getUsedIp
(),
smsCodeDO
.
getUsedIp
());
}
@Test
public
void
validateSmsCode_success
()
{
// 准备参数
SmsCodeValidateReqDTO
reqDTO
=
randomPojo
(
SmsCodeValidateReqDTO
.
class
,
o
->
{
o
.
setMobile
(
"15601691300"
);
o
.
setScene
(
randomEle
(
SmsSceneEnum
.
values
()).
getScene
());
});
// mock 数据
SqlConstants
.
init
(
DbType
.
MYSQL
);
smsCodeMapper
.
insert
(
randomPojo
(
SmsCodeDO
.
class
,
o
->
o
.
setMobile
(
reqDTO
.
getMobile
())
.
setScene
(
reqDTO
.
getScene
()).
setCode
(
reqDTO
.
getCode
()).
setUsed
(
false
)));
// 调用
smsCodeService
.
validateSmsCode
(
reqDTO
);
}
@Test
public
void
validateSmsCode_notFound
()
{
// 准备参数
SmsCodeValidateReqDTO
reqDTO
=
randomPojo
(
SmsCodeValidateReqDTO
.
class
,
o
->
{
o
.
setMobile
(
"15601691300"
);
o
.
setScene
(
randomEle
(
SmsSceneEnum
.
values
()).
getScene
());
});
// mock 数据
SqlConstants
.
init
(
DbType
.
MYSQL
);
// 调用,并断言异常
assertServiceException
(()
->
smsCodeService
.
validateSmsCode
(
reqDTO
),
SMS_CODE_NOT_FOUND
);
}
@Test
public
void
validateSmsCode_expired
()
{
// 准备参数
SmsCodeValidateReqDTO
reqDTO
=
randomPojo
(
SmsCodeValidateReqDTO
.
class
,
o
->
{
o
.
setMobile
(
"15601691300"
);
o
.
setScene
(
randomEle
(
SmsSceneEnum
.
values
()).
getScene
());
});
// mock 数据
SqlConstants
.
init
(
DbType
.
MYSQL
);
smsCodeMapper
.
insert
(
randomPojo
(
SmsCodeDO
.
class
,
o
->
o
.
setMobile
(
reqDTO
.
getMobile
())
.
setScene
(
reqDTO
.
getScene
()).
setCode
(
reqDTO
.
getCode
()).
setUsed
(
false
)
.
setCreateTime
(
LocalDateTime
.
now
().
minusMinutes
(
6
))));
// 调用,并断言异常
assertServiceException
(()
->
smsCodeService
.
validateSmsCode
(
reqDTO
),
SMS_CODE_EXPIRED
);
}
@Test
public
void
validateSmsCode_used
()
{
// 准备参数
SmsCodeValidateReqDTO
reqDTO
=
randomPojo
(
SmsCodeValidateReqDTO
.
class
,
o
->
{
o
.
setMobile
(
"15601691300"
);
o
.
setScene
(
randomEle
(
SmsSceneEnum
.
values
()).
getScene
());
});
// mock 数据
SqlConstants
.
init
(
DbType
.
MYSQL
);
smsCodeMapper
.
insert
(
randomPojo
(
SmsCodeDO
.
class
,
o
->
o
.
setMobile
(
reqDTO
.
getMobile
())
.
setScene
(
reqDTO
.
getScene
()).
setCode
(
reqDTO
.
getCode
()).
setUsed
(
true
)
.
setCreateTime
(
LocalDateTime
.
now
())));
// 调用,并断言异常
assertServiceException
(()
->
smsCodeService
.
validateSmsCode
(
reqDTO
),
SMS_CODE_USED
);
}
}
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java
→
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService
Impl
Test.java
浏览文件 @
ac25dbe2
...
...
@@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertNotNull
;
@Import
(
SmsLogServiceImpl
.
class
)
public
class
SmsLogServiceTest
extends
BaseDbUnitTest
{
public
class
SmsLogService
Impl
Test
extends
BaseDbUnitTest
{
@Resource
private
SmsLogServiceImpl
smsLogService
;
...
...
@@ -44,47 +44,47 @@ public class SmsLogServiceTest extends BaseDbUnitTest {
@Test
public
void
testGetSmsLogPage
()
{
// mock 数据
SmsLogDO
dbSmsLog
=
randomSmsLogDO
(
o
->
{
// 等会查询到
o
.
setChannelId
(
1L
);
o
.
setTemplateId
(
10L
);
o
.
setMobile
(
"15601691300"
);
o
.
setSendStatus
(
SmsSendStatusEnum
.
INIT
.
getStatus
());
o
.
setSendTime
(
buildTime
(
2020
,
11
,
11
));
o
.
setReceiveStatus
(
SmsReceiveStatusEnum
.
INIT
.
getStatus
());
o
.
setReceiveTime
(
buildTime
(
2021
,
11
,
11
));
});
smsLogMapper
.
insert
(
dbSmsLog
);
// 测试 channelId 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setChannelId
(
2L
)));
// 测试 templateId 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setTemplateId
(
20L
)));
// 测试 mobile 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setMobile
(
"18818260999"
)));
// 测试 sendStatus 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setSendStatus
(
SmsSendStatusEnum
.
IGNORE
.
getStatus
())));
// 测试 sendTime 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setSendTime
(
buildTime
(
2020
,
12
,
12
))));
// 测试 receiveStatus 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setReceiveStatus
(
SmsReceiveStatusEnum
.
SUCCESS
.
getStatus
())));
// 测试 receiveTime 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setReceiveTime
(
buildTime
(
2021
,
12
,
12
))));
// 准备参数
SmsLogPageReqVO
reqVO
=
new
SmsLogPageReqVO
();
reqVO
.
setChannelId
(
1L
);
reqVO
.
setTemplateId
(
10L
);
reqVO
.
setMobile
(
"156"
);
reqVO
.
setSendStatus
(
SmsSendStatusEnum
.
INIT
.
getStatus
());
reqVO
.
setSendTime
(
buildBetweenTime
(
2020
,
11
,
1
,
2020
,
11
,
30
));
reqVO
.
setReceiveStatus
(
SmsReceiveStatusEnum
.
INIT
.
getStatus
());
reqVO
.
setReceiveTime
(
buildBetweenTime
(
2021
,
11
,
1
,
2021
,
11
,
30
));
// 调用
PageResult
<
SmsLogDO
>
pageResult
=
smsLogService
.
getSmsLogPage
(
reqVO
);
// 断言
assertEquals
(
1
,
pageResult
.
getTotal
());
assertEquals
(
1
,
pageResult
.
getList
().
size
());
assertPojoEquals
(
dbSmsLog
,
pageResult
.
getList
().
get
(
0
));
// mock 数据
SmsLogDO
dbSmsLog
=
randomSmsLogDO
(
o
->
{
// 等会查询到
o
.
setChannelId
(
1L
);
o
.
setTemplateId
(
10L
);
o
.
setMobile
(
"15601691300"
);
o
.
setSendStatus
(
SmsSendStatusEnum
.
INIT
.
getStatus
());
o
.
setSendTime
(
buildTime
(
2020
,
11
,
11
));
o
.
setReceiveStatus
(
SmsReceiveStatusEnum
.
INIT
.
getStatus
());
o
.
setReceiveTime
(
buildTime
(
2021
,
11
,
11
));
});
smsLogMapper
.
insert
(
dbSmsLog
);
// 测试 channelId 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setChannelId
(
2L
)));
// 测试 templateId 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setTemplateId
(
20L
)));
// 测试 mobile 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setMobile
(
"18818260999"
)));
// 测试 sendStatus 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setSendStatus
(
SmsSendStatusEnum
.
IGNORE
.
getStatus
())));
// 测试 sendTime 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setSendTime
(
buildTime
(
2020
,
12
,
12
))));
// 测试 receiveStatus 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setReceiveStatus
(
SmsReceiveStatusEnum
.
SUCCESS
.
getStatus
())));
// 测试 receiveTime 不匹配
smsLogMapper
.
insert
(
cloneIgnoreId
(
dbSmsLog
,
o
->
o
.
setReceiveTime
(
buildTime
(
2021
,
12
,
12
))));
// 准备参数
SmsLogPageReqVO
reqVO
=
new
SmsLogPageReqVO
();
reqVO
.
setChannelId
(
1L
);
reqVO
.
setTemplateId
(
10L
);
reqVO
.
setMobile
(
"156"
);
reqVO
.
setSendStatus
(
SmsSendStatusEnum
.
INIT
.
getStatus
());
reqVO
.
setSendTime
(
buildBetweenTime
(
2020
,
11
,
1
,
2020
,
11
,
30
));
reqVO
.
setReceiveStatus
(
SmsReceiveStatusEnum
.
INIT
.
getStatus
());
reqVO
.
setReceiveTime
(
buildBetweenTime
(
2021
,
11
,
1
,
2021
,
11
,
30
));
// 调用
PageResult
<
SmsLogDO
>
pageResult
=
smsLogService
.
getSmsLogPage
(
reqVO
);
// 断言
assertEquals
(
1
,
pageResult
.
getTotal
());
assertEquals
(
1
,
pageResult
.
getList
().
size
());
assertPojoEquals
(
dbSmsLog
,
pageResult
.
getList
().
get
(
0
));
}
@Test
...
...
@@ -124,11 +124,11 @@ public class SmsLogServiceTest extends BaseDbUnitTest {
reqVO
.
setReceiveStatus
(
SmsReceiveStatusEnum
.
INIT
.
getStatus
());
reqVO
.
setReceiveTime
(
buildBetweenTime
(
2021
,
11
,
1
,
2021
,
11
,
30
));
// 调用
List
<
SmsLogDO
>
list
=
smsLogService
.
getSmsLogList
(
reqVO
);
// 断言
assertEquals
(
1
,
list
.
size
());
assertPojoEquals
(
dbSmsLog
,
list
.
get
(
0
));
// 调用
List
<
SmsLogDO
>
list
=
smsLogService
.
getSmsLogList
(
reqVO
);
// 断言
assertEquals
(
1
,
list
.
size
());
assertPojoEquals
(
dbSmsLog
,
list
.
get
(
0
));
}
@Test
...
...
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceTest.java
deleted
100644 → 0
浏览文件 @
5a18223b
差异被折叠。
点击展开。
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java
→
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService
Impl
Test.java
浏览文件 @
ac25dbe2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
service
.
sms
;
import
cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateCreateReqVO
;
import
cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO
;
import
cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO
;
import
cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO
;
import
cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper
;
import
cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer
;
import
cn.iocoder.yudao.module.system.enums.sms.SmsTemplateTypeEnum
;
import
cn.iocoder.yudao.framework.common.enums.CommonStatusEnum
;
import
cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants
;
import
cn.iocoder.yudao.framework.common.pojo.PageResult
;
...
...
@@ -19,6 +10,15 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
import
cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult
;
import
cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO
;
import
cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest
;
import
cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateCreateReqVO
;
import
cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO
;
import
cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO
;
import
cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO
;
import
cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper
;
import
cn.iocoder.yudao.module.system.enums.sms.SmsTemplateTypeEnum
;
import
cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer
;
import
com.google.common.collect.Lists
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.test.mock.mockito.MockBean
;
...
...
@@ -30,20 +30,18 @@ import java.util.List;
import
java.util.Map
;
import
java.util.function.Consumer
;
import
static
cn
.
hutool
.
core
.
bean
.
BeanUtil
.
getFieldValue
;
import
static
cn
.
hutool
.
core
.
util
.
RandomUtil
.
randomEle
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
util
.
object
.
ObjectUtils
.
max
;
import
static
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
ErrorCodeConstants
.*;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
util
.
date
.
LocalDateTimeUtils
.
buildTime
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
test
.
core
.
util
.
AssertUtils
.
assertPojoEquals
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
test
.
core
.
util
.
AssertUtils
.
assertServiceException
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
test
.
core
.
util
.
RandomUtils
.*;
import
static
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
ErrorCodeConstants
.*;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
import
static
org
.
mockito
.
ArgumentMatchers
.
eq
;
import
static
org
.
mockito
.
Mockito
.*;
@Import
(
SmsTemplateServiceImpl
.
class
)
public
class
SmsTemplateServiceTest
extends
BaseDbUnitTest
{
public
class
SmsTemplateService
Impl
Test
extends
BaseDbUnitTest
{
@Resource
private
SmsTemplateServiceImpl
smsTemplateService
;
...
...
@@ -176,8 +174,8 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest {
// 调用
smsTemplateService
.
deleteSmsTemplate
(
id
);
// 校验数据不存在了
assertNull
(
smsTemplateMapper
.
selectById
(
id
));
// 校验数据不存在了
assertNull
(
smsTemplateMapper
.
selectById
(
id
));
// 校验调用
verify
(
smsProducer
,
times
(
1
)).
sendSmsTemplateRefreshMessage
();
}
...
...
@@ -193,47 +191,47 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest {
@Test
public
void
testGetSmsTemplatePage
()
{
// mock 数据
SmsTemplateDO
dbSmsTemplate
=
randomPojo
(
SmsTemplateDO
.
class
,
o
->
{
// 等会查询到
o
.
setType
(
SmsTemplateTypeEnum
.
PROMOTION
.
getType
());
o
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
o
.
setCode
(
"tudou"
);
o
.
setContent
(
"芋道源码"
);
o
.
setApiTemplateId
(
"yunai"
);
o
.
setChannelId
(
1L
);
o
.
setCreateTime
(
buildTime
(
2021
,
11
,
11
));
});
smsTemplateMapper
.
insert
(
dbSmsTemplate
);
// 测试 type 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setType
(
SmsTemplateTypeEnum
.
VERIFICATION_CODE
.
getType
())));
// 测试 status 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setStatus
(
CommonStatusEnum
.
DISABLE
.
getStatus
())));
// 测试 code 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setCode
(
"yuanma"
)));
// 测试 content 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setContent
(
"源码"
)));
// 测试 apiTemplateId 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setApiTemplateId
(
"nai"
)));
// 测试 channelId 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setChannelId
(
2L
)));
// 测试 createTime 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setCreateTime
(
buildTime
(
2021
,
12
,
12
))));
// 准备参数
SmsTemplatePageReqVO
reqVO
=
new
SmsTemplatePageReqVO
();
reqVO
.
setType
(
SmsTemplateTypeEnum
.
PROMOTION
.
getType
());
reqVO
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
reqVO
.
setCode
(
"tu"
);
reqVO
.
setContent
(
"芋道"
);
reqVO
.
setApiTemplateId
(
"yu"
);
reqVO
.
setChannelId
(
1L
);
reqVO
.
setCreateTime
((
new
LocalDateTime
[]{
buildTime
(
2021
,
11
,
1
),
buildTime
(
2021
,
12
,
1
)}));
// 调用
PageResult
<
SmsTemplateDO
>
pageResult
=
smsTemplateService
.
getSmsTemplatePage
(
reqVO
);
// 断言
assertEquals
(
1
,
pageResult
.
getTotal
());
assertEquals
(
1
,
pageResult
.
getList
().
size
());
assertPojoEquals
(
dbSmsTemplate
,
pageResult
.
getList
().
get
(
0
));
// mock 数据
SmsTemplateDO
dbSmsTemplate
=
randomPojo
(
SmsTemplateDO
.
class
,
o
->
{
// 等会查询到
o
.
setType
(
SmsTemplateTypeEnum
.
PROMOTION
.
getType
());
o
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
o
.
setCode
(
"tudou"
);
o
.
setContent
(
"芋道源码"
);
o
.
setApiTemplateId
(
"yunai"
);
o
.
setChannelId
(
1L
);
o
.
setCreateTime
(
buildTime
(
2021
,
11
,
11
));
});
smsTemplateMapper
.
insert
(
dbSmsTemplate
);
// 测试 type 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setType
(
SmsTemplateTypeEnum
.
VERIFICATION_CODE
.
getType
())));
// 测试 status 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setStatus
(
CommonStatusEnum
.
DISABLE
.
getStatus
())));
// 测试 code 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setCode
(
"yuanma"
)));
// 测试 content 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setContent
(
"源码"
)));
// 测试 apiTemplateId 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setApiTemplateId
(
"nai"
)));
// 测试 channelId 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setChannelId
(
2L
)));
// 测试 createTime 不匹配
smsTemplateMapper
.
insert
(
ObjectUtils
.
cloneIgnoreId
(
dbSmsTemplate
,
o
->
o
.
setCreateTime
(
buildTime
(
2021
,
12
,
12
))));
// 准备参数
SmsTemplatePageReqVO
reqVO
=
new
SmsTemplatePageReqVO
();
reqVO
.
setType
(
SmsTemplateTypeEnum
.
PROMOTION
.
getType
());
reqVO
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
reqVO
.
setCode
(
"tu"
);
reqVO
.
setContent
(
"芋道"
);
reqVO
.
setApiTemplateId
(
"yu"
);
reqVO
.
setChannelId
(
1L
);
reqVO
.
setCreateTime
((
new
LocalDateTime
[]{
buildTime
(
2021
,
11
,
1
),
buildTime
(
2021
,
12
,
1
)}));
// 调用
PageResult
<
SmsTemplateDO
>
pageResult
=
smsTemplateService
.
getSmsTemplatePage
(
reqVO
);
// 断言
assertEquals
(
1
,
pageResult
.
getTotal
());
assertEquals
(
1
,
pageResult
.
getList
().
size
());
assertPojoEquals
(
dbSmsTemplate
,
pageResult
.
getList
().
get
(
0
));
}
@Test
...
...
@@ -273,11 +271,11 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest {
reqVO
.
setChannelId
(
1L
);
reqVO
.
setCreateTime
((
new
LocalDateTime
[]{
buildTime
(
2021
,
11
,
1
),
buildTime
(
2021
,
12
,
1
)}));
// 调用
List
<
SmsTemplateDO
>
list
=
smsTemplateService
.
getSmsTemplateList
(
reqVO
);
// 断言
assertEquals
(
1
,
list
.
size
());
assertPojoEquals
(
dbSmsTemplate
,
list
.
get
(
0
));
// 调用
List
<
SmsTemplateDO
>
list
=
smsTemplateService
.
getSmsTemplateList
(
reqVO
);
// 断言
assertEquals
(
1
,
list
.
size
());
assertPojoEquals
(
dbSmsTemplate
,
list
.
get
(
0
));
}
@Test
...
...
yudao-module-system/yudao-module-system-biz/src/test/resources/sql/clean.sql
浏览文件 @
ac25dbe2
...
...
@@ -14,6 +14,7 @@ DELETE FROM "system_users";
DELETE
FROM
"system_sms_channel"
;
DELETE
FROM
"system_sms_template"
;
DELETE
FROM
"system_sms_log"
;
DELETE
FROM
"system_sms_code"
;
DELETE
FROM
"system_error_code"
;
DELETE
FROM
"system_social_user"
;
DELETE
FROM
"system_social_user_bind"
;
...
...
yudao-module-system/yudao-module-system-biz/src/test/resources/sql/create_tables.sql
浏览文件 @
ac25dbe2
...
...
@@ -377,6 +377,24 @@ CREATE TABLE IF NOT EXISTS "system_sms_log" (
PRIMARY
KEY
(
"id"
)
)
COMMENT
'短信日志'
;
CREATE
TABLE
IF
NOT
EXISTS
"system_sms_code"
(
"id"
bigint
NOT
NULL
GENERATED
BY
DEFAULT
AS
IDENTITY
,
"mobile"
varchar
(
11
)
NOT
NULL
,
"code"
varchar
(
11
)
NOT
NULL
,
"scene"
bigint
NOT
NULL
,
"create_ip"
varchar
NOT
NULL
,
"today_index"
int
NOT
NULL
,
"used"
bit
NOT
NULL
DEFAULT
FALSE
,
"used_time"
timestamp
DEFAULT
NULL
,
"used_ip"
varchar
NULL
,
"creator"
varchar
(
64
)
DEFAULT
''
,
"create_time"
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
"updater"
varchar
(
64
)
DEFAULT
''
,
"update_time"
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
"deleted"
bit
NOT
NULL
DEFAULT
FALSE
,
PRIMARY
KEY
(
"id"
)
)
COMMENT
'短信日志'
;
CREATE
TABLE
IF
NOT
EXISTS
"system_error_code"
(
"id"
bigint
NOT
NULL
GENERATED
BY
DEFAULT
AS
IDENTITY
,
"type"
tinyint
NOT
NULL
DEFAULT
'0'
,
...
...
@@ -568,19 +586,19 @@ CREATE TABLE IF NOT EXISTS "system_oauth2_code" (
)
COMMENT
'OAuth2 刷新令牌'
;
CREATE
TABLE
IF
NOT
EXISTS
"system_mail_account"
(
"id"
bigint
NOT
NULL
GENERATED
BY
DEFAULT
AS
IDENTITY
,
"mail"
varchar
NOT
NULL
,
"username"
varchar
NOT
NULL
,
"password"
varchar
NOT
NULL
,
"host"
varchar
NOT
NULL
,
"port"
int
NOT
NULL
,
"ssl_enable"
bit
NOT
NULL
,
"creator"
varchar
DEFAULT
''
,
"create_time"
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
"updater"
varchar
DEFAULT
''
,
"update_time"
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
"deleted"
bit
NOT
NULL
DEFAULT
FALSE
,
PRIMARY
KEY
(
"id"
)
"id"
bigint
NOT
NULL
GENERATED
BY
DEFAULT
AS
IDENTITY
,
"mail"
varchar
NOT
NULL
,
"username"
varchar
NOT
NULL
,
"password"
varchar
NOT
NULL
,
"host"
varchar
NOT
NULL
,
"port"
int
NOT
NULL
,
"ssl_enable"
bit
NOT
NULL
,
"creator"
varchar
DEFAULT
''
,
"create_time"
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
"updater"
varchar
DEFAULT
''
,
"update_time"
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
"deleted"
bit
NOT
NULL
DEFAULT
FALSE
,
PRIMARY
KEY
(
"id"
)
)
COMMENT
'邮箱账号表'
;
CREATE
TABLE
IF
NOT
EXISTS
"system_mail_template"
(
...
...
@@ -603,28 +621,28 @@ CREATE TABLE IF NOT EXISTS "system_mail_template" (
)
COMMENT
'邮件模版表'
;
CREATE
TABLE
IF
NOT
EXISTS
"system_mail_log"
(
"id"
bigint
NOT
NULL
GENERATED
BY
DEFAULT
AS
IDENTITY
,
"user_id"
bigint
,
"user_type"
varchar
,
"to_mail"
varchar
NOT
NULL
,
"account_id"
bigint
NOT
NULL
,
"from_mail"
varchar
NOT
NULL
,
"template_id"
bigint
NOT
NULL
,
"template_code"
varchar
NOT
NULL
,
"template_nickname"
varchar
,
"template_title"
varchar
NOT
NULL
,
"template_content"
varchar
NOT
NULL
,
"template_params"
varchar
NOT
NULL
,
"send_status"
varchar
NOT
NULL
,
"send_time"
datetime
,
"send_message_id"
varchar
,
"send_exception"
varchar
,
"creator"
varchar
DEFAULT
''
,
"create_time"
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
"updater"
varchar
DEFAULT
''
,
"update_time"
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
"deleted"
bit
NOT
NULL
DEFAULT
FALSE
,
PRIMARY
KEY
(
"id"
)
"id"
bigint
NOT
NULL
GENERATED
BY
DEFAULT
AS
IDENTITY
,
"user_id"
bigint
,
"user_type"
varchar
,
"to_mail"
varchar
NOT
NULL
,
"account_id"
bigint
NOT
NULL
,
"from_mail"
varchar
NOT
NULL
,
"template_id"
bigint
NOT
NULL
,
"template_code"
varchar
NOT
NULL
,
"template_nickname"
varchar
,
"template_title"
varchar
NOT
NULL
,
"template_content"
varchar
NOT
NULL
,
"template_params"
varchar
NOT
NULL
,
"send_status"
varchar
NOT
NULL
,
"send_time"
datetime
,
"send_message_id"
varchar
,
"send_exception"
varchar
,
"creator"
varchar
DEFAULT
''
,
"create_time"
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
"updater"
varchar
DEFAULT
''
,
"update_time"
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
"deleted"
bit
NOT
NULL
DEFAULT
FALSE
,
PRIMARY
KEY
(
"id"
)
)
COMMENT
'邮件日志表'
;
-- 将该建表 SQL 语句,添加到 yudao-module-system-biz 模块的 test/resources/sql/create_tables.sql 文件里
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论