Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xm-sportstest
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xiamai-test
xm-sportstest
Commits
4162e588
Commit
4162e588
authored
Jul 30, 2024
by
DuJunLi
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
ssh://xmgit.ixm5.cn:10022/xiamai-test/xm-sportstest
parents
a07aa094
dde03b4a
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
1542 additions
and
33 deletions
+1542
-33
src/main/java/com/xiaomai/cases/lunar/reserve/ReserveCTools.java
+128
-1
src/main/java/com/xiaomai/cases/lunar/reserve/TestAddMemberReserve.java
+1
-1
src/main/java/com/xiaomai/cases/lunar/reserve/TestAddToQueue.java
+1
-1
src/main/java/com/xiaomai/cases/lunar/reserve/TestCreateSingleReserve.java
+326
-0
src/main/java/com/xiaomai/cases/lunar/reserve/TestSingleReserveSignIn.java
+256
-0
src/main/java/com/xiaomai/cases/polar/clue/MemberTools.java
+1
-1
src/main/java/com/xiaomai/cases/polar/course/CourseTools.java
+45
-0
src/main/java/com/xiaomai/cases/polar/reserve/ReserveTools.java
+21
-0
src/main/java/com/xiaomai/cases/polar/reserve/group/TestAddMemberReserve.java
+25
-18
src/main/java/com/xiaomai/cases/polar/reserve/group/TestAddToQueue.java
+1
-1
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestReservePerson.java
+243
-10
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestSignReservePerson.java
+494
-0
No files found.
src/main/java/com/xiaomai/cases/lunar/reserve/ReserveCTools.java
View file @
4162e588
...
...
@@ -6,6 +6,7 @@ import com.xiaomai.client.DataUserInfo;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.XMBaseTest
;
import
org.springframework.stereotype.Component
;
...
...
@@ -183,7 +184,7 @@ public class ReserveCTools extends XMBaseTest {
* @param dataUserInfos
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONObject
getDetailById
(
String
reserveId
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
get
Reserve
DetailById
(
String
reserveId
,
DataUserInfo
...
dataUserInfos
)
{
setUP
(
"API_getDetailById"
);
JSONObject
body
=
new
JSONObject
();
...
...
@@ -336,4 +337,130 @@ public class ReserveCTools extends XMBaseTest {
}
/**
* @description: 检查会员课次是否冲突
* @author: xuyamei
* @date: 2024/7/30 11:18
* @param memberId 会员id
* @param scheduleId 课次id
* @return: java.lang.Boolean
**/
public
Boolean
checkMemberConflict
(
String
memberId
,
String
scheduleId
){
setUP
(
"API_checkMemberConflict"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"memberId"
,
memberId
);
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getBoolean
(
"conflict"
);
}
/**
* @description:检查是否支持单次约课、排队
* @author: xuyamei
* @date: 2024/7/30 11:37
* @param addToQueue 是否排队
* @param courseId 课程id
* @param chiefCoachId 主教id
* @param memberId 会员id
* @param scheduleId 课次id
* @param scheduleStartTime 课次开始时间
* @param spanMinutes 上课时长
* @param receivableAmount 单次约课金额
* @return: java.lang.String
**/
public
String
checkAddSingleReserve
(
boolean
addToQueue
,
String
courseId
,
String
chiefCoachId
,
String
memberId
,
String
scheduleId
,
long
scheduleStartTime
,
int
spanMinutes
,
int
receivableAmount
){
setUP
(
"API_checkAddSingleReserve"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"addToQueue"
,
addToQueue
);
JSONArray
areaIds
=
new
JSONArray
();
body
.
put
(
"areaIds"
,
areaIds
);
// 场地
JSONArray
assistantCoachIds
=
new
JSONArray
();
body
.
put
(
"assistantCoachIds"
,
assistantCoachIds
);
// 助教
body
.
put
(
"chiefCoachId"
,
chiefCoachId
);
// 教练
body
.
put
(
"memberId"
,
memberId
);
// 会员id
body
.
put
(
"courseId"
,
courseId
);
// 课次id
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
16
));
// 会员id
body
.
put
(
"receivableAmount"
,
receivableAmount
);
// 会员id
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"scheduleStartTime"
,
scheduleStartTime
);
body
.
put
(
"spanMinutes"
,
spanMinutes
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"resultCode"
);
}
/**
* @description:创建单次约课订单
* @author: xuyamei
* @date: 2024/7/30 11:48
* @param addToQueue 是否排队
* @param chiefCoachId 主教id
* @param memberId 会员id
* @param scheduleId 课次id
* @param scheduleStartTime 课次开始时间
* @param spanMinutes 上课时长
* @param receivableAmount 单次约课金额
* @return: java.lang.String
**/
public
String
createSingleReserve
(
boolean
addToQueue
,
String
courseId
,
String
chiefCoachId
,
String
memberId
,
String
scheduleId
,
long
scheduleStartTime
,
int
spanMinutes
,
int
receivableAmount
){
setUP
(
"API_createSingleReserve"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"addToQueue"
,
addToQueue
);
JSONArray
areaIds
=
new
JSONArray
();
body
.
put
(
"areaIds"
,
areaIds
);
// 场地
JSONArray
assistantCoachIds
=
new
JSONArray
();
body
.
put
(
"assistantCoachIds"
,
assistantCoachIds
);
// 助教
body
.
put
(
"chiefCoachId"
,
chiefCoachId
);
// 教练
body
.
put
(
"memberId"
,
memberId
);
// 会员id
body
.
put
(
"courseId"
,
courseId
);
// 课次id
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
16
));
// 会员id
body
.
put
(
"receivableAmount"
,
receivableAmount
);
// 会员id
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"scheduleStartTime"
,
scheduleStartTime
);
body
.
put
(
"spanMinutes"
,
spanMinutes
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getString
(
"result"
);
}
/**
* @description:根据订单凭证id获取任务信息
* @author: xuyamei
* @date: 2024/7/30 11:56
* @param voucherId :订单id
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONObject
getDetailById
(
String
voucherId
){
setUP
(
"API_singleReserve_getByVoucherId"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"voucherId"
,
voucherId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
}
src/main/java/com/xiaomai/cases/lunar/reserve/TestAddMemberReserve.java
View file @
4162e588
...
...
@@ -182,7 +182,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
int
[]
minuteOffset
=
{
60
,
120
,
180
,
240
,
300
,
360
,
420
,
480
,
540
,
600
,
660
,
720
,
780
,
840
,
900
,
960
,
1020
,
1080
,
1140
,
1200
,
1260
};
Random
random
=
new
Random
();
//1.1-创建排课日程
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
fals
e
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)],
dataUserInfo
);
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
tru
e
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)],
dataUserInfo
);
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
dataUserInfo
);
//统计查询到的目标日程数量
...
...
src/main/java/com/xiaomai/cases/lunar/reserve/TestAddToQueue.java
View file @
4162e588
...
...
@@ -268,7 +268,7 @@ public class TestAddToQueue extends BaseTestImpl {
int
[]
minuteOffset
=
{
60
,
120
,
180
,
240
,
300
,
360
,
420
,
480
,
540
,
600
,
660
,
720
,
780
,
840
,
900
,
960
,
1020
,
1080
,
1140
,
1200
,
1260
};
Random
random
=
new
Random
();
//1.1-创建排课日程
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
fals
e
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)],
dataUserInfo
);
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
tru
e
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)],
dataUserInfo
);
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
dataUserInfo
);
//统计查询到的目标日程数量
...
...
src/main/java/com/xiaomai/cases/lunar/reserve/TestCreateSingleReserve.java
0 → 100644
View file @
4162e588
package
com
.
xiaomai
.
cases
.
lunar
.
reserve
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.cases.polar.course.CourseTools
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.reserve.ReserveTools
;
import
com.xiaomai.cases.polar.schedule.group.GroupScheduleTools
;
import
com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools
;
import
com.xiaomai.cases.polar.setting.rules.RuleTools
;
import
com.xiaomai.client.DataUserInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.reserve
* @Author: xuyamei
* @CreateTime: 2024-07-30 14:44
* @Description: 单次预约
* @Version: 1.0
*/
public
class
TestCreateSingleReserve
extends
BaseTestImpl
{
@Resource
(
name
=
"userTools"
)
UserTools
userTools
;
@Resource
(
name
=
"reserveCTools"
)
ReserveCTools
reserveCTools
;
@Resource
(
name
=
"courseCategoryTools"
)
CourseCategoryTools
courseCategoryTools
;
@Resource
(
name
=
"courseTools"
)
CourseTools
courseTools
;
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
@Resource
(
name
=
"ruleTools"
)
RuleTools
ruleTools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
String
todayStartTimeTamp
=
CommUtil
.
oneKeyGetAddDay
(
1
);
//获取今天结束日期的时间戳
String
todayEndDateTimeTamp
=
CommUtil
.
getNDayEndTimeTamp
(
1
);
Long
scheduleEndTime
=
TimeUtils
.
getTodayEndTime
(
1
);
private
String
ruldId
;
private
String
reserveId
;
private
String
scheduleId
;
private
Long
startTime
;
private
String
courseId
;
private
String
memberId
;
private
String
chiefCoachId
;
private
String
voucherId
;
private
String
benefitId
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_createSingleReserve"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"小程序单次团课预约"
)
public
void
testAddMemberReserve
()
{
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
// 预约规则开启允许排队
JSONObject
getRules
=
ruleTools
.
getGroupBookingRules
();
// 获取场馆团课预约规则
String
id
=
getRules
.
getString
(
"id"
);
// 获取规则id
Random
random
=
new
Random
();
int
bookingSeatCount
=
random
.
nextInt
(
10
)+
1
;
// 席位
ruleTools
.
saveGroupBookingRules
(
id
,
true
,
bookingSeatCount
,
true
,
true
,
random
.
nextInt
(
30
)+
10
,
false
,
random
.
nextInt
(
100
)+
10
,
random
.
nextInt
(
5
)+
1
,
false
,
random
.
nextInt
(
100
)+
10
,
"minutes"
,
false
,
random
.
nextInt
(
100
)+
10
,
"minutes"
);
memberId
=
userTools
.
getMemberInfo
().
getString
(
"memberId"
);
// 创建团课课次
createGroupSchedule
();
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 课次详情获取上课老师和
JSONObject
memberScheduleItemDetail
=
reserveCTools
.
getMemberScheduleItemDetail
(
scheduleId
,
memberId
);
startTime
=
memberScheduleItemDetail
.
getLongValue
(
"startTime"
);
chiefCoachId
=
memberScheduleItemDetail
.
getString
(
"chiefCoachId"
);
// 校验会员加入课次是否有冲突
boolean
checkMemberConflict
=
reserveCTools
.
checkMemberConflict
(
memberId
,
scheduleId
);
if
(
checkMemberConflict
){
Assert
.
assertTrue
(
true
,
"校验会员有课次冲突"
);
}
// 检查是否支持预约
String
checkAddSingleReserve
=
reserveCTools
.
checkAddSingleReserve
(
false
,
courseId
,
chiefCoachId
,
memberId
,
scheduleId
,
startTime
,
10
,
0
);
Assert
.
assertEquals
(
checkAddSingleReserve
,
"SUCCESS"
,
"支持单次付费约课但返回的不是SUCCESS"
);
// 创建单次付费约课
voucherId
=
reserveCTools
.
createSingleReserve
(
false
,
courseId
,
chiefCoachId
,
memberId
,
scheduleId
,
startTime
,
10
,
0
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 通过订单id获取单次约课任务信息
JSONObject
getDetail
=
reserveCTools
.
getDetailById
(
voucherId
);
// 验证单次约课信息
String
[]
result
=
{
"scheduleStartTime"
,
"spanMinutes"
,
"reserveState"
,
"courseId"
,
"memberId"
,
"scheduleId"
,
"courseType"
,
"accountType"
};
String
[]
expect
=
{
String
.
valueOf
(
startTime
),
"10"
,
"SUCCESS"
,
courseId
,
memberId
,
scheduleId
,
"GROUP_CLASS"
,
"SINGLE_RESERVE"
};
for
(
int
i
=
0
;
i
<
result
.
length
-
2
;
i
++){
Assert
.
assertEquals
(
getDetail
.
getString
(
result
[
i
]),
expect
[
i
],
getDetail
.
getString
(
result
[
i
])+
"返回值与预期值不一致:"
+
expect
[
i
]);
}
reserveId
=
getDetail
.
getString
(
"reserveId"
);
benefitId
=
getDetail
.
getString
(
"id"
);
// check 1:查询小程序课次详情,学员是预约状态
String
[]
result1
=
{
"reserveState"
,
"memberId"
,
"scheduleId"
,
"accountType"
};
String
[]
expect1
=
{
"SUCCESS"
,
memberId
,
scheduleId
,
"SINGLE_RESERVE"
};
memberScheduleItemDetail
=
reserveCTools
.
getMemberScheduleItemDetail
(
scheduleId
,
memberId
);
for
(
int
i
=
0
;
i
<
4
;
i
++)
{
Assert
.
assertEquals
(
memberScheduleItemDetail
.
getJSONObject
(
"memberScheduleInfoVO"
).
getString
(
result1
[
i
]),
expect1
[
i
],
"预约产生的数据与实际数据不符合"
+
result
[
i
]
+
":"
+
expect
[
i
]);
}
// check 2:查询小程序预约记录
JSONArray
getPageByMember
=
reserveCTools
.
getPageByMember
(
"SUCCESS"
,
""
,
startTime
,
scheduleEndTime
,
memberId
,
"GROUP_CLASS"
);
boolean
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
resultString
),
expect
[
j
],
"预约产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"memberId"
),
memberId
,
"查询的预约数据不是同一个会员"
);
}
}
Assert
.
assertTrue
(
success
,
"预约记录没有查询到相关信息"
);
// check 3:查询小程序预约详情
JSONObject
getDetailById
=
reserveCTools
.
getReserveDetailById
(
reserveId
);
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getDetailById
.
getString
(
resultString
),
expect
[
j
],
"单次预约产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberId
,
"查询的数据不是同一个会员"
);
// check 4:查询B端预约详情
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"benefitType"
,
"reserveMemberNum"
,
"courseId"
,
"courseType"
,
"scheduleStartTime"
,
"reserveState"
,
"scheduleId"
,
"accountType"
};
expect
=
new
String
[]
{
reserveId
,
benefitId
,
"STORED_VALUE"
,
"1"
,
courseId
,
"GROUP_CLASS"
,
startTime
+
""
,
"SUCCESS"
,
scheduleId
,
"SINGLE_RESERVE"
};
getDetailById
=
reserveTools
.
getDetailById
(
reserveId
,
dataUserInfo
);
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getDetailById
.
getString
(
result
[
j
]),
expect
[
j
],
"单次预约产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberId
,
"查询的单次预约数据不是同一个会员"
);
// check 5:查询B端课次详情
// 课次学员是否包含该会员 且 消耗方式为单次约课
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
,
dataUserInfo
);
JSONArray
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"memberReserveList"
);
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++){
if
(
reserveIds
.
getJSONObject
(
0
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
reserveIds
.
getJSONObject
(
0
).
getString
(
result
[
j
]),
expect
[
j
],
"单次预约产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
}
}
Assert
.
assertTrue
(
success
,
"约课后课次详情学员不在课次中"
);
}
@Test
(
priority
=
2
,
description
=
"取消单次约课"
)
public
void
cancelMemberReserve
(){
reserveCTools
.
cancelMemberReserve
(
reserveId
,
memberId
,
true
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
String
[]
result
=
{
"memberOperation"
,
"memberId"
,
"scheduleId"
};
String
[]
expect
=
{
"TO_RESERVE"
,
memberId
,
scheduleId
};
// check 1:查询小程序课次详情,学员是预约状态
JSONObject
memberScheduleItemDetail
=
reserveCTools
.
getMemberScheduleItemDetail
(
scheduleId
,
memberId
);
for
(
int
i
=
0
;
i
<
result
.
length
;
i
++)
{
Assert
.
assertEquals
(
memberScheduleItemDetail
.
getJSONObject
(
"memberScheduleInfoVO"
).
getString
(
result
[
i
]),
expect
[
i
],
"取消预约产生的数据与实际数据不符合"
+
result
[
i
]
+
":"
+
expect
[
i
]);
}
// 验证单次约课信息
result
=
new
String
[]{
"scheduleStartTime"
,
"spanMinutes"
,
"reserveState"
,
"courseId"
,
"memberId"
,
"scheduleId"
,
"courseType"
,
"accountType"
,
"refundState"
};
expect
=
new
String
[]{
String
.
valueOf
(
startTime
),
"10"
,
"RESERVE_CANCEL"
,
courseId
,
memberId
,
scheduleId
,
"GROUP_CLASS"
,
"SINGLE_RESERVE"
,
"NO_REFUND"
};
// check 2:查询小程序预约记录
JSONArray
getPageByMember
=
reserveCTools
.
getPageByMember
(
"RESERVE_CANCEL"
,
""
,
startTime
,
scheduleEndTime
,
memberId
,
"GROUP_CLASS"
);
boolean
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
resultString
),
expect
[
j
],
"取消预约产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"memberId"
),
memberId
,
"查询的预约数据不是同一个会员"
);
}
}
Assert
.
assertTrue
(
success
,
"取消预约记录没有查询到相关信息"
);
// check 3:查询小程序预约详情
JSONObject
getDetailById
=
reserveCTools
.
getReserveDetailById
(
reserveId
);
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getDetailById
.
getString
(
resultString
),
expect
[
j
],
"单次取消预约产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberId
,
"查询的数据不是同一个会员"
);
// check 4:查询B端预约详情
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"benefitType"
,
"reserveMemberNum"
,
"courseId"
,
"courseType"
,
"scheduleStartTime"
,
"reserveState"
,
"scheduleId"
,
"accountType"
,
"refundState"
};
expect
=
new
String
[]
{
reserveId
,
benefitId
,
"STORED_VALUE"
,
"1"
,
courseId
,
"GROUP_CLASS"
,
startTime
+
""
,
"RESERVE_CANCEL"
,
scheduleId
,
"SINGLE_RESERVE"
,
"NO_REFUND"
};
getDetailById
=
reserveTools
.
getDetailById
(
reserveId
,
dataUserInfo
);
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getDetailById
.
getString
(
result
[
j
]),
expect
[
j
],
"单次取消预约产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberId
,
"查询的单次预约数据不是同一个会员"
);
// check 5:查询B端课次详情
// 课次学员是否包含该会员 且 消耗方式为单次约课
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
,
dataUserInfo
);
JSONArray
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"reserveIds"
);
Assert
.
assertTrue
(
reserveIds
.
size
()==
0
,
"取消约课后课次详情学员还在课次中"
);
// check 6:查询订单状态为已作废
JSONObject
fetchDetailById
=
orderTools
.
getDetail
(
voucherId
,
dataUserInfo
);
Assert
.
assertEquals
(
fetchDetailById
.
getJSONObject
(
"result"
).
getString
(
"state"
),
"DISCARD"
,
"单次付费约课取消订单状态不是已作废"
);
Assert
.
assertEquals
(
fetchDetailById
.
getJSONObject
(
"result"
).
getString
(
"discardMemo"
),
"取消预约/排队,自动作废订单"
,
"单次付费约课取消备注不是:取消预约/排队,自动作废订单"
);
}
@Test
(
priority
=
3
)
public
void
del
(){
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
// 删除排课数据
groupScheduleTools
.
delGroupRuleSchedule
(
ruldId
,
true
,
dataUserInfo
);
// 删除课次
groupScheduleTools
.
delGroupScheduleItem
(
scheduleId
,
dataUserInfo
);
}
// 创建团课课次
public
void
createGroupSchedule
(){
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
// 查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"瑜伽"
);
courseId
=
courseTools
.
getPersonalOrGroupCourseId
(
"GROUP"
,
"单次付费团课"
,
categoryId
,
"STUDIO"
,
""
,
2
,
1
,
dataUserInfo
).
getString
(
0
);
// 创建排课
int
[]
minuteOffset
=
{
60
,
120
,
180
,
240
,
300
,
360
,
420
,
480
,
540
,
600
,
660
,
720
,
780
,
840
,
900
,
960
,
1020
,
1080
,
1140
,
1200
,
1260
};
Random
random
=
new
Random
();
//1.1-创建排课日程
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
true
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)],
dataUserInfo
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
dataUserInfo
);
//统计查询到的目标日程数量
ruldId
=
XMJSONPath
.
readPath
(
getGroupRuleScheduleList
.
getJSONObject
(
0
),
"$.ruleId"
);
Long
scheduleEndTime
=
TimeUtils
.
getTodayEndTime
(
1
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 查询课次id
JSONArray
memberTimetable
=
reserveCTools
.
memberTimetable
(
memberId
,
Long
.
valueOf
(
todayStartTimeTamp
),
scheduleEndTime
);
for
(
int
i
=
0
;
i
<
memberTimetable
.
size
();
i
++){
if
(
memberTimetable
.
getJSONObject
(
i
).
containsKey
(
"ruleId"
)
&&
memberTimetable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
scheduleId
=
memberTimetable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
}
// 修改课程支持单次约课
courseTools
.
editGroupCourse
(
categoryId
,
courseId
,
"单次付费团课"
,
10
,
true
,
0
,
dataUserInfo
);
}
}
src/main/java/com/xiaomai/cases/lunar/reserve/TestSingleReserveSignIn.java
0 → 100644
View file @
4162e588
package
com
.
xiaomai
.
cases
.
lunar
.
reserve
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.cases.polar.course.CourseTools
;
import
com.xiaomai.cases.polar.reserve.ReserveTools
;
import
com.xiaomai.cases.polar.schedule.group.GroupScheduleTools
;
import
com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools
;
import
com.xiaomai.cases.polar.setting.rules.RuleTools
;
import
com.xiaomai.client.DataUserInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.reserve
* @Author: xuyamei
* @CreateTime: 2024-07-30 16:57
* @Description: 单次约课签到
* @Version: 1.0
*/
public
class
TestSingleReserveSignIn
extends
BaseTestImpl
{
@Resource
(
name
=
"userTools"
)
UserTools
userTools
;
@Resource
(
name
=
"reserveCTools"
)
ReserveCTools
reserveCTools
;
@Resource
(
name
=
"courseCategoryTools"
)
CourseCategoryTools
courseCategoryTools
;
@Resource
(
name
=
"courseTools"
)
CourseTools
courseTools
;
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
@Resource
(
name
=
"ruleTools"
)
RuleTools
ruleTools
;
String
todayStartTimeTamp
=
CommUtil
.
oneKeyGetAddDay
(
0
);
//获取今天结束日期的时间戳
String
todayEndDateTimeTamp
=
CommUtil
.
getNDayEndTimeTamp
(
0
);
Long
scheduleEndTime
=
TimeUtils
.
getTodayEndTime
(
0
);
private
String
ruldId
;
private
String
reserveId
;
private
String
scheduleId
;
private
Long
startTime
;
private
String
courseId
;
private
String
memberId
;
private
String
chiefCoachId
;
private
String
voucherId
;
private
String
benefitId
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_createSingleReserve"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"小程序单次团课预约"
)
public
void
testAddMemberReserve
()
{
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
// 预约规则开启允许排队
JSONObject
getRules
=
ruleTools
.
getGroupBookingRules
();
// 获取场馆团课预约规则
String
id
=
getRules
.
getString
(
"id"
);
// 获取规则id
Random
random
=
new
Random
();
int
bookingSeatCount
=
random
.
nextInt
(
10
)+
1
;
// 席位
ruleTools
.
saveGroupBookingRules
(
id
,
true
,
bookingSeatCount
,
true
,
true
,
999
,
false
,
random
.
nextInt
(
100
)+
10
,
random
.
nextInt
(
5
)+
1
,
false
,
random
.
nextInt
(
100
)+
10
,
"minutes"
,
false
,
random
.
nextInt
(
100
)+
10
,
"minutes"
);
memberId
=
userTools
.
getMemberInfo
().
getString
(
"memberId"
);
// 创建团课课次
LocalDateTime
currentDateTime
=
LocalDateTime
.
now
();
int
hour
=
currentDateTime
.
getHour
();
int
minutes
=
currentDateTime
.
getMinute
();
int
minute
=
hour
*
60
+
minutes
+
10
;
createGroupSchedule
(
minute
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 课次详情获取上课老师和
JSONObject
memberScheduleItemDetail
=
reserveCTools
.
getMemberScheduleItemDetail
(
scheduleId
,
memberId
);
startTime
=
memberScheduleItemDetail
.
getLongValue
(
"startTime"
);
chiefCoachId
=
memberScheduleItemDetail
.
getString
(
"chiefCoachId"
);
// 校验会员加入课次是否有冲突
boolean
checkMemberConflict
=
reserveCTools
.
checkMemberConflict
(
memberId
,
scheduleId
);
if
(
checkMemberConflict
){
Assert
.
assertTrue
(
true
,
"校验会员有课次冲突"
);
}
// 检查是否支持预约
String
checkAddSingleReserve
=
reserveCTools
.
checkAddSingleReserve
(
false
,
courseId
,
chiefCoachId
,
memberId
,
scheduleId
,
startTime
,
10
,
0
);
Assert
.
assertEquals
(
checkAddSingleReserve
,
"SUCCESS"
,
"支持单次付费约课但返回的不是SUCCESS"
);
// 创建单次付费约课
voucherId
=
reserveCTools
.
createSingleReserve
(
false
,
courseId
,
chiefCoachId
,
memberId
,
scheduleId
,
startTime
,
10
,
0
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 通过订单id获取单次约课任务信息
JSONObject
getDetail
=
reserveCTools
.
getDetailById
(
voucherId
);
// 验证单次约课信息
String
[]
result
=
{
"scheduleStartTime"
,
"spanMinutes"
,
"reserveState"
,
"courseId"
,
"memberId"
,
"scheduleId"
,
"courseType"
,
"accountType"
};
String
[]
expect
=
{
String
.
valueOf
(
startTime
),
"10"
,
"SUCCESS"
,
courseId
,
memberId
,
scheduleId
,
"GROUP_CLASS"
,
"SINGLE_RESERVE"
};
for
(
int
i
=
0
;
i
<
result
.
length
-
2
;
i
++){
Assert
.
assertEquals
(
getDetail
.
getString
(
result
[
i
]),
expect
[
i
],
getDetail
.
getString
(
result
[
i
])+
"返回值与预期值不一致:"
+
expect
[
i
]);
}
reserveId
=
getDetail
.
getString
(
"reserveId"
);
benefitId
=
getDetail
.
getString
(
"id"
);
// 手动签到
reserveCTools
.
signIn
(
true
,
reserveId
,
memberId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 签到完成后check
// check 1:查询小程序课次详情,学员是预约状态
String
[]
result1
=
{
"reserveState"
,
"memberId"
,
"scheduleId"
,
"accountType"
,
"signInState"
};
String
[]
expect1
=
{
"SUCCESS"
,
memberId
,
scheduleId
,
"SINGLE_RESERVE"
,
"SIGNED"
};
memberScheduleItemDetail
=
reserveCTools
.
getMemberScheduleItemDetail
(
scheduleId
,
memberId
);
for
(
int
i
=
0
;
i
<
4
;
i
++)
{
Assert
.
assertEquals
(
memberScheduleItemDetail
.
getJSONObject
(
"memberScheduleInfoVO"
).
getString
(
result1
[
i
]),
expect1
[
i
],
"预约产生的数据与实际数据不符合"
+
result
[
i
]
+
":"
+
expect
[
i
]);
}
// check 2:查询小程序预约记录
JSONArray
getPageByMember
=
reserveCTools
.
getPageByMember
(
"SIGNED"
,
""
,
startTime
,
scheduleEndTime
,
memberId
,
"GROUP_CLASS"
);
boolean
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
resultString
),
expect
[
j
],
"单次预约签到产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"memberId"
),
memberId
,
"查询的预约数据不是同一个会员"
);
}
}
Assert
.
assertTrue
(
success
,
"预约记录没有查询到相关信息"
);
// check 3:查询小程序预约详情
JSONObject
getDetailById
=
reserveCTools
.
getReserveDetailById
(
reserveId
);
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getDetailById
.
getString
(
resultString
),
expect
[
j
],
"单次预约签到产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberId
,
"查询的数据不是同一个会员"
);
// check 4:查询B端预约详情
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"benefitType"
,
"reserveMemberNum"
,
"courseId"
,
"courseType"
,
"scheduleStartTime"
,
"reserveState"
,
"scheduleId"
,
"accountType"
,
"signInState"
};
expect
=
new
String
[]
{
reserveId
,
benefitId
,
"STORED_VALUE"
,
"1"
,
courseId
,
"GROUP_CLASS"
,
startTime
+
""
,
"SUCCESS"
,
scheduleId
,
"SINGLE_RESERVE"
,
"SIGNED"
};
getDetailById
=
reserveTools
.
getDetailById
(
reserveId
,
dataUserInfo
);
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getDetailById
.
getString
(
result
[
j
]),
expect
[
j
],
"单次预约签到产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberId
,
"查询的单次预约数据不是同一个会员"
);
// check 5:查询B端课次详情
// 课次学员是否包含该会员 且 消耗方式为单次约课
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
,
dataUserInfo
);
JSONArray
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"memberReserveList"
);
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++){
if
(
reserveIds
.
getJSONObject
(
0
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
reserveIds
.
getJSONObject
(
0
).
getString
(
result
[
j
]),
expect
[
j
],
"单次预约签到产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
expect
[
j
]);
}
}
}
Assert
.
assertTrue
(
success
,
"单次预约签到后课次详情学员不在课次中"
);
}
// 创建团课课次
public
void
createGroupSchedule
(
int
minute
){
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
// 查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"瑜伽"
);
courseId
=
courseTools
.
getPersonalOrGroupCourseId
(
"GROUP"
,
"单次付费团课签到"
,
categoryId
,
"STUDIO"
,
""
,
2
,
1
,
dataUserInfo
).
getString
(
0
);
// 创建排课
//1.1-创建排课日程
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
true
,
1
,
minute
,
dataUserInfo
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
dataApi
.
getLoginInfo
().
getAdminId
(),
dataUserInfo
);
//统计查询到的目标日程数量
ruldId
=
XMJSONPath
.
readPath
(
getGroupRuleScheduleList
.
getJSONObject
(
0
),
"$.ruleId"
);
Long
scheduleEndTime
=
TimeUtils
.
getTodayEndTime
(
1
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 查询课次id
JSONArray
memberTimetable
=
reserveCTools
.
memberTimetable
(
memberId
,
Long
.
valueOf
(
todayStartTimeTamp
),
scheduleEndTime
);
for
(
int
i
=
0
;
i
<
memberTimetable
.
size
();
i
++){
if
(
memberTimetable
.
getJSONObject
(
i
).
containsKey
(
"ruleId"
)
&&
memberTimetable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
scheduleId
=
memberTimetable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
}
// 修改课程支持单次约课
courseTools
.
editGroupCourse
(
categoryId
,
courseId
,
"单次付费团课签到"
,
10
,
true
,
0
,
dataUserInfo
);
}
}
src/main/java/com/xiaomai/cases/polar/clue/MemberTools.java
View file @
4162e588
...
...
@@ -30,7 +30,7 @@ public class MemberTools extends BaseTestImpl {
super
.
beforeDataRequest
(
userInfos
);
Random
random
=
new
Random
();
String
[]
idCardType
=
{
"IDENTITY"
,
"SAR_PERMIT"
,
"
idCardType
"
};
//身份证、港澳通行证、护照
String
[]
idCardType
=
{
"IDENTITY"
,
"SAR_PERMIT"
,
"
PASSPORT
"
};
//身份证、港澳通行证、护照
String
[]
intention
=
{
"HIGH"
,
"MIDDLE"
,
"LOW"
};
//意向度:高、中、低
JSONObject
object
=
new
JSONObject
();
...
...
src/main/java/com/xiaomai/cases/polar/course/CourseTools.java
View file @
4162e588
...
...
@@ -454,4 +454,49 @@ public class CourseTools extends XMBaseTest {
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* @description:编辑团课
* @author: xuyamei
* @date: 2024/7/30 10:57
* @param categoryId 课程分类
* @param courseId 课程id
* @param courseName 课程名称
* @param duration 时长
* @param singleReserve 是否支持单次预约
* @param reservePrice 单次预约价格
* @param dataUserInfo
* @return: void
**/
public
void
editGroupCourse
(
String
categoryId
,
String
courseId
,
String
courseName
,
int
duration
,
boolean
singleReserve
,
int
reservePrice
,
DataUserInfo
...
dataUserInfo
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Course
)
.
setApiName
(
"API_editGroupCourse"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfo
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"categoryId"
,
categoryId
);
body
.
put
(
"courseName"
,
courseName
);
body
.
put
(
"duration"
,
duration
);
// 时长
body
.
put
(
"difficulty"
,
3
);
// 难度
body
.
put
(
"color"
,
"#AACF53"
);
body
.
put
(
"calorie"
,
"0"
);
// 卡路里
body
.
put
(
"coverId"
,
"0"
);
body
.
put
(
"timeUnit"
,
"MINUTE"
);
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"sourceId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
// 来源:场馆、品牌
body
.
put
(
"sourceType"
,
"STUDIO"
);
// 来源类型:场馆、品牌
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
// 品牌
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandCourseId"
,
courseId
);
body
.
put
(
"singleReserve"
,
singleReserve
);
// 是否支持单次约课
if
(
singleReserve
){
body
.
put
(
"reservePrice"
,
reservePrice
);
// 单次预约的价格
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
}
src/main/java/com/xiaomai/cases/polar/reserve/ReserveTools.java
View file @
4162e588
...
...
@@ -646,4 +646,25 @@ public class ReserveTools extends XMBaseTest {
}
}
/**
* @description:删除私教课次
* @author: xuyamei
* @date: 2024/7/29 16:13
* @param scheduleId : 课次id
* @return: void
**/
public
void
delPersonalScheduleItem
(
String
scheduleId
){
setUp
(
"API_delPersonalScheduleItem"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"applyRestRule"
,
false
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
}
src/main/java/com/xiaomai/cases/polar/reserve/group/TestAddMemberReserve.java
View file @
4162e588
...
...
@@ -64,18 +64,15 @@ public class TestAddMemberReserve extends BaseTestImpl {
String
todayStartTimeTamp
=
CommUtil
.
oneKeyGetAddDay
(
0
);
//获取今天结束日期的时间戳
String
todayEndDateTimeTamp
=
CommUtil
.
getNDayEndTimeTamp
(
0
);
private
String
ruldId
;
private
String
benefitId
;
private
String
memberId
;
private
String
scheduleId
;
private
Long
startTime
;
private
String
courseId
;
private
String
reserveId
;
JSONArray
memberInfo1
=
new
JSONArray
();
JSONArray
memberInfo2
=
new
JSONArray
();
private
String
memberCardId
;
@BeforeMethod
@Override
...
...
@@ -121,6 +118,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
throw
new
RuntimeException
(
e
);
}
String
memberId
;
// 查询存量的学员没有则创建学员
if
(
tools
.
commonSearch
(
"约课学员sandy"
,
"NORMAL"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId
=
tools
.
commonSearch
(
"约课学员sandy"
,
"NORMAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
...
...
@@ -131,6 +129,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
else
{
memberId
=
memberTools
.
create
(
"约课学员sandy"
,
RandomStringUtil
.
randomMobile
(
"203"
)).
getString
(
"result"
);
}
memberInfo1
.
add
(
memberId
);
// 查询是否有可用的会员卡,没有则购买
...
...
@@ -146,14 +145,18 @@ public class TestAddMemberReserve extends BaseTestImpl {
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId
,
TimeUtils
.
getTodayTime
());
}
// 查询权益
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
memberCardId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"memberCardId"
);
String
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
String
memberCardId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"memberCardId"
);
memberInfo1
.
add
(
benefitId
);
memberInfo1
.
add
(
memberCardId
);
// 查询课次详情 查课次的开始时间
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
startTime
=
getScheduleItemDetail
.
getLongValue
(
"startTime"
);
// 预约
reserveId
=
reserveTools
.
addReserve
(
""
,
""
,
benefitId
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberId
,
1
,
scheduleId
,
startTime
,
true
);
String
reserveId
=
reserveTools
.
addReserve
(
""
,
""
,
benefitId
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberId
,
1
,
scheduleId
,
startTime
,
true
);
memberInfo1
.
add
(
reserveId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
...
...
@@ -221,7 +224,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
@Test
(
priority
=
1
,
description
=
"学员已经在课次中,无需重复添加"
)
public
void
testAddMemberReserve2
(){
reserveTools
.
addReserve
(
""
,
""
,
benefitId
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberId
,
1
,
scheduleId
,
startTime
,
false
);
reserveTools
.
addReserve
(
""
,
""
,
memberInfo1
.
getString
(
1
),
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberInfo1
.
getString
(
0
)
,
1
,
scheduleId
,
startTime
,
false
);
String
message
=
dataApi
.
getBodyInJSON
().
getString
(
"message"
);
Assert
.
assertTrue
(
message
.
equals
(
"会员已约该课程,不可重复预约"
)
||
message
.
equals
(
"预约失败,无需重复添加"
));
}
...
...
@@ -249,6 +252,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
else
{
memberId2
=
memberTools
.
create
(
"约课学员susan"
,
RandomStringUtil
.
randomMobile
(
"203"
)).
getString
(
"result"
);
}
memberInfo2
.
add
(
memberId2
);
// 查询是否有可用的会员卡,没有则购买
JSONArray
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId2
,
TimeUtils
.
getTodayTime
());
...
...
@@ -262,7 +266,10 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId2
,
TimeUtils
.
getTodayTime
());
}
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
String
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
String
memberCardId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"memberCardId"
);
memberInfo2
.
add
(
benefitId
);
memberInfo2
.
add
(
memberCardId
);
reserveTools
.
addReserve
(
""
,
""
,
benefitId
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberId2
,
1
,
scheduleId
,
startTime
,
true
);
String
resultCode
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"resultCode"
);
...
...
@@ -279,7 +286,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
@Test
(
dataProvider
=
"dataProvider"
,
priority
=
3
)
public
void
testCancelMemberReserve
(
boolean
success
,
String
message
){
reserveTools
.
cancelMemberReserve
(
reserveId
,
success
);
reserveTools
.
cancelMemberReserve
(
memberInfo1
.
getString
(
3
)
,
success
);
Assert
.
assertEquals
(
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
contains
(
message
),
true
);
try
{
Thread
.
sleep
(
2000
);
...
...
@@ -292,36 +299,36 @@ public class TestAddMemberReserve extends BaseTestImpl {
JSONArray
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"reserveIds"
);
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++){
if
(
reserveIds
.
getString
(
i
).
equals
(
reserveId
)){
if
(
reserveIds
.
getString
(
i
).
equals
(
memberInfo1
.
getString
(
3
)
)){
success
=
true
;
}
}
Assert
.
assertFalse
(
success
,
"取消约课后课次详情学员还在课次中"
);
// check 2:会员详情 - 预约记录已取消
JSONArray
getPageByMember
=
reserveTools
.
getPageByMember
(
courseId
,
"RESERVE_CANCEL"
,
""
,
""
,
startTime
,
TimeUtils
.
getTodayEndTime
(),
memberI
d
,
"GROUP_CLASS"
);
JSONArray
getPageByMember
=
reserveTools
.
getPageByMember
(
courseId
,
"RESERVE_CANCEL"
,
""
,
""
,
startTime
,
TimeUtils
.
getTodayEndTime
(),
memberI
nfo1
.
getString
(
0
)
,
"GROUP_CLASS"
);
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
memberInfo1
.
getString
(
3
)
)){
success
=
true
;
}
}
Assert
.
assertTrue
(
success
,
"取消约课后查询取消状态在会员详情页面未查询到相关信息"
);
// check 3:预约记录列表中已取消
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"RESERVE_CANCEL"
,
""
,
""
,
startTime
,
TimeUtils
.
getTodayEndTime
(),
memberI
d
,
"GROUP_CLASS"
,
""
);
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"RESERVE_CANCEL"
,
""
,
""
,
startTime
,
TimeUtils
.
getTodayEndTime
(),
memberI
nfo1
.
getString
(
0
)
,
"GROUP_CLASS"
,
""
);
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByStudio
.
size
();
i
++){
if
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
if
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
memberInfo1
.
getString
(
3
)
)){
success
=
true
;
}
}
Assert
.
assertTrue
(
success
,
"取消约课后在约课记录查询取消状态没有查询到相关信息"
);
// check 3: 会员卡消耗记录中包含该记录锁定的次数释放
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
memberInfo1
.
getString
(
1
),
memberInfo1
.
getString
(
2
)
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfUsablePurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
reserveId
,
"CANCEL_RESERVE"
,
"1.00"
};
String
[]
respect
=
new
String
[]
{
memberInfo1
.
getString
(
3
)
,
"CANCEL_RESERVE"
,
"1.00"
};
String
[]
message1
=
new
String
[]
{
"会员卡消耗记录中记录的资源id与实际约课记录id不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录类型不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录余额不符合"
};
for
(
int
i
=
0
;
i
<
result2
.
length
;
i
++){
Assert
.
assertEquals
(
consumeRecord
.
getJSONObject
(
0
).
getString
(
result2
[
i
]),
respect
[
i
],
message1
[
i
]);
...
...
src/main/java/com/xiaomai/cases/polar/reserve/group/TestAddToQueue.java
View file @
4162e588
...
...
@@ -207,7 +207,7 @@ public class TestAddToQueue extends BaseTestImpl {
Assert
.
assertEquals
(
getDetailById
.
getString
(
"queueSort"
),
"1"
,
"第一位的学员取消排队后排队名次应该是第1位"
);
// 操作3:将约课的学员取消
reserveTools
.
cancelMemberReserve
(
memberId1
.
getString
(
2
),
true
);
reserveTools
.
cancelMemberReserve
(
memberId1
.
getString
(
3
),
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
...
...
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestReservePerson.java
View file @
4162e588
...
...
@@ -32,7 +32,7 @@ import java.util.Random;
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-26 16:25
* @Description: 一对一私教课预约
* @Description: 一对一
和一对多
私教课预约
* @Version: 1.0
*/
public
class
TestReservePerson
extends
BaseTestImpl
{
...
...
@@ -69,6 +69,9 @@ public class TestReservePerson extends BaseTestImpl {
private
String
coachedId
;
private
String
memberCardId
;
private
String
reserveId
;
JSONArray
member2
=
new
JSONArray
();
JSONArray
member1
=
new
JSONArray
();
@BeforeClass
@Override
public
void
beforeTest
()
{
...
...
@@ -78,8 +81,7 @@ public class TestReservePerson extends BaseTestImpl {
@Test
public
void
testReservePerson
(){
public
void
testReservePerson
(){
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"瑜伽"
);
...
...
@@ -151,13 +153,15 @@ public class TestReservePerson extends BaseTestImpl {
// 从课表查询scheduleId
JSONArray
personalScheduleTable
=
reserveTools
.
getPersonalScheduleTable
(
timestamp
,
TimeUtils
.
getTodayEndTime
(),
courseId
);
for
(
int
i
=
0
;
i
<
personalScheduleTable
.
size
();
i
++){
System
.
out
.
println
(
"personalScheduleTable.getJSONObject(i).getString(\"startTime\").equals(String.valueOf(timestamp)):"
+
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"startTime"
).
equals
(
String
.
valueOf
(
timestamp
)));
if
(
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"startTime"
).
equals
(
String
.
valueOf
(
timestamp
))){
scheduleId
=
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
JSONArray
personalScheduleTable
=
reserveTools
.
getPersonalScheduleTable
(
timestamp
,
TimeUtils
.
getTodayEndTime
(),
courseId
);
for
(
int
i
=
0
;
i
<
personalScheduleTable
.
size
();
i
++)
{
for
(
int
j
=
0
;
j
<
personalScheduleTable
.
getJSONObject
(
i
).
getJSONArray
(
"reserveIds"
).
size
();
j
++){
if
(
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"startTime"
).
equals
(
String
.
valueOf
(
timestamp
))
&&
personalScheduleTable
.
getJSONObject
(
i
).
getJSONArray
(
"reserveIds"
).
getString
(
j
).
equals
(
reserveId
))
{
scheduleId
=
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
}
}
// check 1:课次学员是否包含该会员
...
...
@@ -260,7 +264,7 @@ public class TestReservePerson extends BaseTestImpl {
}
}
// check
3
: 会员卡消耗记录中包含该记录锁定的次数释放
// check
4
: 会员卡消耗记录中包含该记录锁定的次数释放
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfUsablePurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
reserveId
,
"CANCEL_RESERVE"
,
"1.00"
};
...
...
@@ -271,6 +275,235 @@ public class TestReservePerson extends BaseTestImpl {
}
@Test
(
description
=
"预约1VN课次,其他学员可再次进行预约"
,
priority
=
2
)
public
void
testReservePerson_1VN
()
{
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"瑜伽"
);
courseId
=
courseTools
.
getPersonalOrGroupCourseId
(
"PERSONAL"
,
"普拉提器械1V3私教课程"
,
categoryId
,
"STUDIO"
,
"ONE_TO_MANY"
,
3
,
1
).
getString
(
0
);
String
courseName
=
courseTools
.
getPersonalOrGroupCourseId
(
"PERSONAL"
,
"普拉提器械1V3私教课程"
,
categoryId
,
"STUDIO"
,
"ONE_TO_MANY"
,
3
,
1
).
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 第二步:查询存量的学员,如果没有则新建
member1
=
createMember
(
"1V3私教约课学员李萌"
);
// 第三步:查询存量的私教教练,并将教练添加到课程中
// 获取到员工
// 获取教练列表
JSONObject
pageStudioPersonalCoach
=
reserveTools
.
pageStudioPersonalCoach
(
""
);
int
total
=
pageStudioPersonalCoach
.
getInteger
(
"total"
);
Random
rand
=
new
Random
();
// 随机取1个教练
coachedId
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
// 编辑私教课程教练添加到课程中
courseTools
.
editPersonalCourse
(
categoryId
,
courseId
,
courseName
,
10
,
coachedId
,
"3"
);
// 第四步:创建私教特殊可约时间
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
// 可约时间类型
specialTimeInfoRequest
.
put
(
"dutyType"
,
"ON_DUTY"
);
// 设置特定日期
JSONArray
selectedDates
=
new
JSONArray
();
selectedDates
.
add
(
TimeUtils
.
getTodayTime
());
specialTimeInfoRequest
.
put
(
"selectedDates"
,
selectedDates
);
// 如果是可约时间非全天休息,则传可约时间段
// 时间段 00:00 ~ 23:59
JSONArray
timePeriodInfos
=
new
JSONArray
();
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
60
);
timeInfo
.
put
(
"spanMinutes"
,
1380
);
timePeriodInfos
.
add
(
timeInfo
);
specialTimeInfoRequest
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
// 设置特殊可约时间
reserveTools
.
createSpecialDate
(
coachedId
,
"ON_DUTY"
,
specialTimeInfoRequest
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 第五步:获取老师第一条可约时间
JSONArray
personalCoachTime
=
reserveTools
.
getPersonalTimeBlocks
(
coachedId
,
courseId
,
TimeUtils
.
getTodayTime
());
// 获取当前日期的Calendar实例
Calendar
calendar
=
Calendar
.
getInstance
();
// 获取第一条的步长 转换成时间戳
int
minuteOffset
=
personalCoachTime
.
getJSONObject
(
0
).
getIntValue
(
"minuteOffset"
)/
60
;
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
minuteOffset
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
// 将Calendar对象转换为时间戳
timestamp
=
calendar
.
getTimeInMillis
();
// 李萌预约生成课次
reserveId
=
reserveTools
.
addPersonalReserve
(
""
,
courseId
,
coachedId
,
memberId
,
benefitId
,
10
,
1
,
""
,
timestamp
,
true
);
member1
.
add
(
reserveId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 从课表查询scheduleId
JSONArray
personalScheduleTable
=
reserveTools
.
getPersonalScheduleTable
(
timestamp
,
TimeUtils
.
getTodayEndTime
(),
courseId
);
for
(
int
i
=
0
;
i
<
personalScheduleTable
.
size
();
i
++)
{
for
(
int
j
=
0
;
j
<
personalScheduleTable
.
getJSONObject
(
i
).
getJSONArray
(
"reserveIds"
).
size
();
j
++){
if
(
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"startTime"
).
equals
(
String
.
valueOf
(
timestamp
))
&&
personalScheduleTable
.
getJSONObject
(
i
).
getJSONArray
(
"reserveIds"
).
getString
(
j
).
equals
(
reserveId
))
{
scheduleId
=
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
}
}
// check 1:课次学员是否包含该会员
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
JSONArray
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"reserveIds"
);
boolean
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++){
if
(
reserveIds
.
getString
(
i
).
equals
(
member1
.
getString
(
3
))){
success
=
true
;
}
}
Assert
.
assertTrue
(
success
,
"约课后课次详情学员不在课次中"
);
// 学员2进行预约
member2
=
createMember
(
"1V3私教约课学员2程晨"
);
reserveId
=
reserveTools
.
addPersonalReserve
(
""
,
courseId
,
coachedId
,
member2
.
getString
(
0
),
member2
.
getString
(
1
),
10
,
1
,
scheduleId
,
timestamp
,
true
);
member2
.
add
(
reserveId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1:课次学员是否包含该会员
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"reserveIds"
);
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++){
if
(
reserveIds
.
getString
(
i
).
equals
(
member2
.
getString
(
3
))){
success
=
true
;
}
}
Assert
.
assertTrue
(
success
,
"约课后课次详情学员不在课次中"
);
// check 2: 预约记录是否包含该预约
// check 2.1 学员详情预约记录
JSONArray
getPageByMember
=
reserveTools
.
getPageByMember
(
courseId
,
"SUCCESS"
,
""
,
coachedId
,
timestamp
,
todayEndDateTimeTamp
,
memberId
,
"PERSONAL"
);
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseId"
,
"courseType"
,
"scheduleStartTime"
,
"reserveState"
,
"scheduleId"
};
String
[]
resultData
=
new
String
[]
{
member2
.
getString
(
3
),
member2
.
getString
(
1
),
"1"
,
courseId
,
"PERSONAL"
,
timestamp
+
""
,
"SUCCESS"
,
scheduleId
};
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
member2
.
getString
(
3
))){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
result
[
j
]),
resultData
[
j
],
"约课产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
}
}
Assert
.
assertTrue
(
success
,
"约课后在会员详情页面未查询到相关信息"
);
// check 2.2 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"SUCCESS"
,
""
,
coachedId
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
member2
.
getString
(
0
),
"PERSONAL"
,
""
);
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByStudio
.
size
();
i
++){
if
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
member2
.
getString
(
3
))){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
result
[
j
]),
resultData
[
j
],
"约课产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"memberId"
),
member2
.
getString
(
0
),
"查询的约课数据不是同一个会员"
);
}
}
Assert
.
assertTrue
(
success
,
"约课后在约课记录没有查询到相关信息"
);
// check 2.3 预约记录详情
JSONObject
getDetailById
=
reserveTools
.
getDetailById
(
member2
.
getString
(
3
));
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getDetailById
.
getString
(
result
[
j
]),
resultData
[
j
],
"约课产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
member2
.
getString
(
0
),
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录锁定
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
member2
.
getString
(
1
),
member2
.
getString
(
2
)).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfUsablePurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
member2
.
getString
(
3
),
"RESERVE"
,
"-1.00"
};
String
[]
message
=
new
String
[]
{
"会员卡消耗记录中记录的资源id与实际约课记录id不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录类型不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录余额不符合"
};
for
(
int
i
=
0
;
i
<
result2
.
length
;
i
++){
Assert
.
assertEquals
(
consumeRecord
.
getJSONObject
(
0
).
getString
(
result2
[
i
]),
respect
[
i
],
message
[
i
]);
}
}
@Test
(
description
=
"删除课次"
,
priority
=
3
)
public
void
testReservePerson_del
()
{
// 课次中的一个会员取消预约
reserveTools
.
cancelMemberReserve
(
member1
.
getString
(
3
),
true
);
// check 1:课次还存在 且课次中不包含该学员
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
JSONArray
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"reserveIds"
);
boolean
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++){
if
(
reserveIds
.
getString
(
i
).
equals
(
member1
.
getString
(
3
))){
success
=
true
;
}
}
Assert
.
assertFalse
(
success
,
"取消约课后课次详情学员还在课次中"
);
// 删除该课次
reserveTools
.
delPersonalScheduleItem
(
scheduleId
);
// 课次学员取消预约
// check 1:课次已删除,课表没有该条数据
JSONArray
personalScheduleTable
=
reserveTools
.
getPersonalScheduleTable
(
timestamp
,
TimeUtils
.
getTodayEndTime
(),
courseId
);
boolean
flag
=
true
;
if
(
personalScheduleTable
!=
null
){
for
(
int
i
=
0
;
i
<
personalScheduleTable
.
size
();
i
++){
if
(
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
).
equals
(
scheduleId
)){
scheduleId
=
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
flag
=
false
;
break
;
}
}
}
Assert
.
assertTrue
(
flag
,
"取消约课后课次未删除"
);
// check 2:会员详情 - 预约记录已取消
JSONArray
getPageByMember
=
reserveTools
.
getPageByMember
(
courseId
,
"RESERVE_CANCEL"
,
""
,
""
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
member2
.
getString
(
0
),
"GROUP_CLASS"
);
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
member2
.
getString
(
3
))){
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"reserveState"
),
"RESERVE_CANCEL"
,
"取消约课状态不是已取消"
);
}
}
// check 3:预约记录列表中已取消
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"RESERVE_CANCEL"
,
""
,
""
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
member2
.
getString
(
0
),
"GROUP_CLASS"
,
""
);;
for
(
int
i
=
0
;
i
<
getPageByStudio
.
size
();
i
++){
if
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
member2
.
getString
(
3
))){
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"reserveState"
),
"RESERVE_CANCEL"
,
"取消约课状态不是已取消"
);
}
}
// check 4: 会员卡消耗记录中包含该记录锁定的次数释放
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
member2
.
getString
(
1
),
member2
.
getString
(
2
)).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfUsablePurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
member2
.
getString
(
3
),
"CANCEL_RESERVE"
,
"1.00"
};
String
[]
message1
=
new
String
[]
{
"会员卡消耗记录中记录的资源id与实际约课记录id不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录类型不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录余额不符合"
};
for
(
int
i
=
0
;
i
<
result2
.
length
;
i
++){
Assert
.
assertEquals
(
consumeRecord
.
getJSONObject
(
0
).
getString
(
result2
[
i
]),
respect
[
i
],
message1
[
i
]);
}
}
/**
...
...
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestSignReservePerson.java
0 → 100644
View file @
4162e588
package
com
.
xiaomai
.
cases
.
polar
.
reserve
.
personal
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.polar.clue.MemberTools
;
import
com.xiaomai.cases.polar.course.CourseTools
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.memberCard.CardTools
;
import
com.xiaomai.cases.polar.reserve.ReserveTools
;
import
com.xiaomai.cases.polar.schedule.group.GroupScheduleTools
;
import
com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.util.Calendar
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-29 17:22
* @Description: 私教签到 (团课签到和私教签到用的同一个接口)
* @Version: 1.0
*/
public
class
TestSignReservePerson
extends
BaseTestImpl
{
@Resource
(
name
=
"courseCategoryTools"
)
CourseCategoryTools
courseCategoryTools
;
@Resource
(
name
=
"courseTools"
)
CourseTools
courseTools
;
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
MemberTools
memberTools
=
new
MemberTools
();
OrderTools
orderTools
=
new
OrderTools
();
CardTools
cardTools
=
new
CardTools
();
Tools
tools
=
new
Tools
();
String
todayStartTimeTamp
=
CommUtil
.
oneKeyGetAddDay
(
0
);
//获取今天结束日期的时间戳
Long
todayEndDateTimeTamp
=
TimeUtils
.
getTodayEndTime
();
private
Long
timestamp
;
private
String
scheduleId
;
private
String
courseId
;
private
String
coachedId
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_addPersonalReserve"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"1v1约课签到"
)
public
void
testSignReservePerson
()
{
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"瑜伽"
);
courseId
=
courseTools
.
getPersonalOrGroupCourseId
(
"PERSONAL"
,
"普拉提一对一点名私教课程"
,
categoryId
,
"STUDIO"
,
"ONE_TO_ONE"
,
1
,
1
).
getString
(
0
);
String
courseName
=
courseTools
.
getPersonalOrGroupCourseId
(
"PERSONAL"
,
"普拉提一对一点名私教课程"
,
categoryId
,
"STUDIO"
,
"ONE_TO_ONE"
,
1
,
1
).
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 第二步:查询存量的学员,如果没有则新建
JSONArray
memberInfo
=
createMember
(
"私教1v1点名学员卡卡"
);
// 第三步:查询存量的私教教练,并将教练添加到课程中
// 获取到员工
// 获取教练列表
JSONObject
pageStudioPersonalCoach
=
reserveTools
.
pageStudioPersonalCoach
(
""
);
int
total
=
pageStudioPersonalCoach
.
getInteger
(
"total"
);
Random
rand
=
new
Random
();
// 随机取1个教练
coachedId
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
// 编辑私教课程教练添加到课程中
courseTools
.
editPersonalCourse
(
categoryId
,
courseId
,
courseName
,
10
,
coachedId
,
"1"
);
// 第四步:创建私教特殊可约时间
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
// 可约时间类型
specialTimeInfoRequest
.
put
(
"dutyType"
,
"ON_DUTY"
);
// 设置特定日期
JSONArray
selectedDates
=
new
JSONArray
();
selectedDates
.
add
(
TimeUtils
.
getTodayTime
());
specialTimeInfoRequest
.
put
(
"selectedDates"
,
selectedDates
);
// 如果是可约时间非全天休息,则传可约时间段
// 时间段 00:00 ~ 23:59
JSONArray
timePeriodInfos
=
new
JSONArray
();
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
0
);
timeInfo
.
put
(
"spanMinutes"
,
1380
);
timePeriodInfos
.
add
(
timeInfo
);
specialTimeInfoRequest
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
// 设置特殊可约时间
reserveTools
.
createSpecialDate
(
coachedId
,
"ON_DUTY"
,
specialTimeInfoRequest
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 第五步:获取老师第一条可约时间
JSONArray
personalCoachTime
=
reserveTools
.
getPersonalTimeBlocks
(
coachedId
,
courseId
,
TimeUtils
.
getTodayTime
());
// 获取当前日期的Calendar实例
Calendar
calendar
=
Calendar
.
getInstance
();
// 获取第一条的步长 转换成时间戳
int
minuteOffset
=
personalCoachTime
.
getJSONObject
(
0
).
getIntValue
(
"minuteOffset"
)
/
60
;
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
minuteOffset
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
// 将Calendar对象转换为时间戳
timestamp
=
calendar
.
getTimeInMillis
();
String
reserveId
=
reserveTools
.
addPersonalReserve
(
""
,
courseId
,
coachedId
,
memberInfo
.
getString
(
0
),
memberInfo
.
getString
(
1
),
10
,
1
,
""
,
timestamp
,
true
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 从课表查询scheduleId
JSONArray
personalScheduleTable
=
reserveTools
.
getPersonalScheduleTable
(
timestamp
,
TimeUtils
.
getTodayEndTime
(),
courseId
);
for
(
int
i
=
0
;
i
<
personalScheduleTable
.
size
();
i
++)
{
for
(
int
j
=
0
;
j
<
personalScheduleTable
.
getJSONObject
(
i
).
getJSONArray
(
"reserveIds"
).
size
();
j
++){
if
(
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"startTime"
).
equals
(
String
.
valueOf
(
timestamp
))
&&
personalScheduleTable
.
getJSONObject
(
i
).
getJSONArray
(
"reserveIds"
).
getString
(
j
).
equals
(
reserveId
))
{
scheduleId
=
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
}
}
reserveTools
.
signIn
(
true
,
reserveId
,
false
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1:课次学员是否包含该会员且会员状态为已签到
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
JSONArray
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"memberReserveList"
);
boolean
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++){
if
(
reserveIds
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
Assert
.
assertEquals
(
reserveIds
.
getJSONObject
(
i
).
getString
(
"signInState"
),
"SIGNED"
,
"签到状态错误"
);
}
}
Assert
.
assertTrue
(
success
,
"约课后点名课次详情学员不在课次中"
);
// check 2: 预约记录是否包含该预约
// check 2.1 学员详情预约记录
JSONArray
getPageByMember
=
reserveTools
.
getPageByMember
(
courseId
,
"SUCCESS"
,
"SIGNED"
,
""
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
memberInfo
.
getString
(
0
),
"PERSONAL"
);
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseId"
,
"courseType"
,
"scheduleStartTime"
,
"reserveState"
,
"scheduleId"
,
"signInState"
};
String
[]
resultData
=
new
String
[]
{
reserveId
,
memberInfo
.
getString
(
1
),
"1"
,
courseId
,
"PERSONAL"
,
timestamp
+
""
,
"SUCCESS"
,
scheduleId
,
"SIGNED"
};
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
result
[
j
]),
resultData
[
j
],
"约课产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
}
}
Assert
.
assertTrue
(
success
,
"约课后在会员详情页面未查询到相关信息"
);
// check 2.2 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"SUCCESS"
,
"SIGNED"
,
""
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
memberInfo
.
getString
(
0
),
"PERSONAL"
,
""
);
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByStudio
.
size
();
i
++){
if
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
result
[
j
]),
resultData
[
j
],
"约课产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"memberId"
),
memberInfo
.
getString
(
0
),
"查询的约课数据不是同一个会员"
);
}
}
Assert
.
assertTrue
(
success
,
"约课后在约课记录没有查询到相关信息"
);
// check 2.3 预约记录详情
JSONObject
getDetailById
=
reserveTools
.
getDetailById
(
reserveId
);
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getDetailById
.
getString
(
result
[
j
]),
resultData
[
j
],
"约课产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberInfo
.
getString
(
0
),
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录签到消耗
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
memberInfo
.
getString
(
1
),
memberInfo
.
getString
(
2
)).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfPurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
reserveId
,
"SIGN_IN"
,
"-1.00"
};
String
[]
message
=
new
String
[]
{
"会员卡消耗记录中记录的资源id与实际约课记录id不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录类型不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录余额不符合"
};
for
(
int
i
=
0
;
i
<
result2
.
length
;
i
++){
Assert
.
assertEquals
(
consumeRecord
.
getJSONObject
(
0
).
getString
(
result2
[
i
]),
respect
[
i
],
message
[
i
]);
}
}
@Test
(
description
=
"预约1VN课次,点名后再次其他学员约课点名"
,
priority
=
2
)
public
void
testReservePerson_1VN
()
{
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"瑜伽"
);
courseId
=
courseTools
.
getPersonalOrGroupCourseId
(
"PERSONAL"
,
"普拉提器械1V2点名私教课程"
,
categoryId
,
"STUDIO"
,
"ONE_TO_MANY"
,
2
,
1
).
getString
(
0
);
String
courseName
=
courseTools
.
getPersonalOrGroupCourseId
(
"PERSONAL"
,
"普拉提器械1V2点名私教课程"
,
categoryId
,
"STUDIO"
,
"ONE_TO_MANY"
,
2
,
1
).
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 第二步:查询存量的学员,如果没有则新建
JSONArray
memberInfo1
=
createMember
(
"1V2私教点名学员程程"
);
// 第三步:查询存量的私教教练,并将教练添加到课程中
// 获取到员工
// 获取教练列表
JSONObject
pageStudioPersonalCoach
=
reserveTools
.
pageStudioPersonalCoach
(
""
);
int
total
=
pageStudioPersonalCoach
.
getInteger
(
"total"
);
Random
rand
=
new
Random
();
// 随机取1个教练
coachedId
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
// 编辑私教课程教练添加到课程中
courseTools
.
editPersonalCourse
(
categoryId
,
courseId
,
courseName
,
10
,
coachedId
,
"2"
);
// 第四步:创建私教特殊可约时间
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
// 可约时间类型
specialTimeInfoRequest
.
put
(
"dutyType"
,
"ON_DUTY"
);
// 设置特定日期
JSONArray
selectedDates
=
new
JSONArray
();
selectedDates
.
add
(
TimeUtils
.
getTodayTime
());
specialTimeInfoRequest
.
put
(
"selectedDates"
,
selectedDates
);
// 如果是可约时间非全天休息,则传可约时间段
// 时间段 00:00 ~ 23:59
JSONArray
timePeriodInfos
=
new
JSONArray
();
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
60
);
timeInfo
.
put
(
"spanMinutes"
,
1380
);
timePeriodInfos
.
add
(
timeInfo
);
specialTimeInfoRequest
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
// 设置特殊可约时间
reserveTools
.
createSpecialDate
(
coachedId
,
"ON_DUTY"
,
specialTimeInfoRequest
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 第五步:获取老师第一条可约时间
JSONArray
personalCoachTime
=
reserveTools
.
getPersonalTimeBlocks
(
coachedId
,
courseId
,
TimeUtils
.
getTodayTime
());
// 获取当前日期的Calendar实例
Calendar
calendar
=
Calendar
.
getInstance
();
// 获取第一条的步长 转换成时间戳
int
minuteOffset
=
personalCoachTime
.
getJSONObject
(
0
).
getIntValue
(
"minuteOffset"
)
/
60
;
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
minuteOffset
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
// 将Calendar对象转换为时间戳
timestamp
=
calendar
.
getTimeInMillis
();
// 李萌预约生成课次
String
reserveId
=
reserveTools
.
addPersonalReserve
(
""
,
courseId
,
coachedId
,
memberInfo1
.
getString
(
0
),
memberInfo1
.
getString
(
1
),
10
,
1
,
""
,
timestamp
,
true
);
memberInfo1
.
add
(
reserveId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 从课表查询scheduleId
JSONArray
personalScheduleTable
=
reserveTools
.
getPersonalScheduleTable
(
timestamp
,
TimeUtils
.
getTodayEndTime
(),
courseId
);
for
(
int
i
=
0
;
i
<
personalScheduleTable
.
size
();
i
++)
{
for
(
int
j
=
0
;
j
<
personalScheduleTable
.
getJSONObject
(
i
).
getJSONArray
(
"reserveIds"
).
size
();
j
++){
if
(
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"startTime"
).
equals
(
String
.
valueOf
(
timestamp
))
&&
personalScheduleTable
.
getJSONObject
(
i
).
getJSONArray
(
"reserveIds"
).
getString
(
j
).
equals
(
reserveId
))
{
scheduleId
=
personalScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
}
}
// check 1:课次学员是否包含该会员
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
JSONArray
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"reserveIds"
);
boolean
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++)
{
if
(
reserveIds
.
getString
(
i
).
equals
(
memberInfo1
.
getString
(
3
)))
{
success
=
true
;
}
}
Assert
.
assertTrue
(
success
,
"约课后课次详情学员不在课次中"
);
reserveTools
.
signIn
(
true
,
reserveId
,
false
);
// 学员2进行预约
JSONArray
memberInfo2
=
createMember
(
"1V2私教点名学员2王菲"
);
reserveId
=
reserveTools
.
addPersonalReserve
(
""
,
courseId
,
coachedId
,
memberInfo2
.
getString
(
0
),
memberInfo2
.
getString
(
1
),
10
,
1
,
scheduleId
,
timestamp
,
true
);
memberInfo2
.
add
(
reserveId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
reserveTools
.
signIn
(
true
,
memberInfo2
.
getString
(
3
),
false
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check :两个学员的状态
for
(
int
j
=
0
;
j
<
2
;
j
++){
JSONArray
memberInfo
=
j
==
0
?
memberInfo1
:
memberInfo2
;
// check 1:课次学员是否包含该会员且会员状态为已签到
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
reserveIds
=
getScheduleItemDetail
.
getJSONArray
(
"memberReserveList"
);
success
=
false
;
for
(
int
i
=
0
;
i
<
reserveIds
.
size
();
i
++){
if
(
reserveIds
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
success
=
true
;
Assert
.
assertEquals
(
reserveIds
.
getJSONObject
(
i
).
getString
(
"signInState"
),
"SIGNED"
,
"签到状态错误"
);
}
}
Assert
.
assertTrue
(
success
,
"约课后点名课次详情学员不在课次中"
);
// check 2: 预约记录是否包含该预约
// check 2.1 学员详情预约记录
JSONArray
getPageByMember
=
reserveTools
.
getPageByMember
(
courseId
,
"SUCCESS"
,
"SIGNED"
,
""
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
memberInfo
.
getString
(
0
),
"PERSONAL"
);
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseId"
,
"courseType"
,
"scheduleStartTime"
,
"reserveState"
,
"scheduleId"
,
"signInState"
};
String
[]
resultData
=
new
String
[]
{
memberInfo
.
getString
(
3
),
memberInfo
.
getString
(
1
),
"1"
,
courseId
,
"PERSONAL"
,
timestamp
+
""
,
"SUCCESS"
,
scheduleId
,
"SIGNED"
};
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
memberInfo
.
getString
(
3
))){
success
=
true
;
for
(
int
f
=
0
;
f
<
result
.
length
;
f
++){
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
result
[
f
]),
resultData
[
f
],
"约课产生的数据与实际数据不符合"
+
result
[
f
]+
":"
+
resultData
[
f
]);
}
}
}
Assert
.
assertTrue
(
success
,
"约课后在会员详情页面未查询到相关信息"
);
// check 2.2 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"SUCCESS"
,
"SIGNED"
,
""
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
memberInfo
.
getString
(
0
),
"PERSONAL"
,
""
);
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByStudio
.
size
();
i
++){
if
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
memberInfo
.
getString
(
3
))){
success
=
true
;
for
(
int
f
=
0
;
f
<
result
.
length
;
f
++){
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
result
[
f
]),
resultData
[
f
],
"约课产生的数据与实际数据不符合"
+
result
[
f
]+
":"
+
resultData
[
f
]);
}
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"memberId"
),
memberInfo
.
getString
(
0
),
"查询的约课数据不是同一个会员"
);
}
}
Assert
.
assertTrue
(
success
,
"约课后在约课记录没有查询到相关信息"
);
// check 2.3 预约记录详情
JSONObject
getDetailById
=
reserveTools
.
getDetailById
(
memberInfo
.
getString
(
3
));
for
(
int
i
=
0
;
i
<
result
.
length
;
i
++){
Assert
.
assertEquals
(
getDetailById
.
getString
(
result
[
i
]),
resultData
[
i
],
"约课产生的数据与实际数据不符合"
+
result
[
i
]+
":"
+
resultData
[
i
]);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberInfo
.
getString
(
0
),
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录签到消耗
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
memberInfo
.
getString
(
1
),
memberInfo
.
getString
(
2
)).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfPurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
memberInfo
.
getString
(
3
),
"SIGN_IN"
,
"-1.00"
};
String
[]
message
=
new
String
[]
{
"会员卡消耗记录中记录的资源id与实际约课记录id不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录类型不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录余额不符合"
};
for
(
int
i
=
0
;
i
<
result2
.
length
;
i
++){
Assert
.
assertEquals
(
consumeRecord
.
getJSONObject
(
0
).
getString
(
result2
[
i
]),
respect
[
i
],
message
[
i
]);
}
}
}
/**
* @description:查询学员
* @author: xuyamei
* @date: 2024/7/26 16:41
* @param memberName
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
createMember
(
String
memberName
){
String
memberId
;
// 查询存量的学员没有则创建学员,
if
(
tools
.
commonSearch
(
memberName
,
"NORMAL"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId
=
tools
.
commonSearch
(
memberName
,
"NORMAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
memberName
,
"HISTORY"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId
=
tools
.
commonSearch
(
memberName
,
"HISTORY"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
memberName
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId
=
tools
.
commonSearch
(
memberName
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
{
memberId
=
memberTools
.
create
(
memberName
,
RandomStringUtil
.
randomMobile
(
"203"
)).
getString
(
"result"
);
}
try
{
Thread
.
sleep
(
1500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 查询是否有可用的会员卡,没有则购买
JSONArray
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"PERSONAL"
,
"MEMBER"
,
memberId
,
Long
.
parseLong
(
todayStartTimeTamp
));
if
(
listUserReservableBenefit
.
size
()
==
0
)
{
// 购买适用的会员卡
signOrder
(
courseId
,
memberId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"PERSONAL"
,
"MEMBER"
,
memberId
,
Long
.
parseLong
(
todayStartTimeTamp
));
}
// 查询权益
String
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
String
memberCardId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"memberCardId"
);
JSONArray
members
=
new
JSONArray
();
members
.
add
(
memberId
);
members
.
add
(
benefitId
);
members
.
add
(
memberCardId
);
return
members
;
}
// 买卡
public
void
signOrder
(
String
courseId
,
String
memberId
){
// 查询存量的卡
JSONObject
fetchPageOfMemberCard
=
cardTools
.
fetchPageOfMemberCard
(
courseId
);
int
total
=
Integer
.
parseInt
(
fetchPageOfMemberCard
.
getString
(
"total"
));
String
cardId
=
""
;
BigDecimal
quantity
=
new
BigDecimal
(
0
)
;
float
price
=
0
;
int
validPeriod
=
0
;
if
(
total
==
0
)
{
cardId
=
cardTools
.
memberCardCreate
(
"私教约课使用会员卡"
+
TimeUtils
.
getCurrentTime
()).
getString
(
"result"
);
}
cardId
=
fetchPageOfMemberCard
.
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"id"
);
quantity
=
new
BigDecimal
(
fetchPageOfMemberCard
.
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"balance"
));
price
=
Float
.
parseFloat
(
fetchPageOfMemberCard
.
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"price"
));
validPeriod
=
Integer
.
parseInt
(
fetchPageOfMemberCard
.
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"validPeriod"
));
//获取签单要用的卡快照id
String
latestSnapshotId
=
orderTools
.
fetchDetailById
(
cardId
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
xmAppApi
.
getLoginInfo
().
getStudioId
(),
xmAppApi
.
getLoginInfo
().
getAdminId
()).
getJSONObject
(
"result"
).
getString
(
"latestSnapshotId"
);
//检查会员对该卡是否超出购买上限
boolean
limitResult
=
orderTools
.
checkAllowPurchase
(
"MEMBER_CARD"
,
cardId
,
cardId
,
"1"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
xmAppApi
.
getLoginInfo
().
getStudioId
(),
xmAppApi
.
getLoginInfo
().
getAdminId
()).
getBoolean
(
"success"
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
if
(
limitResult
==
true
){
//创建订单
JSONObject
orderResult
=
orderTools
.
signOrder
(
cardId
,
latestSnapshotId
,
quantity
,
price
,
validPeriod
,
latestSnapshotId
,
price
/
2
,
"PURCHASE"
,
"MEMBER_CARD"
,
memberId
,
price
-
price
/
2
,
price
-
price
/
2
,
"1"
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment