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
dc31a1f1
Commit
dc31a1f1
authored
Aug 28, 2024
by
xyy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增储值卡的case
parent
0d2efa0f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
263 additions
and
3 deletions
+263
-3
src/main/java/com/xiaomai/cases/lunar/reserve/ReserveCTools.java
+39
-2
src/main/java/com/xiaomai/cases/lunar/reserve/TestSingleReserveByDeposit.java
+185
-0
src/main/java/com/xiaomai/cases/polar/course/CourseTools.java
+39
-1
No files found.
src/main/java/com/xiaomai/cases/lunar/reserve/ReserveCTools.java
View file @
dc31a1f1
...
@@ -457,10 +457,47 @@ public class ReserveCTools extends XMBaseTest {
...
@@ -457,10 +457,47 @@ public class ReserveCTools extends XMBaseTest {
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
}
/**
* 获取可预私教老师列表
* @param memberId
* @param startDate
* @param endDate
* @param dataUserInfos
* @return
*/
public
JSONObject
getEnablePersonalCoachList
(
String
memberId
,
String
startDate
,
String
endDate
,
DataUserInfo
...
dataUserInfos
){
setUP
(
"API_getEnablePersonalCoachList"
,
dataUserInfos
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"startDate"
,
startDate
);
body
.
put
(
"endDate"
,
endDate
);
body
.
put
(
"coachId"
,
null
);
body
.
put
(
"courseChooseEnum"
,
null
);
body
.
put
(
"memberId"
,
memberId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
();
}
/**
* 获取私教的可约课程
* @param coachId
* @param dataUserInfos
* @return
*/
public
JSONObject
getCourseByPage
(
String
coachId
,
DataUserInfo
...
dataUserInfos
){
setUP
(
"API_getCourseByPage"
,
dataUserInfos
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"current"
,
0
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"courseType"
,
"PERSONAL"
);
body
.
put
(
"size"
,
10
);
body
.
put
(
"coachId"
,
coachId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
();
}
}
}
src/main/java/com/xiaomai/cases/lunar/reserve/TestSingleReserveByDeposit.java
0 → 100644
View file @
dc31a1f1
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.minMemberCard.MinCardTools
;
import
com.xiaomai.cases.lunar.order.OrderCTools
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.cases.polar.course.CourseTools
;
import
com.xiaomai.cases.polar.memberCard.CardTools
;
import
com.xiaomai.cases.polar.reserve.ReserveTools
;
import
com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools
;
import
com.xiaomai.client.DataUserInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
public
class
TestSingleReserveByDeposit
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
=
"orderCTools"
)
OrderCTools
orderCTools
;
@Resource
(
name
=
"minCardTools"
)
MinCardTools
minCardTools
;
@Resource
(
name
=
"cardTools"
)
CardTools
cardTools
;
DataUserInfo
info
=
new
DataUserInfo
();
public
String
depositCardId
;
public
String
reservePrice
;
public
String
courseId
;
public
String
chiefCoachId
;
public
String
voucherId
;
public
String
reserveId
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_createSingleReserve"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"小程序使用储值卡单次预约私教课"
)
public
void
testSingleReserveByDeposit
()
throws
InterruptedException
{
//b端先创建私教可单次预约的课程
createPersonalSchedule
();
//获取会员id
String
memberId
=
userTools
.
getMemberInfo
().
getString
(
"memberId"
);
//查询是否有可使用的储值卡,如果没有创建1张
int
num
=
XMJSONPath
.
getJSONArrayByReadPath
(
minCardTools
.
listUserUsableDepositCard
(
memberId
,
"SINGLE_PAY_RESERVE"
),
"$.result.applicableList"
).
size
();
if
(
num
>
0
){
for
(
int
i
=
0
;
i
<
num
-
1
;
i
++)
{
String
leftBalance
=
XMJSONPath
.
readPath
(
minCardTools
.
listUserUsableDepositCard
(
memberId
,
"SINGLE_PAY_RESERVE"
),
"$.result.applicableList["
+
i
+
"].depositBenefit.leftBalance"
);
//遍历储值卡的可用余额是否大于等于私教课的价格
if
(
Double
.
parseDouble
(
leftBalance
)
>=
Double
.
parseDouble
(
reservePrice
))
{
depositCardId
=
XMJSONPath
.
readPath
(
minCardTools
.
listUserUsableDepositCard
(
memberId
,
"SINGLE_PAY_RESERVE"
),
"$.result.applicableList["
+
i
+
"].id"
);
break
;
}
else
{
//切换B端校验
info
.
setTerminal
(
Terminal
.
B
);
info
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
//查询启用中的储值卡,获取储值卡id
String
cardId
=
XMJSONPath
.
readPath
(
cardTools
.
fetchPageOfMemberCard
(
"DEPOSIT_CARD"
,
info
),
"$.result.records[0].id"
);
//购买1张储值卡
cardTools
.
signOrderDeposit
(
cardId
,
memberId
,
"0.00"
,
"1000.00"
,
info
);
//获取C端第1张可使用的储值卡
depositCardId
=
XMJSONPath
.
readPath
(
minCardTools
.
listUserUsableDepositCard
(
memberId
,
"SINGLE_PAY_RESERVE"
),
"$.result.applicableList[0].id"
);
}
}
//查询要使用的储值卡消耗记录条数
String
depositBenefitId
=
XMJSONPath
.
readPath
(
minCardTools
.
findMemberCardDetailById
(
depositCardId
),
"$.result.depositBenefit.id"
);
int
total
=
Integer
.
parseInt
(
XMJSONPath
.
readPath
(
minCardTools
.
fetchPageOfConsumeRecord
(
depositCardId
,
depositBenefitId
),
"$.result.total"
));
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"addToQueue"
,
false
);
//排队
body
.
put
(
"areaIds"
,
null
);
//场地
body
.
put
(
"chiefCoachId"
,
chiefCoachId
);
//私教id
body
.
put
(
"courseId"
,
courseId
);
//私教可单次约课的课程id
body
.
put
(
"memberId"
,
memberId
);
//会员id
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
16
));
body
.
put
(
"receivableAmount"
,
"0.00"
);
body
.
put
(
"scheduleStartTime"
,
CommUtil
.
oneKeyGetAddDay
(
1
));
//约课开始时间:隔天
body
.
put
(
"spanMinutes"
,
10
);
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"memo"
,
"脚本使用储值卡单约预约私教课"
);
body
.
put
(
"depositCardId"
,
depositCardId
);
//储值卡id
body
.
put
(
"depositAmount"
,
reservePrice
);
//储值卡抵扣金额
//调用请求
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
voucherId
=
xmAppApi
.
getBodyInJSON
().
getString
(
"result"
);
//订单ID
Thread
.
sleep
(
5000
);
reserveId
=
reserveCTools
.
getDetailById
(
voucherId
).
getString
(
"reserveId"
);
//约课id
Thread
.
sleep
(
3000
);
//校验C端订单详情
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
orderCTools
.
getDetail
(
voucherId
),
"$.result.state"
),
"PAID"
,
"创建签单订单成功,但订单状态不是已完成"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
orderCTools
.
getDetail
(
voucherId
),
"$.result.voucherItems[0].skuType"
),
"SINGLE_RESERVE"
,
"C端创建的签单订单,商品类型非单次约课"
);
//检验储值卡的消耗记录新增1条
Assert
.
assertTrue
(
Integer
.
parseInt
(
XMJSONPath
.
readPath
(
minCardTools
.
fetchPageOfConsumeRecord
(
depositCardId
,
depositBenefitId
),
"$.result.total"
))==
total
+
1
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
minCardTools
.
fetchPageOfConsumeRecord
(
depositCardId
,
depositBenefitId
),
"$.result.records[0].consumeType"
),
"DEPOSIT_SIGN_ORDER"
);
//消耗类型:签单
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
minCardTools
.
fetchPageOfConsumeRecord
(
depositCardId
,
depositBenefitId
),
"$.result.records[0].changeOfGiveBalance"
),
"-"
+
reservePrice
);
//消耗赠送金额为单次约课的价格
//检验预约详情的预约状态及类型
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
reserveCTools
.
getReserveDetailById
(
reserveId
),
"$.accountType"
),
"SINGLE_RESERVE"
);
//预约方式:自主预约
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
reserveCTools
.
getReserveDetailById
(
reserveId
),
"$.reserveState"
),
"SUCCESS"
);
//预约状态
//数据清理
//取消约课
reserveCTools
.
cancelMemberReserve
(
reserveId
,
memberId
,
true
);
Thread
.
sleep
(
2000
);
//检验预约状态为取消
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
reserveCTools
.
getReserveDetailById
(
reserveId
),
"$.reserveState"
),
"RESERVE_CANCEL"
);
//预约取消
//储值卡金额退还
Assert
.
assertTrue
(
Integer
.
parseInt
(
XMJSONPath
.
readPath
(
minCardTools
.
fetchPageOfConsumeRecord
(
depositCardId
,
depositBenefitId
),
"$.result.total"
))==
total
+
2
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
minCardTools
.
fetchPageOfConsumeRecord
(
depositCardId
,
depositBenefitId
),
"$.result.records[0].consumeType"
),
"DEPOSIT_DISCARD_SIGN_ORDER"
);
//消耗类型:作废签单
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
minCardTools
.
fetchPageOfConsumeRecord
(
depositCardId
,
depositBenefitId
),
"$.result.records[0].changeOfGiveBalance"
),
reservePrice
);
//消耗赠送金额为单次约课的价格
//订单状态为取消
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
orderCTools
.
getDetail
(
voucherId
),
"$.result.state"
),
"DISCARD"
);
}
}
// 准备数据:创建私教可单次预约的数据
public
void
createPersonalSchedule
()
throws
InterruptedException
{
info
.
setTerminal
(
Terminal
.
B
);
info
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
reservePrice
=
"1.00"
;
//设置单次约课价格为1元一节
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"普拉提"
);
courseId
=
courseTools
.
getPersonalOrGroupCourseId
(
"PERSONAL"
,
"普拉提器械1VN私教课程"
,
categoryId
,
"STUDIO"
,
"ONE_TO_MANY"
,
20
,
1
,
info
).
getString
(
0
);
String
courseName
=
courseTools
.
getPersonalOrGroupCourseId
(
"PERSONAL"
,
"普拉提器械1VN私教课程"
,
categoryId
,
"STUDIO"
,
"ONE_TO_MANY"
,
20
,
1
,
info
).
getString
(
1
);
Thread
.
sleep
(
1000
);
// 第二步:查询存量的私教教练,并将教练添加到课程中
// 获取教练列表
JSONObject
pageStudioPersonalCoach
=
reserveTools
.
pageStudioPersonalCoach
(
""
,
info
);
// 获取超管
chiefCoachId
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"id"
);
// 编辑私教课程教练添加到课程中
courseTools
.
editPersonalCourse
(
categoryId
,
courseId
,
courseName
,
chiefCoachId
,
reservePrice
,
info
);
// 第三步:创建私教可约时间
// 设置可约时间
JSONArray
normalTimeInfoRequests
=
new
JSONArray
();
JSONObject
infoRequests
=
new
JSONObject
();
JSONArray
timePeriodInfos
=
new
JSONArray
();
//设置全天0:00-23:55可约
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
0
);
timeInfo
.
put
(
"spanMinutes"
,
1435
);
timePeriodInfos
.
add
(
timeInfo
);
infoRequests
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
// 每星期
String
[]
weekdays
=
{
"MONDAY"
,
"TUESDAY"
,
"WEDNESDAY"
,
"THURSDAY"
,
"FRIDAY"
,
"SATURDAY"
,
"SUNDAY"
};
infoRequests
.
put
(
"weekdays"
,
weekdays
);
normalTimeInfoRequests
.
add
(
infoRequests
);
// 设置可约时间
reserveTools
.
createNormalDate
(
chiefCoachId
,
normalTimeInfoRequests
,
info
);
Thread
.
sleep
(
1000
);
}
}
src/main/java/com/xiaomai/cases/polar/course/CourseTools.java
View file @
dc31a1f1
...
@@ -10,7 +10,6 @@ import com.xiaomai.utils.XMBaseTest;
...
@@ -10,7 +10,6 @@ import com.xiaomai.utils.XMBaseTest;
import
com.xiaomai.utils.XMJSONPath
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -454,7 +453,46 @@ public class CourseTools extends XMBaseTest {
...
@@ -454,7 +453,46 @@ public class CourseTools extends XMBaseTest {
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
}
/**
* 编辑私教课的单次约课价格
* @param categoryId 课程分类
* @param courseId 课程id
* @param courseName 课程名称
* @param coachId 私教id
* @param price 设置单次约课价格
* @param dataUserInfo
*/
public
void
editPersonalCourse
(
String
categoryId
,
String
courseId
,
String
courseName
,
String
coachId
,
String
price
,
DataUserInfo
...
dataUserInfo
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Course
)
.
setApiName
(
"API_editPersonalCourse"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfo
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"courseName"
,
courseName
);
body
.
put
(
"duration"
,
10
);
// 时长
body
.
put
(
"difficulty"
,
3
);
// 难度
body
.
put
(
"color"
,
"#AACF53"
);
body
.
put
(
"coverId"
,
"0"
);
body
.
put
(
"timeUnit"
,
"MINUTE"
);
body
.
put
(
"categoryId"
,
categoryId
);
body
.
put
(
"sourceId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
// 来源:场馆、品牌
body
.
put
(
"sourceType"
,
"STUDIO"
);
// 来源类型:场馆、品牌
body
.
put
(
"sizeType"
,
"ONE_TO_MANY"
);
// 私教模式
body
.
put
(
"allArea"
,
false
);
// 场地
JSONArray
coachIds
=
new
JSONArray
();
coachIds
.
add
(
coachId
);
body
.
put
(
"coachIds"
,
coachIds
);
body
.
put
(
"capacity"
,
20
);
// 课容量
body
.
put
(
"singleReserve"
,
true
);
// 允许单次约课
body
.
put
(
"minCapacity"
,
1
);
// 开课人数
body
.
put
(
"reservePrice"
,
price
);
// 单次约课的价格
body
.
put
(
"brandCourseId"
,
courseId
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
// 品牌
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
/**
* @description:编辑团课
* @description:编辑团课
...
...
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