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
7242d0ed
Commit
7242d0ed
authored
Jun 25, 2024
by
xuyamei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增排队、取消排队、签到等case
parent
fa1f885b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
764 additions
and
1 deletions
+764
-1
src/main/java/com/xiaomai/cases/polar/reserve/ReserveTools.java
+85
-0
src/main/java/com/xiaomai/cases/polar/reserve/TestAddMemberReserve.java
+1
-1
src/main/java/com/xiaomai/cases/polar/reserve/TestAddToQueue.java
+380
-0
src/main/java/com/xiaomai/cases/polar/reserve/TestSignIn.java
+298
-0
No files found.
src/main/java/com/xiaomai/cases/polar/reserve/ReserveTools.java
View file @
7242d0ed
...
...
@@ -203,6 +203,14 @@ public class ReserveTools extends XMBaseTest {
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description:取消预约、取消排队
* @author: xuyamei
* @date: 2024/6/24 09:05
* @param reserveId 预约id
* @param success 取消是否成功
* @return: void
**/
public
void
cancelMemberReserve
(
String
reserveId
,
boolean
success
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
"API_memberReserve_cancel"
)
...
...
@@ -219,4 +227,81 @@ public class ReserveTools extends XMBaseTest {
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
success
);
}
/**
* @description:排队
* @author: xuyamei
* @date: 2024/6/24 09:12
* @param areaId :场地
* @param chiefCoachId 教练id
* @param memberId 会员id
* @param benefitId 权益id
* @param assistantCoachId 助教id
* @param reserveMemberNum 预约人数
* @param scheduleId 课次id
* @param scheduleStartTime 上课开始时间
* @param success
* @return: com.alibaba.fastjson.JSONObject
**/
public
String
addToQueue
(
String
areaId
,
String
chiefCoachId
,
String
memberId
,
String
benefitId
,
String
assistantCoachId
,
int
reserveMemberNum
,
String
scheduleId
,
long
scheduleStartTime
,
boolean
success
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
"API_addToQueue"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
body
=
new
JSONObject
();
JSONArray
areaIds
=
new
JSONArray
();
// 场地,私教约课会用到
if
(!
areaId
.
equals
(
""
)){
areaIds
.
add
(
areaId
);
}
body
.
put
(
"areaIds"
,
areaIds
);
JSONArray
coachIds
=
new
JSONArray
();
// 助教Ids
if
(!
assistantCoachId
.
equals
(
""
)){
coachIds
.
add
(
assistantCoachId
);
}
body
.
put
(
"assistantCoachIds"
,
coachIds
);
body
.
put
(
"benefitId"
,
benefitId
);
//会员卡权益Id
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"chiefCoachId"
,
chiefCoachId
);
// 主教id
body
.
put
(
"memberId"
,
memberId
);
// 会员id
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"planCheckBalance"
,
1
);
// 计划扣除额度
body
.
put
(
"reserveMemberNum"
,
reserveMemberNum
);
// 预约人数
body
.
put
(
"scheduleId"
,
scheduleId
);
// 课次id
body
.
put
(
"scheduleStartTime"
,
scheduleStartTime
);
// 课次id
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
success
);
if
(
success
){
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"reserveId"
);
}
return
dataApi
.
getBodyInJSON
().
toString
();
}
/**
* @description:签到
* @author: xuyamei
* @date: 2024/6/25 09:34
* @param success 是否预约成功 正常传true
* @param reserveId 约课id
* @param leave 是否请假 (团课、私教课都是false)
* @return: void
**/
public
void
signIn
(
boolean
success
,
String
reserveId
,
boolean
leave
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
"API_signIn"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"leave"
,
leave
);
body
.
put
(
"reserveId"
,
reserveId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
success
);
}
}
src/main/java/com/xiaomai/cases/polar/reserve/TestAddMemberReserve.java
View file @
7242d0ed
...
...
@@ -210,7 +210,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
String
id
=
getRules
.
getString
(
"id"
);
// 获取规则id
Random
random
=
new
Random
();
int
bookingSeatCount
=
random
.
nextInt
(
10
)+
1
;
// 席位
ruleTools
.
saveGroupBookingRules
(
id
,
false
,
bookingSeatCount
,
true
,
true
,
random
.
nextInt
(
30
)+
10
,
true
,
random
.
nextInt
(
100
0
)+
10
,
random
.
nextInt
(
5
)+
1
,
true
,
random
.
nextInt
(
1000
)+
10
,
"hour"
,
true
,
random
.
nextInt
(
1000
)+
10
,
"hour
"
);
ruleTools
.
saveGroupBookingRules
(
id
,
false
,
bookingSeatCount
,
true
,
true
,
random
.
nextInt
(
30
)+
10
,
true
,
random
.
nextInt
(
100
)+
10
,
random
.
nextInt
(
5
)+
1
,
true
,
random
.
nextInt
(
100
)+
10
,
"minutes"
,
true
,
random
.
nextInt
(
100
)+
10
,
"minutes
"
);
// 新学员 购买卡
String
memberId2
=
""
;
...
...
src/main/java/com/xiaomai/cases/polar/reserve/TestAddToQueue.java
0 → 100644
View file @
7242d0ed
package
com
.
xiaomai
.
cases
.
polar
.
reserve
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
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.schedule.group.GroupScheduleTools
;
import
com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools
;
import
com.xiaomai.cases.polar.setting.rules.RuleTools
;
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.BeforeClass
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve
* @Author: xuyamei
* @CreateTime: 2024-06-24 09:14
* @Description: 排队
* @Version: 1.0
*/
public
class
TestAddToQueue
extends
BaseTestImpl
{
@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
;
OrderTools
orderTools
=
new
OrderTools
();
CardTools
cardTools
=
new
CardTools
();
Tools
tools
=
new
Tools
();
String
todayStartTimeTamp
=
CommUtil
.
oneKeyGetAddDay
(
1
);
//获取今天结束日期的时间戳
String
todayEndDateTimeTamp
=
CommUtil
.
getNDayEndTimeTamp
(
1
);
Long
scheduleEndTime
=
TimeUtils
.
getTodayEndTime
(
1
);
private
String
ruldId
;
private
JSONArray
memberId1
=
new
JSONArray
();
private
JSONArray
memberId2
=
new
JSONArray
();
private
JSONArray
memberId3
=
new
JSONArray
();
private
String
scheduleId
;
private
Long
startTime
;
private
String
courseId
;
@BeforeClass
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_addReserve"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"创建团课课次>约课>修改课次容量>约课后进行排队>排队校验"
)
public
void
testAddMemberReserve
(){
// 创建团课课次
createGroupSchedule
();
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 创建约课学员A
memberId1
=
createMember
(
"约课学员sandy"
);
// 查询课次详情 查课次的开始时间
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
startTime
=
getScheduleItemDetail
.
getLongValue
(
"startTime"
);
// 预约
String
reserveId
=
reserveTools
.
addReserve
(
""
,
""
,
memberId1
.
getString
(
1
),
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberId1
.
getString
(
0
),
1
,
scheduleId
,
startTime
,
true
);
memberId1
.
add
(
reserveId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 修改课次容量
groupScheduleTools
.
editGroupSchedule
(
scheduleId
,
startTime
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
1
,
1
);
// 预约规则开启允许排队
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
,
true
,
random
.
nextInt
(
100
)+
10
,
random
.
nextInt
(
5
)+
1
,
true
,
random
.
nextInt
(
100
)+
10
,
"minutes"
,
true
,
random
.
nextInt
(
100
)+
10
,
"minutes"
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 创建排课学员A
memberId2
=
createMember
(
"排队学员Amy"
);
// 排队
reserveId
=
reserveTools
.
addToQueue
(
""
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberId2
.
getString
(
0
),
memberId2
.
getString
(
1
),
""
,
1
,
scheduleId
,
startTime
,
true
);
memberId2
.
add
(
reserveId
);
// check 1: 预约记录、会员详情预约记录、预约详情数据check
checkReserve
(
memberId2
.
getString
(
0
),
reserveId
,
"QUEUE_PROCESS"
,
memberId2
.
getString
(
1
),
"排队"
);
// todo check 4: 会员卡消耗记录中包含该记录锁定
}
@DataProvider
public
Object
[][]
data
(){
return
new
Object
[][]{
{
"memberId1"
,
"排队失败,无需重复添加"
},
// 已经在课次排队
{
"memberId2"
,
"排队失败,无需重复添加"
}
// 已排队再次排队
};
}
@Test
(
priority
=
1
,
description
=
"已经在课次中再次排队"
,
dataProvider
=
"data"
)
public
void
addToQueue2
(
String
member
,
String
message
){
String
memberId
=
member
.
equals
(
memberId1
)
?
memberId1
.
getString
(
0
)
:
memberId2
.
getString
(
0
);
String
benefitId
=
member
.
equals
(
memberId1
)
?
memberId1
.
getString
(
1
)
:
memberId2
.
getString
(
1
);
reserveTools
.
addToQueue
(
""
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberId
,
benefitId
,
""
,
1
,
scheduleId
,
startTime
,
false
);
Assert
.
assertEquals
(
dataApi
.
getBodyInJSON
().
getString
(
"message"
),
message
,
"排队提示信息不符合"
);
}
@Test
(
priority
=
2
,
description
=
"在创建一个排队学员,进行排队,排在第二位,将第一位的排队取消,check 学员排在第一,将课次学员取消, check学员在课次中,并排队成功"
)
public
void
addToQueue3
(){
// 预约规则开启允许排队
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
,
true
,
random
.
nextInt
(
100
)+
10
,
random
.
nextInt
(
5
)+
1
,
true
,
random
.
nextInt
(
100
)+
10
,
"minutes"
,
true
,
random
.
nextInt
(
100
)+
10
,
"minutes"
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 创建排课学员A
memberId3
=
createMember
(
"排队学员yaya"
);
// 操作1:排队
String
reserveId
=
reserveTools
.
addToQueue
(
""
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberId3
.
getString
(
0
),
memberId3
.
getString
(
1
),
""
,
1
,
scheduleId
,
startTime
,
true
);
memberId3
.
add
(
reserveId
);
// check 1 预约记录详情
JSONObject
getDetailById
=
reserveTools
.
getDetailById
(
reserveId
);
// 正常的检查,看一下排在第几位
Assert
.
assertEquals
(
getDetailById
.
getString
(
"queueSort"
),
"2"
,
"排队后排队名次应该是第二位"
);
// 操作2:将第一位"排队学员Amy"的排队取消
reserveTools
.
cancelMemberReserve
(
memberId2
.
getString
(
2
),
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 2.1: 排队学员Amy 排队记录已取消
checkReserve
(
memberId2
.
getString
(
0
),
memberId2
.
getString
(
2
),
"QUEUE_CANCEL"
,
memberId2
.
getString
(
1
),
"排队"
);
//check 2.2 排队学员yaya 排在第一位
getDetailById
=
reserveTools
.
getDetailById
(
reserveId
);
Assert
.
assertEquals
(
getDetailById
.
getString
(
"queueSort"
),
"1"
,
"第一位的学员取消排队后排队名次应该是第1位"
);
// 操作3:将约课的学员取消
reserveTools
.
cancelMemberReserve
(
memberId1
.
getString
(
2
),
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 3.1 取消后,yaya的预约记录check
checkReserve
(
memberId3
.
getString
(
0
),
reserveId
,
"SUCCESS"
,
memberId3
.
getString
(
1
),
"从排队->预约"
);
}
@Test
(
priority
=
3
)
public
void
del
(){
// 删除排课数据
groupScheduleTools
.
delGroupRuleSchedule
(
ruldId
,
true
);
groupScheduleTools
.
delGroupScheduleItem
(
scheduleId
);
}
/**
* @description:买卡
* @author: xuyamei
* @date: 2024/6/24 19:42
* @param courseId 课程id
* @param memberId 会员id
* @return: void
**/
public
void
signOrder
(
String
courseId
,
String
memberId
){
// 查询存量的卡
JSONObject
fetchPageOfMemberCard
=
cardTools
.
fetchPageOfMemberCard
(
courseId
);
int
total
=
Integer
.
parseInt
(
fetchPageOfMemberCard
.
getString
(
"total"
));
String
cardId
=
""
;
int
quantity
=
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
=
Integer
.
parseInt
(
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
,
"PURCHASE"
,
memberId
,
price
,
price
,
"1"
);
}
}
// 创建团课课次
public
void
createGroupSchedule
(){
// 查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"瑜伽"
);
courseId
=
courseTools
.
getPersonalOrGroupCourseId
(
"GROUP"
,
"空中瑜伽团课课程"
,
categoryId
,
"STUDIO"
,
""
,
2
,
1
).
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
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
false
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)]);
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
//统计查询到的目标日程数量
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
getGroupScheduleTable
=
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
todayStartTimeTamp
),
scheduleEndTime
);
for
(
int
i
=
0
;
i
<
getGroupScheduleTable
.
size
();
i
++){
if
(
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
scheduleId
=
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
}
}
/**
* @description:创建学员并查询会员是否购买会员卡,如果已购买则查看权益,如果没有则进行购买
* @author: xuyamei
* @date: 2024/6/24 19:43
* @param memberName:会员姓名
* @return:
**/
public
JSONArray
createMember
(
String
memberName
){
String
memberId
=
""
;
// 查询存量的学员没有则创建学员,// todo 先手动新建
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
{
memberId
=
tools
.
commonSearch
(
memberName
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
// 查询是否有可用的会员卡,没有则购买
JSONArray
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"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
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId
,
Long
.
parseLong
(
todayStartTimeTamp
));
}
// 查询权益
String
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
JSONArray
members
=
new
JSONArray
();
members
.
add
(
memberId
);
members
.
add
(
benefitId
);
return
members
;
}
/**
* @description:校验预约记录、会员详情预约记录、预约详情内容
* @author: xuyamei
* @date: 2024/6/24 19:32
* @param memberId 会员id
* @param reserveId 预约id
* @param reserveState 预约状态
* @param benefitId 权益id
* @param message :约课/排队/取消预约
* @return: void
**/
public
void
checkReserve
(
String
memberId
,
String
reserveId
,
String
reserveState
,
String
benefitId
,
String
message
){
// check 1.1 学员详情预约记录
JSONArray
getPageByMember
=
reserveTools
.
getPageByMember
(
courseId
,
reserveState
,
""
,
""
,
startTime
,
scheduleEndTime
,
memberId
,
"GROUP_CLASS"
);
// 要检查字段内容:约课id、权益id、预约人数、课程、课程类型、开始时间、预约状态、课次id
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseId"
,
"courseType"
,
"scheduleStartTime"
,
"reserveState"
,
"scheduleId"
};
String
[]
resultData
=
new
String
[]
{
reserveId
,
benefitId
,
"1"
,
courseId
,
"GROUP_CLASS"
,
startTime
+
""
,
reserveState
,
scheduleId
};
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
++){
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
result
[
j
]),
resultData
[
j
],
message
+
"产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
}
}
Assert
.
assertTrue
(
success
,
message
+
"在会员详情页面未查询到相关信息"
);
// check 1.2 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
reserveState
,
""
,
""
,
startTime
,
scheduleEndTime
,
memberId
,
"GROUP_CLASS"
);
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
],
message
+
"产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"memberId"
),
memberId
,
"查询的约课数据不是同一个会员"
);
}
}
Assert
.
assertTrue
(
success
,
"排队后在约课记录没有查询到相关信息"
);
// check 1.3 预约记录详情
JSONObject
getDetailById
=
reserveTools
.
getDetailById
(
reserveId
);
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
Assert
.
assertEquals
(
getDetailById
.
getString
(
result
[
j
]),
resultData
[
j
],
message
+
"产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
}
if
(
reserveState
.
equals
(
"QUEUE_PROCESS"
)){
// 除去正常的检查,看一下排在第几位
Assert
.
assertEquals
(
getDetailById
.
getString
(
"queueSort"
),
"1"
,
"排队后排队名次应该是第一位"
);
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberId
,
"查询的排队约课数据不是同一个会员"
);
}
}
src/main/java/com/xiaomai/cases/polar/reserve/TestSignIn.java
0 → 100644
View file @
7242d0ed
package
com
.
xiaomai
.
cases
.
polar
.
reserve
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
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.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.TimeUtils
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve
* @Author: xuyamei
* @CreateTime: 2024-06-25 09:16
* @Description: 签到
* @Version: 1.0
*/
public
class
TestSignIn
extends
BaseTestImpl
{
@Resource
(
name
=
"courseCategoryTools"
)
CourseCategoryTools
courseCategoryTools
;
@Resource
(
name
=
"courseTools"
)
CourseTools
courseTools
;
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
OrderTools
orderTools
=
new
OrderTools
();
CardTools
cardTools
=
new
CardTools
();
Tools
tools
=
new
Tools
();
String
todayStartTimeTamp
=
CommUtil
.
oneKeyGetAddDay
(-
1
);
//获取今天结束日期的时间戳
String
todayEndDateTimeTamp
=
CommUtil
.
getNDayEndTimeTamp
(-
1
);
Long
scheduleEndTime
=
TimeUtils
.
getTodayEndTime
(-
1
);
private
String
ruldId
;
private
JSONArray
memberInfo
=
new
JSONArray
();
private
String
scheduleId
;
private
Long
startTime
;
private
String
courseId
;
@BeforeClass
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_signIn"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"签到"
)
public
void
testSignIn
()
{
// 创建团课课次
createGroupSchedule
();
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 创建点名学员A
memberInfo
=
createMember
(
"点名学员佳佳"
);
// 查询课次详情 查课次的开始时间
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
startTime
=
getScheduleItemDetail
.
getLongValue
(
"startTime"
);
// 预约
String
reserveId
=
reserveTools
.
addReserve
(
""
,
""
,
memberInfo
.
getString
(
1
),
xmAppApi
.
getLoginInfo
().
getAdminId
(),
memberInfo
.
getString
(
0
),
1
,
scheduleId
,
startTime
,
true
);
memberInfo
.
add
(
reserveId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 操作签到
reserveTools
.
signIn
(
true
,
memberInfo
.
getString
(
2
),
false
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1:课次学员是否包含该会员且会员状态为已签到
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"
,
""
,
startTime
,
scheduleEndTime
,
memberInfo
.
getString
(
0
),
"GROUP_CLASS"
);
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseId"
,
"courseType"
,
"scheduleStartTime"
,
"reserveState"
,
"scheduleId"
,
"signInState"
};
String
[]
resultData
=
new
String
[]
{
reserveId
,
memberInfo
.
getString
(
1
),
"1"
,
courseId
,
"GROUP_CLASS"
,
startTime
+
""
,
"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"
,
""
,
startTime
,
scheduleEndTime
,
memberInfo
.
getString
(
0
),
"GROUP_CLASS"
);
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 4: 会员卡消耗记录中包含该记录锁定
}
@DataProvider
(
name
=
"dataProvider"
)
public
Object
[][]
dataProvider
()
{
return
new
Object
[][]{
{
"signIn"
,
"签到失败,已经签到,无需重复操作"
},
// 已经签到再次签到
{
"cancel"
,
"已签到预约记录无法取消"
},
// 已经签到取消预约
};
}
@Test
(
description
=
"签到"
,
priority
=
1
,
dataProvider
=
"dataProvider"
)
public
void
testSignIn2
(
String
type
,
String
message
)
{
if
(
type
.
equals
(
"signIn"
)){
reserveTools
.
signIn
(
false
,
memberInfo
.
getString
(
2
),
false
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
Assert
.
assertEquals
(
response
.
getString
(
"message"
),
message
,
"已经操作签到,又操作签到提示错误"
);
}
else
{
reserveTools
.
cancelMemberReserve
(
memberInfo
.
getString
(
2
),
false
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
Assert
.
assertEquals
(
response
.
getString
(
"message"
),
message
,
"已经操作签到,又操作取消提示错误"
);
}
}
/**
* @description:买卡
* @author: xuyamei
* @date: 2024/6/24 19:42
* @param courseId 课程id
* @param memberId 会员id
* @return: void
**/
public
void
signOrder
(
String
courseId
,
String
memberId
){
// 查询存量的卡
JSONObject
fetchPageOfMemberCard
=
cardTools
.
fetchPageOfMemberCard
(
courseId
);
int
total
=
Integer
.
parseInt
(
fetchPageOfMemberCard
.
getString
(
"total"
));
String
cardId
=
""
;
int
quantity
=
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
=
Integer
.
parseInt
(
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
,
"PURCHASE"
,
memberId
,
price
,
price
,
"1"
);
}
}
// 创建团课课次
public
void
createGroupSchedule
(){
// 查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"瑜伽"
);
courseId
=
courseTools
.
getPersonalOrGroupCourseId
(
"GROUP"
,
"艾格瑜伽团课课程(点名)"
,
categoryId
,
"STUDIO"
,
""
,
2
,
1
).
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
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
false
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)]);
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
//统计查询到的目标日程数量
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
getGroupScheduleTable
=
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
todayStartTimeTamp
),
scheduleEndTime
);
for
(
int
i
=
0
;
i
<
getGroupScheduleTable
.
size
();
i
++){
if
(
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
scheduleId
=
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
}
}
/**
* @description:创建学员并查询会员是否购买会员卡,如果已购买则查看权益,如果没有则进行购买
* @author: xuyamei
* @date: 2024/6/24 19:43
* @param memberName:会员姓名
* @return:
**/
public
JSONArray
createMember
(
String
memberName
){
String
memberId
=
""
;
// 查询存量的学员没有则创建学员,// todo 先手动新建
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
{
memberId
=
tools
.
commonSearch
(
memberName
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
// 查询是否有可用的会员卡,没有则购买
JSONArray
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"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
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId
,
Long
.
parseLong
(
todayStartTimeTamp
));
}
// 查询权益
String
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
JSONArray
members
=
new
JSONArray
();
members
.
add
(
memberId
);
members
.
add
(
benefitId
);
return
members
;
}
}
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