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
a19c8b30
Commit
a19c8b30
authored
Aug 06, 2024
by
yangfangfang
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
6a802225
81748936
Show whitespace changes
Inline
Side-by-side
Showing
128 changed files
with
8520 additions
and
864 deletions
+8520
-864
module/lunar/整个模块.xml
+17
-0
module/polar/整个模块.xml
+2
-2
src/main/java/com/xiaomai/cases/lunar/order/TestListByVoucherId.java
+3
-2
src/main/java/com/xiaomai/cases/lunar/order/TestMiniPay.java
+3
-1
src/main/java/com/xiaomai/cases/lunar/order/TestPurchaseCard.java
+3
-1
src/main/java/com/xiaomai/cases/lunar/reserve/ReserveCTools.java
+128
-1
src/main/java/com/xiaomai/cases/lunar/reserve/TestAddMemberReserve.java
+6
-4
src/main/java/com/xiaomai/cases/lunar/reserve/TestAddToQueue.java
+18
-11
src/main/java/com/xiaomai/cases/lunar/reserve/TestCreateSingleReserve.java
+326
-0
src/main/java/com/xiaomai/cases/lunar/reserve/TestGetGroupBookingRules.java
+3
-1
src/main/java/com/xiaomai/cases/lunar/reserve/TestMemberTimetable.java
+3
-1
src/main/java/com/xiaomai/cases/lunar/reserve/TestSingleReserveSignIn.java
+257
-0
src/main/java/com/xiaomai/cases/lunar/reserve/TestXCXSignIn.java
+4
-2
src/main/java/com/xiaomai/cases/lunar/training/TestGetMemberCampScheduleItemList.java
+45
-0
src/main/java/com/xiaomai/cases/lunar/training/TestPurchaseCamp.java
+110
-0
src/main/java/com/xiaomai/cases/lunar/training/TestTrainingFindDetailById.java
+55
-0
src/main/java/com/xiaomai/cases/lunar/training/TestTrainingSign.java
+108
-0
src/main/java/com/xiaomai/cases/lunar/training/TrainingCTools.java
+121
-0
src/main/java/com/xiaomai/cases/polar/admin/TestAddStudioAdmin.java
+5
-3
src/main/java/com/xiaomai/cases/polar/admin/TestCheckDepartStudioAdmin.java
+3
-1
src/main/java/com/xiaomai/cases/polar/admin/TestCheckExistInStudio.java
+2
-1
src/main/java/com/xiaomai/cases/polar/admin/TestCheckModifyTeaching.java
+3
-1
src/main/java/com/xiaomai/cases/polar/admin/TestCheckPermConfigDup.java
+23
-21
src/main/java/com/xiaomai/cases/polar/admin/TestCheckRoleNameDup.java
+3
-1
src/main/java/com/xiaomai/cases/polar/admin/TestDepartStudioAdmin.java
+2
-1
src/main/java/com/xiaomai/cases/polar/admin/TestFindStudioBossInBrand.java
+1
-0
src/main/java/com/xiaomai/cases/polar/admin/TestStudioRoleCreate.java
+3
-1
src/main/java/com/xiaomai/cases/polar/admin/TestStudioRoleEdit.java
+2
-1
src/main/java/com/xiaomai/cases/polar/admin/TestStudioRoleGetPermList.java
+1
-0
src/main/java/com/xiaomai/cases/polar/admin/TestStudioRoleListByStudioId.java
+1
-0
src/main/java/com/xiaomai/cases/polar/applet/TestCheckXcxCashierStatus.java
+1
-1
src/main/java/com/xiaomai/cases/polar/clue/MemberTools.java
+1
-1
src/main/java/com/xiaomai/cases/polar/coupon/CouponTools.java
+254
-0
src/main/java/com/xiaomai/cases/polar/coupon/TestBatchSendCouponToMember.java
+216
-0
src/main/java/com/xiaomai/cases/polar/coupon/TestCreateCoupon.java
+67
-0
src/main/java/com/xiaomai/cases/polar/course/CourseTools.java
+93
-0
src/main/java/com/xiaomai/cases/polar/course/TestCheckCourseNameDup.java
+1
-0
src/main/java/com/xiaomai/cases/polar/course/TestCreateGroupCourse.java
+2
-1
src/main/java/com/xiaomai/cases/polar/course/TestCreatePersonalCourse.java
+2
-1
src/main/java/com/xiaomai/cases/polar/course/TestCreateSpecialDate.java
+0
-48
src/main/java/com/xiaomai/cases/polar/course/TestEditGroupCourse.java
+6
-1
src/main/java/com/xiaomai/cases/polar/course/TestEditPersonalCourse.java
+2
-1
src/main/java/com/xiaomai/cases/polar/eleContract/EleContractTools.java
+281
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestCheckContractConfig.java
+52
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanyAuthSignResult.java
+38
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanyCert.java
+38
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanyLastSuccessVerifyResult.java
+38
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanyLastVerifyStatus.java
+36
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanySignature.java
+36
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetContractEditDisplay.java
+60
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetNormalTemplateList.java
+36
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetShowResidueCount.java
+52
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetSuiteList.java
+51
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetTemplate.java
+40
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetTenantPurchaseFlag.java
+38
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetValidBalanceList.java
+52
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestSetBalanceWarning.java
+60
-0
src/main/java/com/xiaomai/cases/polar/eleContract/TestStartContractV2.java
+236
-0
src/main/java/com/xiaomai/cases/polar/finance/order/OrderTools.java
+28
-1
src/main/java/com/xiaomai/cases/polar/member/Tools.java
+2
-1
src/main/java/com/xiaomai/cases/polar/memberCard/CardTools.java
+218
-112
src/main/java/com/xiaomai/cases/polar/memberCard/GetMemberCardBaseInfoForSign.java
+82
-0
src/main/java/com/xiaomai/cases/polar/memberCard/TestActivateMemberCard.java
+108
-0
src/main/java/com/xiaomai/cases/polar/memberCard/TestMemberCardSearch.java
+14
-14
src/main/java/com/xiaomai/cases/polar/memberCard/TestModifyShelfState.java
+46
-24
src/main/java/com/xiaomai/cases/polar/memberCard/TestModifyXcxSaleState.java
+0
-5
src/main/java/com/xiaomai/cases/polar/reserve/ReserveTools.java
+365
-2
src/main/java/com/xiaomai/cases/polar/reserve/group/TestAddMemberReserve.java
+73
-28
src/main/java/com/xiaomai/cases/polar/reserve/group/TestAddToQueue.java
+42
-16
src/main/java/com/xiaomai/cases/polar/reserve/group/TestSignIn.java
+34
-13
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestCreateBatchNormalDate.java
+126
-0
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestCreateBatchSpecialDate.java
+202
-0
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestCreateNormalDate.java
+110
-0
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestCreateSpecialDate.java
+134
-0
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestGetCoachHistorySpecialDate.java
+166
-0
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestGetPersonalTimeBlocks.java
+127
-0
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestModifySpecialDate.java
+81
-0
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestReservePerson.java
+594
-0
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestSignReservePerson.java
+494
-0
src/main/java/com/xiaomai/cases/polar/schedule/camp/CampScheduleTools.java
+100
-8
src/main/java/com/xiaomai/cases/polar/schedule/camp/SelectTargetTrainingCampAndGetInfo.java
+3
-0
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestCreateCampRuleSchedule.java
+7
-6
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestDelCurrentAndSubsequentCampSchedule.java
+30
-45
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestDelCurrentCampScheduleItem.java
+111
-0
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestEditCampRuleSchedule.java
+79
-8
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestEditCurrentAndSubsequentCampSchedule.java
+51
-95
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestEditCurrentCampSchedule.java
+129
-0
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestGetCampScheduleItemDetail.java
+54
-5
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestGetCampScheduleTable.java
+5
-6
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestTrainingSign.java
+481
-0
src/main/java/com/xiaomai/cases/polar/schedule/group/GroupScheduleTools.java
+56
-9
src/main/java/com/xiaomai/cases/polar/schedule/group/TestCreateGroupRuleSchedule.java
+40
-16
src/main/java/com/xiaomai/cases/polar/schedule/group/TestDelCurrentAndSubsequentGroupSchedule.java
+77
-0
src/main/java/com/xiaomai/cases/polar/schedule/group/TestDelCurrentSingleGroupSchedule.java
+75
-0
src/main/java/com/xiaomai/cases/polar/schedule/group/TestDelGroupScheduleItem.java
+0
-112
src/main/java/com/xiaomai/cases/polar/schedule/group/TestEditCurrentAndSubsequentGroupSchedule.java
+143
-0
src/main/java/com/xiaomai/cases/polar/schedule/group/TestEditCurrentGroupSchedule.java
+22
-125
src/main/java/com/xiaomai/cases/polar/schedule/group/TestEditGroupRuleSchedule.java
+5
-2
src/main/java/com/xiaomai/cases/polar/schedule/group/TestGetGroupScheduleTable.java
+5
-2
src/main/java/com/xiaomai/cases/polar/schedule/group/UniversalDataScheduling.java
+6
-0
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestCanModifyCourseCategory.java
+1
-0
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestCheckCategoryNameDup.java
+1
-0
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestCreateCourseCategory.java
+1
-0
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestDeleteCourseCategory.java
+1
-0
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestEditCourseCategory.java
+1
-0
src/main/java/com/xiaomai/cases/polar/setting/rules/RuleTools.java
+48
-0
src/main/java/com/xiaomai/cases/polar/setting/rules/TestSaveGroupBookingRules.java
+1
-0
src/main/java/com/xiaomai/cases/polar/setting/venue/TestCreateVenueArea.java
+1
-0
src/main/java/com/xiaomai/cases/polar/setting/venue/TestDeleteVenueArea.java
+3
-1
src/main/java/com/xiaomai/cases/polar/setting/venue/TestEditVenueArea.java
+1
-0
src/main/java/com/xiaomai/cases/polar/training/BaseCreateTrainingData.java
+1
-1
src/main/java/com/xiaomai/cases/polar/training/TestCheckTrainingTitleDuplicate.java
+1
-0
src/main/java/com/xiaomai/cases/polar/training/TestDoForceOpenTraining.java
+31
-13
src/main/java/com/xiaomai/cases/polar/training/TestDoSignCampOrder.java
+136
-0
src/main/java/com/xiaomai/cases/polar/training/TestEditNoPublishTraining.java
+5
-57
src/main/java/com/xiaomai/cases/polar/training/TestEditPublishTraining.java
+105
-0
src/main/java/com/xiaomai/cases/polar/training/TestSearchTrainingAccountRecordsList.java
+123
-0
src/main/java/com/xiaomai/cases/polar/training/TestSearchTrainingList.java
+4
-1
src/main/java/com/xiaomai/cases/polar/training/TestSignWaitingCampOrder.java
+115
-0
src/main/java/com/xiaomai/cases/polar/training/TestUnpaidCampOrder.java
+97
-0
src/main/java/com/xiaomai/cases/polar/training/TrainingTools.java
+242
-19
src/main/java/com/xiaomai/client/ExtentTestNGIReporterListener.java
+1
-1
src/main/java/com/xiaomai/enums/ApiModule.java
+3
-1
src/main/java/com/xiaomai/enums/LoginAccount.java
+1
-0
src/main/java/com/xiaomai/utils/CommUtil.java
+18
-3
src/main/resources/dingding.json
+0
-0
src/main/resources/jdbc.properties
+1
-1
testng.xml
+2
-0
No files found.
module/lunar/整个模块.xml
0 → 100644
View file @
a19c8b30
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite
name=
"lunar"
>
<!-- 起一个好听且唯一的名字-->
<test
name=
"小程序整个模块测试"
preserve-order=
"true"
verbose=
"3"
>
<!-- 再起一个听且唯一的名字 -->
<packages>
<package
name=
"com.xiaomai.cases.lunar.*"
></package>
<!-- 添加自己想要集成测试的case 范围自己定 -->
</packages>
</test>
<listeners>
<listener
class-name=
"com.xiaomai.client.RetryListener"
/>
<listener
class-name=
"com.xiaomai.client.TestListener"
/>
<listener
class-name=
"com.xiaomai.client.ExtentTestNGIReporterListener"
/>
</listeners>
</suite>
\ No newline at end of file
module/polar/整个模块.xml
View file @
a19c8b30
<?xml
version="1.0" encoding="UTF-8"?>
<?xml
version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite
name=
"
整个场景case
"
>
<!-- 起一个好听且唯一的名字-->
<suite
name=
"
polar
"
>
<!-- 起一个好听且唯一的名字-->
<test
name=
"整个场馆信息模块测试"
preserve-order=
"true"
verbose=
"3"
>
<!-- 再起一个听且唯一的名字 -->
<packages>
...
...
src/main/java/com/xiaomai/cases/lunar/order/TestListByVoucherId.java
View file @
a19c8b30
...
...
@@ -11,7 +11,7 @@ import com.xiaomai.enums.RequestType;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.Before
Class
;
import
org.testng.annotations.Before
Method
;
import
org.testng.annotations.Test
;
import
java.math.BigDecimal
;
...
...
@@ -25,7 +25,8 @@ public class TestListByVoucherId extends BaseTestImpl {
CardTools
cardTools
=
new
CardTools
();
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Order
,
"API_listByVoucherId"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"yff"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/lunar/order/TestMiniPay.java
View file @
a19c8b30
...
...
@@ -13,6 +13,7 @@ import com.xiaomai.enums.RequestType;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
java.math.BigDecimal
;
...
...
@@ -34,7 +35,8 @@ public class TestMiniPay extends BaseTestImpl {
OrderTools
orderTools
=
new
OrderTools
();
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Order
,
"API_miniPay"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"yff"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/lunar/order/TestPurchaseCard.java
View file @
a19c8b30
...
...
@@ -15,6 +15,7 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.RandomStringUtil
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
java.math.BigDecimal
;
...
...
@@ -35,7 +36,8 @@ public class TestPurchaseCard extends BaseTestImpl {
CardTools
cardTools
=
new
CardTools
();
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Order
,
"API_purchaseCard"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"yff"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/lunar/reserve/ReserveCTools.java
View file @
a19c8b30
...
...
@@ -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 @
a19c8b30
...
...
@@ -20,6 +20,7 @@ import com.xiaomai.utils.TimeUtils;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -75,7 +76,8 @@ public class TestAddMemberReserve extends BaseTestImpl {
private
String
chiefCoachId
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_memberTimetable"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -125,7 +127,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
public
void
testAddMemberReserve2
(){
reserveCTools
.
memberReserveAdd
(
""
,
chiefCoachId
,
memberInfo
.
getString
(
1
),
""
,
memberInfo
.
getString
(
0
),
1
,
scheduleId
,
startTime
,
false
);
String
message
=
dataApi
.
getBodyInJSON
().
getString
(
"message"
);
Assert
.
assert
Equals
(
message
,
"预约失败,无需重复添加"
);
Assert
.
assert
True
(
message
.
equals
(
"预约失败,无需重复添加"
)
||
message
.
equals
(
"会员已约该课程,不可重复预约"
)
);
}
@DataProvider
...
...
@@ -180,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
);
//统计查询到的目标日程数量
...
...
@@ -311,7 +313,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
Assert
.
assertTrue
(
success
,
mes
+
"预约记录没有查询到相关信息"
);
// check 3:查询小程序预约详情
JSONObject
getDetailById
=
reserveCTools
.
getDetailById
(
memberInfo
.
getString
(
2
));
JSONObject
getDetailById
=
reserveCTools
.
get
Reserve
DetailById
(
memberInfo
.
getString
(
2
));
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getDetailById
.
getString
(
resultString
),
resultData
[
j
],
mes
+
"产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
...
...
src/main/java/com/xiaomai/cases/lunar/reserve/TestAddToQueue.java
View file @
a19c8b30
...
...
@@ -21,6 +21,7 @@ import com.xiaomai.utils.TimeUtils;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -81,7 +82,8 @@ public class TestAddToQueue extends BaseTestImpl {
private
String
memberId
;
private
String
chiefCoachId
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_addToQueue"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -147,16 +149,16 @@ public class TestAddToQueue extends BaseTestImpl {
@DataProvider
public
Object
[][]
data
(){
return
new
Object
[][]{
{
"reserve"
,
"FULL_CAPACITY
,
会员已约该课程,不可重复预约"
},
// 已经排队再次预约
{
"queue"
,
"排队失败,无需重复添加
,
会员已约该课程,不可重复预约"
},
// 已排队再次排队
{
"cancel"
,
"排队取消成功"
},
{
"notQueue"
,
"排队失败,课次未开放预约"
},
{
"queuing"
,
"排队成功"
}
{
"reserve"
,
"FULL_CAPACITY
"
,
"
会员已约该课程,不可重复预约"
},
// 已经排队再次预约
{
"queue"
,
"排队失败,无需重复添加
"
,
"
会员已约该课程,不可重复预约"
},
// 已排队再次排队
{
"cancel"
,
"排队取消成功"
,
""
},
{
"notQueue"
,
"排队失败,课次未开放预约"
,
""
},
{
"queuing"
,
"排队成功"
,
""
}
};
}
@Test
(
priority
=
2
,
dataProvider
=
"data"
)
public
void
testAddToQueue2
(
String
type
,
String
msg
)
{
public
void
testAddToQueue2
(
String
type
,
String
msg
,
String
msg2
)
{
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
...
...
@@ -164,11 +166,16 @@ public class TestAddToQueue extends BaseTestImpl {
switch
(
type
)
{
case
"reserve"
:
reserveCTools
.
memberReserveAdd
(
""
,
chiefCoachId
,
memberInfo
.
getString
(
1
),
""
,
memberInfo
.
getString
(
0
),
1
,
scheduleId
,
startTime
,
false
);
Assert
.
assertTrue
(
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"resultCode"
).
contains
(
msg
)
||
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
contains
(
msg
),
"排队异常提示信息不符合"
);
if
(
dataApi
.
getBodyInJSON
().
containsKey
(
"result"
)){
// 有时候会提示满员
Assert
.
assertTrue
(
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"resultCode"
).
equals
(
msg
),
"排队异常提示信息不符合"
);
}
else
{
Assert
.
assertTrue
(
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
equals
(
msg2
),
"排队异常提示信息不符合"
);
}
break
;
case
"queue"
:
reserveCTools
.
addToQueue
(
""
,
chiefCoachId
,
memberInfo
.
getString
(
0
),
memberInfo
.
getString
(
1
),
""
,
1
,
scheduleId
,
startTime
,
false
);
Assert
.
assertTrue
(
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
contains
(
msg
),
"排队异常提示信息不符合"
);
Assert
.
assertTrue
(
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
equals
(
msg
)
||
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
equals
(
msg2
),
"排队异常提示信息不符合"
);
break
;
case
"cancel"
:
// 取消排队
...
...
@@ -261,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
);
//统计查询到的目标日程数量
...
...
@@ -405,7 +412,7 @@ public class TestAddToQueue extends BaseTestImpl {
}
Assert
.
assertTrue
(
success
,
mes
+
"预约记录没有查询到相关信息"
);
// check 3:查询小程序预约详情
JSONObject
getDetailById
=
reserveCTools
.
getDetailById
(
memberInfo
.
getString
(
2
));
JSONObject
getDetailById
=
reserveCTools
.
get
Reserve
DetailById
(
memberInfo
.
getString
(
2
));
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getDetailById
.
getString
(
resultString
),
resultData
[
j
],
mes
+
"产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
...
...
src/main/java/com/xiaomai/cases/lunar/reserve/TestCreateSingleReserve.java
0 → 100644
View file @
a19c8b30
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
testCreateSingleReserve
()
{
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
);
// 修改课程支持单次约课
courseTools
.
editGroupCourse
(
categoryId
,
courseId
,
"单次付费约课团课"
,
10
,
true
,
0
,
dataUserInfo
);
// 创建排课
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
;
}
}
}
}
src/main/java/com/xiaomai/cases/lunar/reserve/TestGetGroupBookingRules.java
View file @
a19c8b30
...
...
@@ -9,6 +9,7 @@ import com.xiaomai.enums.LoginAccount;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -30,7 +31,8 @@ public class TestGetGroupBookingRules extends BaseTestImpl {
@Resource
(
name
=
"ruleTools"
)
RuleTools
ruleTools
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_getGroupBookingRules"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/lunar/reserve/TestMemberTimetable.java
View file @
a19c8b30
...
...
@@ -10,6 +10,7 @@ import com.xiaomai.enums.RequestType;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
...
...
@@ -26,7 +27,8 @@ import javax.annotation.Resource;
public
class
TestMemberTimetable
extends
BaseTestImpl
{
@Resource
(
name
=
"userTools"
)
UserTools
userTools
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_memberTimetable"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/lunar/reserve/TestSingleReserveSignIn.java
0 → 100644
View file @
a19c8b30
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
testSingleReserveSignIn
()
{
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
(
0
);
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/TestXCXSignIn.java
View file @
a19c8b30
...
...
@@ -20,6 +20,7 @@ import com.xiaomai.utils.TimeUtils;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -76,7 +77,8 @@ public class TestXCXSignIn extends BaseTestImpl {
private
String
chiefCoachId
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_signInByScanCode"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -330,7 +332,7 @@ public class TestXCXSignIn extends BaseTestImpl {
}
Assert
.
assertTrue
(
success
,
mes
+
"预约记录没有查询到相关信息"
);
// check 3:查询小程序预约详情
JSONObject
getDetailById
=
reserveCTools
.
getDetailById
(
memberInfo
.
getString
(
2
));
JSONObject
getDetailById
=
reserveCTools
.
get
Reserve
DetailById
(
memberInfo
.
getString
(
2
));
for
(
int
j
=
0
;
j
<
result
.
length
;
j
++){
String
resultString
=
result
[
j
].
equals
(
"reserveId"
)?
"id"
:
result
[
j
];
Assert
.
assertEquals
(
getDetailById
.
getString
(
resultString
),
resultData
[
j
],
mes
+
"产生的数据与实际数据不符合"
+
result
[
j
]+
":"
+
resultData
[
j
]);
...
...
src/main/java/com/xiaomai/cases/lunar/training/TestGetMemberCampScheduleItemList.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
lunar
.
training
;
import
com.alibaba.fastjson.JSONArray
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.training
* @Author: xuyamei
* @CreateTime: 2024-07-31 17:45
* @Description: 训练营课表数据
* @Version: 1.0
*/
public
class
TestGetMemberCampScheduleItemList
extends
BaseTestImpl
{
@Resource
(
name
=
"trainingCTools"
)
TrainingCTools
trainTools
;
@Resource
(
name
=
"userTools"
)
UserTools
userTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Training
,
"API_getMemberCampScheduleItemList"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"获取会员训练营课表数据"
)
public
void
testGetMemberCampScheduleItemList
(){
// 获取的微信用户
String
memberId
=
userTools
.
getMemberInfo
().
getString
(
"memberId"
);
JSONArray
data
=
trainTools
.
getMemberCampScheduleItemList
(
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
);
Assert
.
assertEquals
(
data
.
size
()>=
3
,
true
,
"有3条存量的训练营课次数据"
);
}
}
src/main/java/com/xiaomai/cases/lunar/training/TestPurchaseCamp.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
lunar
.
training
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.lunar.order.OrderCTools
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
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.RandomStringUtil
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.training
* @Author: xuyamei
* @CreateTime: 2024-07-31 14:55
* @Description: 购买存量的训练营
* @Version: 1.0
*/
public
class
TestPurchaseCamp
extends
BaseTestImpl
{
@Resource
(
name
=
"trainingCTools"
)
TrainingCTools
trainTools
;
@Resource
(
name
=
"userTools"
)
UserTools
userTools
;
OrderCTools
orderCTools
=
new
OrderCTools
();
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
private
String
orderId
=
""
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Training
,
"API_purchaseCamp"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testPurchaseCamp
(){
// 获取存量训练营活动
String
id
=
trainTools
.
getAppliableCampList
(
"存量训练营C端报名活动"
).
getJSONObject
(
0
).
getString
(
"id"
);
// 获取的微信用户
String
memberId
=
userTools
.
getMemberInfo
().
getString
(
"memberId"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"campId"
,
id
);
body
.
put
(
"memberId"
,
memberId
);
body
.
put
(
"memo"
,
""
);
body
.
put
(
"receivableAmount"
,
"0.00"
);
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
16
));
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
orderId
=
xmAppApi
.
getBodyInJSON
().
getString
(
"result"
);
// check 1:订单详情
JSONArray
voucherItems
=
orderCTools
.
getDetail
(
orderId
).
getJSONObject
(
"result"
).
getJSONArray
(
"voucherItems"
);
String
[]
keys
=
new
String
[]{
"skuId"
,
"skuType"
};
String
[]
expect
=
new
String
[]{
id
,
"TRAINING_CAMP"
};
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++)
{
Assert
.
assertTrue
(
voucherItems
.
getJSONObject
(
0
).
getString
(
keys
[
i
]).
equals
(
expect
[
i
])
);
}
// check 2:查询我的训练营列表
JSONArray
listMyTrainingCamp
=
trainTools
.
listMyTrainingCamp
(
memberId
);
keys
=
new
String
[]{
"tradeOrderId"
,
"accountType"
};
expect
=
new
String
[]{
orderId
,
"TRAINING"
};
// 生成训练营账户的id
String
accountId
=
""
;
for
(
int
i
=
0
;
i
<
listMyTrainingCamp
.
size
();
i
++){
if
(
listMyTrainingCamp
.
getJSONObject
(
i
).
getString
(
"tenantMemberCardId"
).
equals
(
id
)){
for
(
int
j
=
0
;
j
<
keys
.
length
;
j
++){
Assert
.
assertTrue
(
listMyTrainingCamp
.
getJSONObject
(
i
).
getString
(
keys
[
j
]).
equals
(
expect
[
j
]));
accountId
=
listMyTrainingCamp
.
getJSONObject
(
i
).
getString
(
"id"
);
}
}
}
// check 3:获取我的训练营详情 以及和购买的训练营内容是否一致
JSONObject
findMyTrainingCampDetailById
=
trainTools
.
findMyTrainingCampDetailById
(
accountId
);
JSONObject
findDetailById
=
trainTools
.
findDetailById
(
id
,
memberId
);
keys
=
new
String
[]{
"id"
,
"studioId"
,
"title"
,
"courseId"
,
"openStartDate"
,
"openEndDate"
,
"totalClassHour"
,
"price"
,
"trainerIds"
};
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++){
Assert
.
assertTrue
(
findMyTrainingCampDetailById
.
getJSONObject
(
"trainingCampInfo"
).
getString
(
keys
[
i
]).
equals
(
findDetailById
.
getString
(
keys
[
i
])));
}
// check 3.2 验证我的训练营订单id
Assert
.
assertTrue
(
findMyTrainingCampDetailById
.
getString
(
"tradeOrderId"
).
equals
(
orderId
));
}
@Test
(
description
=
"作废订单数据,为了下次再购买"
,
priority
=
2
)
public
void
delOrderData
(){
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
orderTools
.
discard
(
orderId
,
"重复录入"
,
"作废训练营订单"
,
dataUserInfo
);
}
}
src/main/java/com/xiaomai/cases/lunar/training/TestTrainingFindDetailById.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
lunar
.
training
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.cases.polar.training.TrainingTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.training
* @Author: xuyamei
* @CreateTime: 2024-07-31 15:03
* @Description: 小程序训练营详情
* @Version: 1.0
*/
public
class
TestTrainingFindDetailById
extends
BaseTestImpl
{
@Resource
(
name
=
"trainingCTools"
)
TrainingCTools
trainingCTools
;
@Resource
(
name
=
"userTools"
)
UserTools
userTools
;
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Training
,
"API_findDetailById"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testTrainingFindDetailById
(){
// 获取微信学员
String
memberId
=
userTools
.
getMemberInfo
().
getString
(
"memberId"
);
// 获取训练营活动
String
id
=
trainingCTools
.
getAppliableCampList
(
"量训练营C端报名活动"
).
getJSONObject
(
0
).
getString
(
"id"
);
JSONObject
findDetailById
=
trainingCTools
.
findDetailById
(
id
,
memberId
);
String
[]
keys
=
{
"id"
,
"studioId"
,
"state"
,
"title"
,
"courseId"
,
"openStartDate"
,
"openEndDate"
,
"totalClassHour"
,
"price"
,
"trainerIds"
};
trainingTools
.
findTrainingDetailById
(
id
);
JSONObject
findTrainingDetailById
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++){
Assert
.
assertEquals
(
findDetailById
.
getString
(
keys
[
i
]),
findTrainingDetailById
.
getString
(
keys
[
i
]),
"训练营详情返回值与B端对比内容不一致"
);
}
}
}
src/main/java/com/xiaomai/cases/lunar/training/TestTrainingSign.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
lunar
.
training
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.lunar.reserve.ReserveCTools
;
import
com.xiaomai.cases.lunar.user.UserTools
;
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.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.training
* @Author: xuyamei
* @CreateTime: 2024-08-01 10:18
* @Description: 训练营签到(因训练营点名只能取存量数据,所以准备3个存量活动执行点名,超出3次抛出异常)
* @Version: 1.0
*/
public
class
TestTrainingSign
extends
BaseTestImpl
{
@Resource
(
name
=
"trainingCTools"
)
TrainingCTools
trainTools
;
@Resource
(
name
=
"userTools"
)
UserTools
userTools
;
@Resource
(
name
=
"ruleTools"
)
RuleTools
ruleTools
;
@Resource
(
name
=
"reserveCTools"
)
ReserveCTools
reserveCTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Lunar_Reserve
,
"API_signInByScanCode"
,
LoginAccount
.
GYM_MINIAPPC
,
Terminal
.
minApp
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"训练营签到"
)
public
void
testTrainingSign
(){
DataUserInfo
dataUserInfo
=
new
DataUserInfo
();
dataUserInfo
.
setTerminal
(
Terminal
.
B
);
dataUserInfo
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
// 获取的微信用户
String
memberId
=
userTools
.
getMemberInfo
().
getString
(
"memberId"
);
// 获取训练营签到规则
JSONObject
getRules
=
ruleTools
.
getCampBookingRules
(
dataUserInfo
);
// 获取场馆团课预约规则
String
id
=
getRules
.
getString
(
"id"
);
// 获取规则id
// 因训练营课表列表无法查看到约课id,所以签到方式只取扫码签到
ruleTools
.
saveCampBookingRules
(
id
,
true
,
true
,
999
,
dataUserInfo
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
String
scheduleId
=
""
;
JSONArray
getMemberCampScheduleItemList
=
trainTools
.
getMemberCampScheduleItemList
(
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
);
boolean
hasData
=
false
;
for
(
int
j
=
0
;
j
<
getMemberCampScheduleItemList
.
size
();
j
++){
if
(
getMemberCampScheduleItemList
.
getJSONObject
(
j
).
getString
(
"recordStatus"
).
equals
(
"TODO"
)){
hasData
=
true
;
scheduleId
=
getMemberCampScheduleItemList
.
getJSONObject
(
j
).
getString
(
"scheduleId"
);
}
}
Assert
.
assertTrue
(
hasData
,
"存量已经没有可签到的训练营,请手动回归训练营手动签到和扫码签到"
);
// 扫码签到
reserveCTools
.
signInByScanCode
(
true
,
scheduleId
,
memberId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1: 课次列表是已点名状态
getMemberCampScheduleItemList
=
trainTools
.
getMemberCampScheduleItemList
(
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
);
for
(
int
j
=
0
;
j
<
getMemberCampScheduleItemList
.
size
();
j
++){
if
(
getMemberCampScheduleItemList
.
getJSONObject
(
j
).
getString
(
"scheduleId"
).
equals
(
scheduleId
)){
Assert
.
assertEquals
(
getMemberCampScheduleItemList
.
getJSONObject
(
j
).
getString
(
"recordStatus"
),
"DONE"
,
"签到失败"
);
}
}
// check 2:查询小程序预约记录
JSONArray
getPageByMember
=
reserveCTools
.
getPageByMember
(
"SIGNED"
,
""
,
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
,
"TRAINING_CAMP"
);
boolean
success
=
false
;
String
reserveId
=
""
;
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"scheduleId"
).
equals
(
scheduleId
)){
success
=
true
;
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"signInState"
),
"SIGNED"
);
reserveId
=
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
);
}
}
Assert
.
assertTrue
(
success
,
"签到之后预约记录没有查询到相关信息"
);
// check 3:查询小程序预约详情
JSONObject
getDetailById
=
reserveCTools
.
getReserveDetailById
(
reserveId
);
Assert
.
assertEquals
(
getDetailById
.
getString
(
"signInState"
),
"SIGNED"
);
}
}
src/main/java/com/xiaomai/cases/lunar/training/TrainingCTools.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
lunar
.
training
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.client.DataUserInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.springframework.stereotype.Component
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.training
* @Author: xuyamei
* @CreateTime: 2024-07-31 14:48
* @Description: 训练营相关接口
* @Version: 1.0
*/
@Component
(
"trainingCTools"
)
public
class
TrainingCTools
extends
BaseTestImpl
{
public
void
setUP
(
String
apiName
,
DataUserInfo
...
userInfo
)
{
dataApi
.
setApiModule
(
ApiModule
.
Lunar_Training
)
.
setApiName
(
apiName
)
.
setTerminal
(
Terminal
.
minApp
);
super
.
beforeDataRequest
(
userInfo
);
}
/**
* @description: 查询在售训练营
* @author: xuyamei
* @date: 2024/7/31 16:55
* @param title:训练营名称
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getAppliableCampList
(
String
title
)
{
setUP
(
"API_fetchAppliableCampList"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
10
);
body
.
put
(
"title"
,
title
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
}
/**
* @description:查询训练营详情
* @author: xuyamei
* @date: 2024/7/31 16:55
* @param trainingCampId 训练营活动id
* @param memberId 会员id
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONObject
findDetailById
(
String
trainingCampId
,
String
memberId
)
{
setUP
(
"API_findDetailById"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"trainingCampId"
,
trainingCampId
);
body
.
put
(
"memberId"
,
memberId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description:我的训练营列表
* @author: xuyamei
* @date: 2024/7/31 16:56
* @param memberId 会员id
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
listMyTrainingCamp
(
String
memberId
)
{
setUP
(
"API_listMyTrainingCamp"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"memberId"
,
memberId
);
body
.
put
(
"usable"
,
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONArray
(
"result"
);
}
/**
* @description:获取我的训练营详情
* @author: xuyamei
* @date: 2024/7/31 17:06
* @param id
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONObject
findMyTrainingCampDetailById
(
String
id
)
{
setUP
(
"API_findMyTrainingCampDetailById"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"id"
,
id
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
public
JSONArray
getMemberCampScheduleItemList
(
Long
startDate
,
Long
endDate
,
String
memberId
){
setUP
(
"API_getMemberCampScheduleItemList"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"startDate"
,
startDate
);
body
.
put
(
"endDate"
,
endDate
);
body
.
put
(
"memberId"
,
memberId
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONArray
(
"result"
);
}
}
src/main/java/com/xiaomai/cases/polar/admin/TestAddStudioAdmin.java
View file @
a19c8b30
...
...
@@ -10,6 +10,7 @@ import com.xiaomai.enums.LoginAccount;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
...
...
@@ -31,7 +32,8 @@ public class TestAddStudioAdmin extends BaseTestImpl {
ConfigTools
configTools
;
private
String
phone
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_addStudioAdmin"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -62,7 +64,7 @@ public class TestAddStudioAdmin extends BaseTestImpl {
}
try
{
Thread
.
sleep
(
1
0
000
);
Thread
.
sleep
(
1
5
000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
...
...
@@ -105,7 +107,7 @@ public class TestAddStudioAdmin extends BaseTestImpl {
}
try
{
Thread
.
sleep
(
1
0
000
);
Thread
.
sleep
(
1
5
000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestCheckDepartStudioAdmin.java
View file @
a19c8b30
...
...
@@ -8,6 +8,7 @@ import com.xiaomai.enums.LoginAccount;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -26,7 +27,8 @@ public class TestCheckDepartStudioAdmin extends BaseTestImpl {
@Resource
(
name
=
"adminTools"
)
AdminTools
adminTools
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_checkDepartStudioAdmin"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestCheckExistInStudio.java
View file @
a19c8b30
...
...
@@ -7,6 +7,7 @@ import com.xiaomai.enums.LoginAccount;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -24,7 +25,7 @@ public class TestCheckExistInStudio extends BaseTestImpl {
@Resource
(
name
=
"adminTools"
)
AdminTools
adminTools
;
@Before
Class
@Before
Method
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_checkExistInStudio"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestCheckModifyTeaching.java
View file @
a19c8b30
...
...
@@ -10,6 +10,7 @@ import com.xiaomai.enums.LoginAccount;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -31,7 +32,8 @@ public class TestCheckModifyTeaching extends BaseTestImpl {
@Resource
(
name
=
"courseCategoryTools"
)
CourseCategoryTools
courseCategoryTools
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_addStudioAdmin"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestCheckPermConfigDup.java
View file @
a19c8b30
...
...
@@ -9,6 +9,7 @@ import com.xiaomai.enums.RequestType;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -22,7 +23,8 @@ import org.testng.annotations.Test;
*/
public
class
TestCheckPermConfigDup
extends
BaseTestImpl
{
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_checkPermConfigDup"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -31,26 +33,26 @@ public class TestCheckPermConfigDup extends BaseTestImpl {
@DataProvider
()
public
Object
[][]
data
(){
return
new
Object
[][]{
{
"{\n"
+
"\t\"permCodes\": [\"FitHeadInfo\", \"FitIncomeExpense\", \"FitSeeOrder\", \"FitEditOrder\", \"FitSeeXmPay\", \"FitManageXmPay\", \"FitFinanceData\"],\n"
+
"\t\"configMap\": {\n"
+
"\t\t\"memberAccess\": true,\n"
+
"\t\t\"scheduleAccess\": false,\n"
+
"\t\t\"reserveAccess\": false,\n"
+
"\t\t\"followUpAccess\": false,\n"
+
"\t\t\"importAccess\": true,\n"
+
"\t\t\"exportAccess\": true,\n"
+
"\t\t\"taskAccess\": true,\n"
+
"\t\t\"orderAccess\": true,\n"
+
"\t\t\"incomeExpenseAccess\": true,\n"
+
"\t\t\"potentialPhoneMask\": false,\n"
+
"\t\t\"memberPhoneMask\": false,\n"
+
"\t\t\"historyPhoneMask\": false\n"
+
"\t},\n"
+
"\t\"brandId\": \"1796482011391729666\",\n"
+
"\t\"studioId\": \"1800375402938871809\",\n"
+
"\t\"operatorId\": \"1796482250721169409\"\n"
+
"}"
,
true
},
// 存在有相同权限的角色
//
{"{\n" +
//
"\t\"permCodes\": [\"FitHeadInfo\", \"FitIncomeExpense\", \"FitSeeOrder\", \"FitEditOrder\", \"FitSeeXmPay\", \"FitManageXmPay\", \"FitFinanceData\"],\n" +
//
"\t\"configMap\": {\n" +
//
"\t\t\"memberAccess\": true,\n" +
//
"\t\t\"scheduleAccess\": false,\n" +
//
"\t\t\"reserveAccess\": false,\n" +
//
"\t\t\"followUpAccess\": false,\n" +
//
"\t\t\"importAccess\": true,\n" +
//
"\t\t\"exportAccess\": true,\n" +
//
"\t\t\"taskAccess\": true,\n" +
//
"\t\t\"orderAccess\": true,\n" +
//
"\t\t\"incomeExpenseAccess\": true,\n" +
//
"\t\t\"potentialPhoneMask\": false,\n" +
//
"\t\t\"memberPhoneMask\": false,\n" +
//
"\t\t\"historyPhoneMask\": false\n" +
//
"\t},\n" +
//
"\t\"brandId\": \"1796482011391729666\",\n" +
//
"\t\"studioId\": \"1800375402938871809\",\n" +
//
"\t\"operatorId\": \"1796482250721169409\"\n" +
//
"}",true}, // 存在有相同权限的角色
{
"{\n"
+
" \"permCodes\": [\"FitHeadPage\", \"FitCluePublic\", \"FitAddClue\", \"FitEditClue\", \"FitReleaseClue\"],\n"
+
" \"configMap\": {\n"
+
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestCheckRoleNameDup.java
View file @
a19c8b30
...
...
@@ -9,6 +9,7 @@ import com.xiaomai.enums.RequestType;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -22,7 +23,8 @@ import org.testng.annotations.Test;
*/
public
class
TestCheckRoleNameDup
extends
BaseTestImpl
{
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_checkRoleNameDup"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestDepartStudioAdmin.java
View file @
a19c8b30
...
...
@@ -9,6 +9,7 @@ import com.xiaomai.enums.RequestType;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
...
...
@@ -29,7 +30,7 @@ public class TestDepartStudioAdmin extends BaseTestImpl {
@Resource
(
name
=
"configTools"
)
ConfigTools
configTools
;
@Before
Class
@Before
Method
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_departStudioAdmin"
,
LoginAccount
.
GYM_PROD2
,
Terminal
.
B
,
"xym"
);
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestFindStudioBossInBrand.java
View file @
a19c8b30
...
...
@@ -24,6 +24,7 @@ public class TestFindStudioBossInBrand extends BaseTestImpl {
@Resource
(
name
=
"adminTools"
)
AdminTools
adminTools
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_findStudioBossInBrand"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestStudioRoleCreate.java
View file @
a19c8b30
...
...
@@ -10,6 +10,7 @@ import com.xiaomai.enums.RequestType;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
...
...
@@ -30,7 +31,8 @@ public class TestStudioRoleCreate extends BaseTestImpl {
@Resource
(
name
=
"configTools"
)
ConfigTools
configTools
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_studioRole_create"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestStudioRoleEdit.java
View file @
a19c8b30
...
...
@@ -29,6 +29,7 @@ public class TestStudioRoleEdit extends BaseTestImpl {
@Resource
(
name
=
"configTools"
)
ConfigTools
configTools
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_studioRole_edit"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -87,7 +88,7 @@ public class TestStudioRoleEdit extends BaseTestImpl {
Assert
.
assertEquals
(
response
.
getJSONObject
(
"result"
).
getString
(
"name"
),
"编辑角色名称"
,
"编辑角色名称失败"
);
try
{
Thread
.
sleep
(
4
000
);
Thread
.
sleep
(
15
000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestStudioRoleGetPermList.java
View file @
a19c8b30
...
...
@@ -22,6 +22,7 @@ import javax.annotation.Resource;
*/
public
class
TestStudioRoleGetPermList
extends
BaseTestImpl
{
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_studioRole_getPermList"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/admin/TestStudioRoleListByStudioId.java
View file @
a19c8b30
...
...
@@ -22,6 +22,7 @@ import org.testng.annotations.Test;
*/
public
class
TestStudioRoleListByStudioId
extends
BaseTestImpl
{
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_studioRole_listByStudioId"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/applet/TestCheckXcxCashierStatus.java
View file @
a19c8b30
...
...
@@ -43,6 +43,6 @@ public class TestCheckXcxCashierStatus extends XMBaseTest {
object
.
put
(
"appId"
,
appId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
object
.
toString
(),
headers
).
assetsSuccess
(
true
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
xmAppApi
.
getBodyInJSON
(),
"$.result.status"
),
"
NOOPEN
"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
xmAppApi
.
getBodyInJSON
(),
"$.result.status"
),
"
SUCCESS
"
);
}
}
src/main/java/com/xiaomai/cases/polar/clue/MemberTools.java
View file @
a19c8b30
...
...
@@ -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/coupon/CouponTools.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
coupon
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.client.DataUserInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.stereotype.Component
;
import
org.testng.Assert
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 小麦乐动优惠券工具类
*
* @author adu
* data 2024/7/25 17:32
*/
@Component
(
"couponTools"
)
public
class
CouponTools
extends
BaseTestImpl
{
/**
* 同一个ApiModule下的登录信息封装出一个类,减少代码冗余
*
* @param apiName
* @param userInfo
*/
public
void
setUP
(
String
apiName
,
DataUserInfo
...
userInfo
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Coupon
)
.
setApiName
(
apiName
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
userInfo
);
}
/**
* 创建优惠券
*
* @param useThresholdType 使用门槛:1无门槛 WITHOUT 2达到条件可用 THRESHOLD
* @param receiveTimesUpperType 每人领取次数限制:1每人限领 FIXED 2不限制 WITHOUT
* @param memberStatusLimits 可领取会员类型 ["POTENTIAL", "NORMAL", "HISTORY"] 一共3种,可以自己自定义选其中的某个或者全部
* @param couponName 优惠券的名称
* @param allScope 适用范围 全部:true,非全部:false
* @param preferentialType 优惠方式:1金额 CERTAIN 2折扣 DISCOUNT
* @param quantity 发放数量
* @param validPeriodType 使用有效期方式:1固定期限 ABSOLUTE 2领取后生效 RELATIVE
* @param memo 备注
* @return 优惠券ID
*/
public
String
createCoupon
(
String
useThresholdType
,
String
receiveTimesUpperType
,
List
<
String
>
memberStatusLimits
,
String
couponName
,
Boolean
allScope
,
String
preferentialType
,
int
quantity
,
String
validPeriodType
,
String
memo
)
{
setUP
(
"API_createCoupon"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
JSONObject
receiveCondition
=
new
JSONObject
();
body
.
put
(
"useThresholdType"
,
useThresholdType
);
if
(
useThresholdType
.
equals
(
"THRESHOLD"
))
{
//使用门槛是达到条件可用
body
.
put
(
"useThreshold"
,
10
);
//目前没写成动态传参,固定为10元
}
receiveCondition
.
put
(
"receiveTimesUpperType"
,
receiveTimesUpperType
);
if
(
receiveTimesUpperType
.
equals
(
"FIXED"
))
{
receiveCondition
.
put
(
"receiveTimesUpper"
,
1
);
//每人限领次数
}
receiveCondition
.
put
(
"memberStatusLimits"
,
memberStatusLimits
);
//可领取会员类型
body
.
put
(
"receiveCondition"
,
receiveCondition
);
body
.
put
(
"name"
,
couponName
);
body
.
put
(
"allScope"
,
allScope
);
if
(
allScope
.
equals
(
false
))
{
//适用范围不是选全部时
List
<
String
>
scope
=
new
ArrayList
<>();
scope
.
add
(
"TRAINING_CAMP"
);
body
.
put
(
"scope"
,
scope
);
//此处固定写了适用范围为训练营
}
body
.
put
(
"preferentialType"
,
preferentialType
);
if
(
preferentialType
.
equals
(
"CERTAIN"
))
{
//优惠方式选择金额
body
.
put
(
"preferential"
,
10
);
}
if
(
preferentialType
.
equals
(
"DISCOUNT"
))
{
//优惠方式选择金额
body
.
put
(
"preferential"
,
8.8
);
}
body
.
put
(
"quantity"
,
quantity
);
body
.
put
(
"validPeriodType"
,
validPeriodType
);
if
(
validPeriodType
.
equals
(
"RELATIVE"
))
{
//有效期:领取后生效
body
.
put
(
"relativeDay"
,
1
);
//使用有效期:领取后 1天内
}
if
(
validPeriodType
.
equals
(
"ABSOLUTE"
))
{
//有效期:固定时间
body
.
put
(
"validPeriodStartTime"
,
CommUtil
.
oneKeyGetAddDay
(
1
));
//有效期的开始时间:明天的0点
body
.
put
(
"validPeriodEndTime"
,
CommUtil
.
getNDayEndTimeTamp
(
5
));
//有效期的结束时间:5天后的 23:59:59
}
if
(
null
!=
memo
||
!
memo
.
isEmpty
())
{
body
.
put
(
"memo"
,
memo
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
return
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
}
/**
* 查看优惠券列表
* @param nameLike 全局搜索中 根据优惠券名称搜索
* @param status 列表中根据优惠券状态搜索
*/
public
void
getStudioCouponList
(
String
nameLike
,
String
status
){
setUP
(
"API_getStudioCouponList"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
500
);
if
(
null
!=
nameLike
||
!
nameLike
.
isEmpty
())
{
body
.
put
(
"nameLike"
,
nameLike
);
}
if
(
null
!=
status
||
!
status
.
isEmpty
())
{
body
.
put
(
"status"
,
status
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* 查看优惠券详情
* @param couponId
*/
public
void
getCouponDetail
(
String
couponId
){
setUP
(
"API_getCouponDetail"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
couponId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* 失效优惠券
* @param couponId
*/
public
void
InvalidCoupon
(
String
couponId
){
setUP
(
"API_ InvalidCoupon"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
couponId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 修改优惠券的剩余数量
* @param couponId 优惠券ID
* @param inventory 修改后的剩余数量
*/
public
void
modifyCouponInventory
(
String
couponId
,
int
inventory
){
setUP
(
"API_modifyCouponInventory"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
couponId
);
body
.
put
(
"inventory"
,
inventory
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 任务中心
*/
public
void
getStudioBatchTaskPage
(){
setUP
(
"API_getStudioBatchTaskPage"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
500
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* 优惠券详情-查看已发放/已使用优惠券
* @param couponId 优惠券ID
* @param status 优惠券的适用状态,""表示已发放列表的状态,USED是已使用
*/
public
void
getCouponReceiveRecord
(
String
couponId
,
String
status
){
setUP
(
"API_getCouponReceiveRecord"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
500
);
body
.
put
(
"couponId"
,
couponId
);
body
.
put
(
"status"
,
status
);
if
(
status
.
isEmpty
()){
body
.
put
(
"status"
,
null
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 会员详情-查看会员已领取/已发放优惠券
* @param memberId 会员ID
* @param status 优惠券状态:待使用"AVAILABLE", 已使用"USED", 已过期"EXPIRED",已作废"ABANDONED"
*/
public
void
getMemberReceivedCoupon
(
String
memberId
,
String
status
){
setUP
(
"API_getMemberReceivedCoupon"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
500
);
body
.
put
(
"receiverId"
,
memberId
);
body
.
put
(
"status"
,
status
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* 作废会员已领取/已发放的优惠券
* @param recordId 对应的记录ID
*/
public
void
abandonMembercouponReceiveRecord
(
String
recordId
){
setUP
(
"API_abandonMembercouponReceiveRecord"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
recordId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/coupon/TestBatchSendCouponToMember.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
coupon
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.schedule.camp.SelectTargetTrainingCampAndGetInfo
;
import
com.xiaomai.cases.polar.training.TrainingTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 测试定向发放优惠券
*
* @author adu
* data 2024/7/27 17:16
*/
public
class
TestBatchSendCouponToMember
extends
SelectTargetTrainingCampAndGetInfo
{
@Resource
(
name
=
"couponTools"
)
CouponTools
couponTools
;
String
memberId
=
""
;
@Resource
(
name
=
"tools"
)
Tools
tools
;
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
String
title
=
""
;
String
couponId
=
""
;
@BeforeClass
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Coupon
,
"API_batchSendCoupon"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"定向发放优惠券 to 会员"
)
public
void
testBatchSendCouponToMember
()
throws
InterruptedException
{
//1.创建1个新的优惠券
List
<
String
>
memberStatusLimits
=
new
ArrayList
<>();
memberStatusLimits
.
add
(
"POTENTIAL"
);
memberStatusLimits
.
add
(
"NORMAL"
);
memberStatusLimits
.
add
(
"HISTORY"
);
title
=
"有门槛限领适用全部"
+
RandomStringUtil
.
randomString
(
3
);
couponId
=
couponTools
.
createCoupon
(
"THRESHOLD"
,
"FIXED"
,
memberStatusLimits
,
title
,
true
,
"CERTAIN"
,
2
,
"RELATIVE"
,
title
+
"优惠方式选择金额,满10元可以减10元,领取后1天内有效"
);
//2.创建成功后,列表增加一条刚新建的优惠券,搜索可领取优惠券
couponTools
.
getStudioCouponList
(
""
,
"CLAIMABLE"
);
Long
goalData
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
couponId
)).
count
();
Assert
.
assertTrue
(
goalData
==
1
,
"刚创建的优惠券在列表中搜索,后端没返回数据"
);
//3.查看优惠券详情,check 优惠券的总数量,剩余数量,已发放数量
couponTools
.
getCouponDetail
(
couponId
);
int
quantityBefore
=
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.quantity"
));
int
inventoryBefore
=
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.inventory"
));
int
receivedBefore
=
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.received"
));
Double
preferential
=
Double
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.preferential"
));
//4.操作定向发放优惠券
//搜索目标会员
String
phone
=
"15558121569"
;
memberId
=
trainingTools
.
searchTargerMember
(
phone
);
if
(
memberId
.
isEmpty
())
{
memberId
=
tools
.
create
(
"杜君丽"
,
phone
).
getString
(
"result"
);
}
JSONObject
body
=
new
JSONObject
();
List
<
String
>
receiverIds
=
new
ArrayList
<>();
receiverIds
.
add
(
memberId
);
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"couponId"
,
couponId
);
body
.
put
(
"receiverIds"
,
receiverIds
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
String
taskId
=
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.result"
);
//check任务中心生成一条任务
Thread
.
sleep
(
2000
);
couponTools
.
getStudioBatchTaskPage
();
Long
goalTask
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
taskId
)).
count
();
Assert
.
assertTrue
(
goalTask
==
1
,
"刚操作的定向发放优惠券给学员,在任务中心查看,后端没返回目标数据"
);
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
taskId
)).
forEach
(
object
->
Assert
.
assertTrue
(
object
.
getInteger
(
"totalNumber"
)
==
1
&&
object
.
getInteger
(
"failNumber"
)
==
0
&&
object
.
getInteger
(
"successNumber"
)
==
1
));
//查看详情
couponTools
.
getCouponDetail
(
couponId
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.quantity"
))==
quantityBefore
,
"优惠券发放给会员后,总数量变化了,应该不变"
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.inventory"
))+
1
==
inventoryBefore
,
"优惠券发放给会员后,剩余库存没减少"
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.received"
))-
1
==
receivedBefore
,
"优惠券发放给会员后,已发放数据不对"
);
//优惠券详情-已发放记录
couponTools
.
getCouponReceiveRecord
(
couponId
,
""
);
Long
countR
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"couponId"
).
equals
(
couponId
)).
count
();
Assert
.
assertTrue
(
countR
==
1
,
"操作定向发放优惠券后,发给一个学员,然后在优惠券详情已发放列表没匹配到数据"
);
String
goalRecordId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"couponId"
).
equals
(
couponId
)).
map
(
e
->
e
.
getString
(
"id"
)).
findFirst
().
orElse
(
null
);
//会员详情-优惠券-已发放优惠券:待使用列表check
couponTools
.
getMemberReceivedCoupon
(
memberId
,
"AVAILABLE"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
goalRecordId
)).
count
()==
1
,
"操作定向发放优惠券后,发给一个学员,然后在会员详情-优惠券-待使用列表没匹配到数据"
);
//操作修改剩余库存
couponTools
.
modifyCouponInventory
(
couponId
,
10
);
//剩余库存修改成功后,优惠券详情check 总数据,剩余库存,已发放数量
couponTools
.
getCouponDetail
(
couponId
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.quantity"
))==
11
,
"修改剩余库存后,优惠券的总数量对不上了"
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.inventory"
))==
10
,
"修改剩余库存后,剩余库存数量对不上"
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.received"
))==
1
,
"优惠券发放给会员后,已发放数据不对"
);
//操作失效优惠券
couponTools
.
InvalidCoupon
(
couponId
);
//查看优惠券详情,check状态
couponTools
.
getCouponDetail
(
couponId
);
Assert
.
assertTrue
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.status"
).
equals
(
"VOIDED"
),
"操作失效优惠券后,查看优惠券详情,后端返回的状态值不是VOIDED"
);
//操作给刚发放优惠券的会员 去买训练营(使用优惠券)
trainingTools
.
doSignCampOrder
(
memberId
,
this
.
price
-
preferential
,
this
.
campId
,
goalRecordId
);
String
orderId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
//优惠券详情-已使用优惠券check
couponTools
.
getCouponReceiveRecord
(
couponId
,
"USED"
);
Long
countRUse
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"couponId"
).
equals
(
couponId
)).
filter
(
e
->
e
.
getString
(
"status"
).
equals
(
"USED"
)).
count
();
Assert
.
assertTrue
(
countRUse
==
1
,
"定向发放优惠券后,学员使用了优惠券,在优惠券详情-已使用记录中数据没匹配上"
);
//会员详情-优惠券-已使用优惠券 为 1check
couponTools
.
getMemberReceivedCoupon
(
memberId
,
"USED"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
goalRecordId
)).
filter
(
e
->
e
.
getString
(
"status"
).
equals
(
"USED"
)).
count
()==
1
,
"会员使用优惠券后,会员详情-优惠券-已使用优惠券列表数据没有目标数据"
);
//会员详情-优惠券-目标待使用优惠券为0
couponTools
.
getMemberReceivedCoupon
(
memberId
,
"AVAILABLE"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
goalRecordId
)).
filter
(
e
->
e
.
getString
(
"status"
).
equals
(
"AVAILABLE"
)).
count
()==
0
,
"会员使用优惠券后,会员详情-优惠券-待使用优惠券列表数据还有目标数据"
);
//用完优惠券后check,优惠券详情已核销数量
couponTools
.
getCouponDetail
(
couponId
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.verified"
))==
1
,
"优惠券发放给会员,会员适用后,对应优惠券已使用数量不对"
);
//操作作废订单,check优惠券是否返还给会员,优惠券中已发放数量中核销数量是否同步更新
orderTools
.
discard
(
orderId
,
"重复录入"
,
"自动化测试作废训练营订单"
);
//优惠券详情-已使用优惠券check
couponTools
.
getCouponReceiveRecord
(
couponId
,
"USED"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"couponId"
).
equals
(
couponId
)).
filter
(
e
->
e
.
getString
(
"status"
).
equals
(
"USED"
)).
count
()==
0
,
"学员使用了优惠券报名,订单被作废后,在优惠券详情-已使用记录中数据还存在"
);
//会员详情-优惠券-已使用优惠券check(退)
couponTools
.
getMemberReceivedCoupon
(
memberId
,
"USED"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
goalRecordId
)).
filter
(
e
->
e
.
getString
(
"status"
).
equals
(
"USED"
)).
count
()==
0
,
"会员使用优惠券后,再操作作废订单,会员详情-优惠券-已使用优惠券列表数据还有目标数据"
);
//会员详情-优惠券-已发放check(+1)
couponTools
.
getMemberReceivedCoupon
(
memberId
,
"AVAILABLE"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
goalRecordId
)).
count
()==
1
,
"会员使用优惠券下单,作废订单后,然后在会员详情-优惠券-待使用列表没匹配到数据"
);
//优惠券详情-已发放记录-操作作废优惠券
couponTools
.
abandonMembercouponReceiveRecord
(
goalRecordId
);
//优惠券详情,已发放记录列表,优惠券状态为已作废
couponTools
.
getCouponReceiveRecord
(
couponId
,
""
);
Long
countRAbandon
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"couponId"
).
equals
(
couponId
)).
filter
(
e
->
e
.
getString
(
"status"
).
equals
(
"ABANDONED"
)).
count
();
Assert
.
assertTrue
(
countR
==
1
,
"操作定向发放优惠券后,再作废优惠券,然后在优惠券详情已发放列表没匹配到数据"
);
//会员详情-优惠券-已作废优惠券check
couponTools
.
getMemberReceivedCoupon
(
memberId
,
"ABANDONED"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
goalRecordId
)).
filter
(
e
->
e
.
getString
(
"status"
).
equals
(
"ABANDONED"
)).
count
()==
1
,
"作废会员优惠券后,会员详情-优惠券-已作废优惠券列表数据没有目标数据"
);
//会员详情-优惠券-已发放check(-1)
couponTools
.
getMemberReceivedCoupon
(
memberId
,
"AVAILABLE"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
goalRecordId
)).
filter
(
e
->
e
.
getString
(
"status"
).
equals
(
"AVAILABLE"
)).
count
()==
0
,
"作废会员优惠券后,然后在会员详情-优惠券-待使用列表还能匹配到数据"
);
//最后要删除刚创建的训练营活动
trainingTools
.
deleteTraining
(
this
.
campId
);
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/coupon/TestCreateCoupon.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
coupon
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 测试创建优惠券
* @author adu
* data 2024/7/26 13:44
*/
public
class
TestCreateCoupon
extends
BaseTestImpl
{
@Resource
(
name
=
"couponTools"
)
CouponTools
couponTools
;
String
titleA
=
""
;
String
couponIdA
=
""
;
String
titleB
=
""
;
String
couponIdB
=
""
;
@BeforeClass
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Coupon
,
"API_createCoupon"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
// @Test(description = "自动化测试创建优惠券")
public
void
testCreateCoupon
(){
List
<
String
>
memberStatusLimitsA
=
new
ArrayList
<>();
memberStatusLimitsA
.
add
(
"POTENTIAL"
);
memberStatusLimitsA
.
add
(
"NORMAL"
);
memberStatusLimitsA
.
add
(
"HISTORY"
);
List
<
String
>
memberStatusLimitsB
=
new
ArrayList
<>();
memberStatusLimitsB
.
add
(
"POTENTIAL"
);
titleA
=
"有门槛限领适用全部"
+
RandomStringUtil
.
randomString
(
3
);
couponIdA
=
couponTools
.
createCoupon
(
"THRESHOLD"
,
"FIXED"
,
memberStatusLimitsA
,
titleA
,
true
,
"CERTAIN"
,
2
,
"RELATIVE"
,
titleA
+
"优惠方式选择金额,满10元可以减10元,领取后1天内有效"
);
couponTools
.
getStudioCouponList
(
titleA
,
""
);
Long
goalData
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"id"
).
equals
(
couponIdA
)).
count
();
Assert
.
assertTrue
(
goalData
==
1
,
"刚创建的优惠券在全局搜索中根据优惠券名称搜索,后端没返回数据"
);
titleB
=
"无门槛不限领适用部分"
+
RandomStringUtil
.
randomString
(
2
);
couponIdB
=
couponTools
.
createCoupon
(
"WITHOUT"
,
"WITHOUT"
,
memberStatusLimitsB
,
titleB
,
false
,
"DISCOUNT"
,
2
,
"ABSOLUTE"
,
titleB
+
"优惠方式选择折扣,8.8折,适用有效期明天~(当前时间+5天)"
);
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/course/CourseTools.java
View file @
a19c8b30
...
...
@@ -57,6 +57,8 @@ public class CourseTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"sizeType"
,
sizeType
);
// 私教模式
body
.
put
(
"allArea"
,
false
);
// 场地
body
.
put
(
"singleReserve"
,
true
);
body
.
put
(
"reservePrice"
,
0
);
JSONArray
coachIds
=
new
JSONArray
();
// 教练
coachIds
.
add
(
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"coachIds"
,
coachIds
);
...
...
@@ -99,6 +101,8 @@ public class CourseTools extends XMBaseTest {
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
// 品牌
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
// 场馆
body
.
put
(
"calorie"
,
0
);
// 卡路里 传0对于后端是未设置
body
.
put
(
"singleReserve"
,
true
);
body
.
put
(
"reservePrice"
,
0
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getString
(
"result"
);
...
...
@@ -405,5 +409,94 @@ public class CourseTools extends XMBaseTest {
}
/**
* @description: 编辑私教课程
* @author: xuyamei
* @date: 2024/7/26 11:57
* @param categoryId 课程类型
* @param courseId 课程id
* @param courseName 课程名称
* @param duration 时长
* @param coachId 教练
* @param capacity 容量
* @param dataUserInfo
* @return: void
**/
public
void
editPersonalCourse
(
String
categoryId
,
String
courseId
,
String
courseName
,
int
duration
,
String
coachId
,
String
capacity
,
DataUserInfo
...
dataUserInfo
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Course
)
.
setApiName
(
"API_editPersonalCourse"
)
.
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
(
"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
(
"sizeType"
,
"ONE_TO_MANY"
);
// 私教模式
body
.
put
(
"allArea"
,
false
);
// 场地
JSONArray
coachIds
=
new
JSONArray
();
coachIds
.
add
(
coachId
);
body
.
put
(
"coachIds"
,
coachIds
);
body
.
put
(
"capacity"
,
capacity
);
// 课容量
body
.
put
(
"minCapacity"
,
1
);
// 开课人数
body
.
put
(
"brandCourseId"
,
courseId
);
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/course/TestCheckCourseNameDup.java
View file @
a19c8b30
...
...
@@ -27,6 +27,7 @@ public class TestCheckCourseNameDup extends BaseTestImpl {
@Resource
(
name
=
"courseTools"
)
CourseTools
courseTools
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Course
,
"API_checkCourseNameDup"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/course/TestCreateGroupCourse.java
View file @
a19c8b30
...
...
@@ -32,6 +32,7 @@ public class TestCreateGroupCourse extends BaseTestImpl {
private
String
courseId
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Course
,
"API_createGroupCourse"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -82,7 +83,7 @@ public class TestCreateGroupCourse extends BaseTestImpl {
// check 2:团课详情内容是否与新建一致
String
[]
keys
=
{
"courseName"
,
"duration"
,
"difficulty"
,
"color"
,
"coverId"
,
"timeUnit"
,
"categoryId"
,
"sourceId"
,
"sourceType"
,
"brandId"
,
"calorie"
};
String
[]
values
=
{
courseName
,
String
.
valueOf
(
duration
),
String
.
valueOf
(
difficulty
),
"#AACF53"
,
"
1772108160765263873
"
,
"MINUTE"
,
categoryId
,
xmAppApi
.
getLoginInfo
().
getStudioId
(),
"STUDIO"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
String
.
valueOf
(
calorie
)};
String
[]
values
=
{
courseName
,
String
.
valueOf
(
duration
),
String
.
valueOf
(
difficulty
),
"#AACF53"
,
"
0
"
,
"MINUTE"
,
categoryId
,
xmAppApi
.
getLoginInfo
().
getStudioId
(),
"STUDIO"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
String
.
valueOf
(
calorie
)};
JSONObject
courseDetail
=
courseTools
.
getCourseDetail
(
courseId
);
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++)
{
...
...
src/main/java/com/xiaomai/cases/polar/course/TestCreatePersonalCourse.java
View file @
a19c8b30
...
...
@@ -35,6 +35,7 @@ public class TestCreatePersonalCourse extends BaseTestImpl {
private
JSONArray
courseIds
=
new
JSONArray
();
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Course
,
"API_personalCreate"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -93,7 +94,7 @@ public class TestCreatePersonalCourse extends BaseTestImpl {
// check 2: 查看课程详情是否与新建内容一致
JSONObject
courseDetail
=
courseTools
.
getCourseDetail
(
courseId
);
String
[]
keys
=
{
"courseName"
,
"duration"
,
"difficulty"
,
"color"
,
"coverId"
,
"timeUnit"
,
"categoryId"
,
"sourceId"
,
"sourceType"
,
"brandId"
,
"sizeType"
,
"allArea"
,
"capacity"
,
"minCapacity"
};
String
[]
values
=
{
courseName
,
"60"
,
"3"
,
"#AACF53"
,
"
1772108160765263873
"
,
"MINUTE"
,
categoryId
,
xmAppApi
.
getLoginInfo
().
getStudioId
(),
"STUDIO"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
sizeType
,
"false"
,
"2"
,
"1"
};
String
[]
values
=
{
courseName
,
"60"
,
"3"
,
"#AACF53"
,
"
0
"
,
"MINUTE"
,
categoryId
,
xmAppApi
.
getLoginInfo
().
getStudioId
(),
"STUDIO"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
sizeType
,
"false"
,
"2"
,
"1"
};
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++)
{
String
result
=
values
[
i
];
// 1对1的容量为1
...
...
src/main/java/com/xiaomai/cases/polar/course/TestCreateSpecialDate.java
deleted
100644 → 0
View file @
6a802225
package
com
.
xiaomai
.
cases
.
polar
.
course
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.course
* @Author: xuyamei
* @CreateTime: 2024-04-25 11:43
* @Description: 创建特定日期可约
* @Version: 1.0
*/
public
class
TestCreateSpecialDate
extends
BaseTestImpl
{
@BeforeClass
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Admin
,
"API_createSpecialDate"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testCreateSpecialDate
()
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"coachId"
,
"1762382404818898946"
);
// 特定时间
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
specialTimeInfoRequest
.
put
(
"dutyType"
,
"OFF_DUTY"
);
JSONArray
specialTimeInfoRequestArray
=
new
JSONArray
();
specialTimeInfoRequestArray
.
add
(
TimeUtils
.
getBeforeDayDate
(
3
));
specialTimeInfoRequest
.
put
(
"selectedDates"
,
specialTimeInfoRequestArray
);
body
.
put
(
"specialTimeInfoRequest"
,
specialTimeInfoRequest
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
}
}
src/main/java/com/xiaomai/cases/polar/course/TestEditGroupCourse.java
View file @
a19c8b30
...
...
@@ -32,6 +32,7 @@ public class TestEditGroupCourse extends BaseTestImpl {
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Course
,
"API_editGroupCourse"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -69,12 +70,16 @@ public class TestEditGroupCourse extends BaseTestImpl {
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
// 场馆
body
.
put
(
"calorie"
,
calorie
);
// 卡路里
body
.
put
(
"brandCourseId"
,
courseId
);
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"singleReserve"
,
true
);
body
.
put
(
"reservePrice"
,
0
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
String
[]
keys
=
{
"courseName"
,
"duration"
,
"difficulty"
,
"color"
,
"coverId"
,
"timeUnit"
,
"categoryId"
,
"sourceId"
,
"sourceType"
,
"brandId"
,
"calorie"
};
String
[]
values
=
{
courseName
,
String
.
valueOf
(
duration
),
String
.
valueOf
(
difficulty
),
"#AACF53"
,
"
1772108160765263873
"
,
"MINUTE"
,
categoryId
,
xmAppApi
.
getLoginInfo
().
getStudioId
(),
"STUDIO"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
String
.
valueOf
(
calorie
)};
String
[]
values
=
{
courseName
,
String
.
valueOf
(
duration
),
String
.
valueOf
(
difficulty
),
"#AACF53"
,
"
0
"
,
"MINUTE"
,
categoryId
,
xmAppApi
.
getLoginInfo
().
getStudioId
(),
"STUDIO"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
String
.
valueOf
(
calorie
)};
// 校验内容与编辑的是否一致
JSONObject
courseDetail
=
courseTools
.
getCourseDetail
(
courseId
);
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++)
{
...
...
src/main/java/com/xiaomai/cases/polar/course/TestEditPersonalCourse.java
View file @
a19c8b30
...
...
@@ -32,6 +32,7 @@ public class TestEditPersonalCourse extends BaseTestImpl {
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Course
,
"API_editPersonalCourse"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -82,7 +83,7 @@ public class TestEditPersonalCourse extends BaseTestImpl {
String
[]
keys
=
{
"courseName"
,
"duration"
,
"difficulty"
,
"color"
,
"coverId"
,
"timeUnit"
,
"categoryId"
,
"sourceId"
,
"sourceType"
,
"brandId"
,
"sizeType"
,
"allArea"
,
"capacity"
,
"minCapacity"
};
String
[]
values
=
{
courseName
,
String
.
valueOf
(
duration
),
String
.
valueOf
(
difficulty
),
"#AACF53"
,
"
1772108160765263873
"
,
"MINUTE"
,
categoryId
,
xmAppApi
.
getLoginInfo
().
getStudioId
(),
"STUDIO"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
"ONE_TO_MANY"
,
"false"
,
String
.
valueOf
(
capacity
),
"1"
};
String
[]
values
=
{
courseName
,
String
.
valueOf
(
duration
),
String
.
valueOf
(
difficulty
),
"#AACF53"
,
"
0
"
,
"MINUTE"
,
categoryId
,
xmAppApi
.
getLoginInfo
().
getStudioId
(),
"STUDIO"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
"ONE_TO_MANY"
,
"false"
,
String
.
valueOf
(
capacity
),
"1"
};
// 校验内容与编辑的是否一致
courseDetail
=
courseTools
.
getCourseDetail
(
courseId
);
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++)
{
...
...
src/main/java/com/xiaomai/cases/polar/eleContract/EleContractTools.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.client.DataUserInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.XMBaseTest
;
import
org.springframework.stereotype.Component
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 13:55
* @Description: 电子合同工具类
* @Version: 1.0
*/
@Component
(
"eleContractTools"
)
public
class
EleContractTools
extends
XMBaseTest
{
public
void
setUp
(
String
name
,
DataUserInfo
...
dataUserInfo
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_EleContract
)
.
setApiName
(
name
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfo
);
}
/**
* @description: 查询电子合同模版列表
* @author: xuyamei
* @date: 2024/8/5 14:38
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getNormalTemplateList
(
String
name
)
{
setUp
(
"API_getNormalTemplateList"
);
String
body
=
"{\"tenantId\":\""
+
dataApi
.
getLoginInfo
().
getStudioId
()+
"\",\"name\": \""
+
name
+
"\"}"
;
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
,
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONArray
(
"result"
);
}
/**
* @description:获取充值单列表
* @author: xuyamei
* @date: 2024/8/5 15:14
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getBalanceList
(){
setUp
(
"API_getBalanceList"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"tenantId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
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
);
return
dataApi
.
getBodyInJSON
().
getJSONArray
(
"result"
);
}
public
JSONArray
getValidBalanceList
(){
setUp
(
"API_getValidBalanceList"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"tenantId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
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
);
return
dataApi
.
getBodyInJSON
().
getJSONArray
(
"result"
);
}
/**
* @description: 获取租户的预警配置
* @author: xuyamei
* @date: 2024/8/5 15:20
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONObject
getBalanceWarning
(){
setUp
(
"API_getBalanceWarning"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"tenantId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
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
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description:获取合同编辑展示页-首次创建
* @author: xuyamei
* @date: 2024/8/5 17:49
* @param templateId :合同模版id
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONObject
getContractEditDisplay
(
String
templateId
){
setUp
(
"API_getContractEditDisplay"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"templateId"
,
templateId
);
body
.
put
(
"adminId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description:获取发起合同任务的状态
* @author: xuyamei
* @date: 2024/8/5 18:52
* @param id :合同id
* @return: boolean
**/
public
boolean
getStartContractV2Result
(
String
id
){
setUp
(
"API_getStartContractV2Result"
);
String
body
=
"{\"id\":\""
+
id
+
"\"}"
;
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
,
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getBoolean
(
"result"
);
}
/**
* @description:获取合同列表
* @author: xuyamei
* @date: 2024/8/5 19:14
* @param targetId : 学员id
* @param associatedId :订单id
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONObject
getContractPage
(
String
targetId
,
String
associatedId
,
String
status
){
setUp
(
"API_getContractPage"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"targetId"
,
targetId
);
body
.
put
(
"associatedId"
,
associatedId
);
body
.
put
(
"size"
,
10
);
body
.
put
(
"current"
,
0
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
if
(!
status
.
equals
(
""
)){
JSONArray
statusList
=
new
JSONArray
();
statusList
.
add
(
status
);
body
.
put
(
"statusList"
,
statusList
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description:撤回合同
* @author: xuyamei
* @date: 2024/8/6 10:40
* @param contractId
* @return: void
**/
public
void
retractContract
(
String
contractId
){
setUp
(
"API_retractContract"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"id"
,
contractId
);
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
);
}
public
JSONObject
getContract
(
String
contractId
){
setUp
(
"API_getContract"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"id"
,
contractId
);
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
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description: 电子合同关联订单
* @author: xuyamei
* @date: 2024/8/6 15:02
* @param contractId :合同id
* @param associatedNo :订单号
* @param associatedId 订单id
* @return: void
**/
public
void
associate
(
String
contractId
,
String
associatedNo
,
String
associatedId
){
setUp
(
"API_associate"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"contractId"
,
contractId
);
body
.
put
(
"associatedNo"
,
associatedNo
);
body
.
put
(
"associatedId"
,
associatedId
);
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:合同取消关联订单
* @author: xuyamei
* @date: 2024/8/6 15:47
* @param contractId 合同id
* @return: void
**/
public
void
disAssociate
(
String
contractId
){
setUp
(
"API_disAssociate"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"id"
,
contractId
);
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
);
}
public
void
setBalanceWarning
(
int
balanceWarning
,
String
id
){
setUp
(
"API_setBalanceWarning"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"warnAmount"
,
balanceWarning
);
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"notifyPhone"
,
"13120057004"
);
body
.
put
(
"id"
,
id
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* @description 复制签署地址
* @author: xuyamei
* @date: 2024/8/6 16:58
* @param id:合同id
* @return: java.lang.String
**/
public
String
getContractSignUrl
(
String
id
){
setUp
(
"API_getContractSignUrl"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"id"
,
id
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getString
(
"result"
);
}
/**
* @description: 重新认证前置校验-存在待家长签署,签署中的合同都不允许重新认证
* @author: xuyamei
* @date: 2024/8/6 17:08
* @return: boolean
**/
public
boolean
checkBeforeResetVerify
(){
setUp
(
"API_checkBeforeResetVerify"
);
String
body
=
"{\"tenantId\":\""
+
dataApi
.
getLoginInfo
().
getStudioId
()+
"\"}"
;
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getBoolean
(
"result"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestCheckContractConfig.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 16:23
* @Description: 校验租户合同配置
* @Version: 1.0
*/
public
class
TestCheckContractConfig
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_checkContractConfig"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testCheckContractConfig
(){
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"tenantId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"checkAll"
,
true
);
String
[]
types
=
{
"VERIFY_RESULT"
,
"COMPANY_SIGNATURE"
,
"HAS_LEFT"
};
body
.
put
(
"checkTypes"
,
types
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
JSONObject
response
=
xmAppApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
Assert
.
assertFalse
(
response
.
getBoolean
(
"checkPass"
));
String
[]
checkTypes
=
{
"VERIFY_RESULT"
,
"COMPANY_SIGNATURE"
,
"HAS_LEFT"
};
for
(
int
i
=
0
;
i
<
checkTypes
.
length
;
i
++){
Assert
.
assertTrue
(
response
.
getJSONObject
(
"checkFailResult"
).
getBoolean
(
checkTypes
[
i
]));
}
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanyAuthSignResult.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 11:36
* @Description: 查询企业授权结果
* @Version: 1.0
*/
public
class
TestGetCompanyAuthSignResult
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getCompanyAuthSignResult"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetCompanyAuthSignResult
(){
String
body
=
"{\"tenantId\":\""
+
xmAppApi
.
getLoginInfo
().
getStudioId
()+
"\"}"
;
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
,
headers
).
assetsSuccess
(
true
);
Assert
.
assertTrue
(
xmAppApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getBoolean
(
"isSuccess"
),
"场馆已经授权,但查到的结果不是true"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanyCert.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 11:52
* @Description: 获取企业实名证书
* @Version: 1.0
*/
public
class
TestGetCompanyCert
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getCompanyCert"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetCompanyCert
(){
String
body
=
"{\"tenantId\":\""
+
xmAppApi
.
getLoginInfo
().
getStudioId
()+
"\"}"
;
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
,
headers
).
assetsSuccess
(
true
);
Assert
.
assertEquals
(
xmAppApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"sequenceNo"
),
"4CB4000000000000094C2A93"
,
"获取实名认证证书失败"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanyLastSuccessVerifyResult.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 11:40
* @Description: 获取企业最新一次成功的认证结果
* @Version: 1.0
*/
public
class
TestGetCompanyLastSuccessVerifyResult
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getCompanyLastSuccessVerifyResult"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetCompanyLastSuccessVerifyResult
(){
String
body
=
"{\"tenantId\":\""
+
xmAppApi
.
getLoginInfo
().
getStudioId
()+
"\"}"
;
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
,
headers
).
assetsSuccess
(
true
);
Assert
.
assertEquals
(
xmAppApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"status"
),
"AUDIT_SUCCEEDED"
,
"场馆已经授权,但查到的结果不是true"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanyLastVerifyStatus.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 11:28
* @Description: 获取企业最新的认证结果-只有状态
* @Version: 1.0
*/
public
class
TestGetCompanyLastVerifyStatus
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getCompanyLastVerifyStatus"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetCompanyLastVerifyStatus
(){
String
body
=
"{\"tenantId\":\""
+
xmAppApi
.
getLoginInfo
().
getStudioId
()+
"\"}"
;
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
,
headers
).
assetsSuccess
(
true
);
Assert
.
assertEquals
(
xmAppApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"status"
),
"AUDIT_SUCCEEDED"
,
"场馆已经认证,获取的企业最新的认证结果返回的不是AUDIT_SUCCEEDED"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetCompanySignature.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 11:44
* @Description: 获取企业签章
* @Version: 1.0
*/
public
class
TestGetCompanySignature
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getCompanySignature"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetCompanySignature
(){
String
body
=
"{\"tenantId\":\""
+
xmAppApi
.
getLoginInfo
().
getStudioId
()+
"\"}"
;
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
,
headers
).
assetsSuccess
(
true
);
Assert
.
assertEquals
(
xmAppApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"signatureUrl"
),
"https://fit-resource-pub.xiaomai5.com/fitness/1796482011391729666/BRAND/eleContract/1815396391027736577/20240722224002/signature.png"
,
"获取企业签章失败"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetContractEditDisplay.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 17:21
* @Description: 获取合同编辑展示页-首次创建
* @Version: 1.0
*/
public
class
TestGetContractEditDisplay
extends
BaseTestImpl
{
@Resource
(
name
=
"eleContractTools"
)
EleContractTools
eleContractTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getContractEditDisplay"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetContractEditDisplay
(){
// 查询指定的模版
String
templateId
=
eleContractTools
.
getNormalTemplateList
(
"自动化"
).
getJSONObject
(
0
).
getString
(
"id"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"adminId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"templateId"
,
templateId
);
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
JSONObject
response
=
xmAppApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
JSONArray
contractPdfVOList
=
response
.
getJSONArray
(
"contractPdfVOList"
);
for
(
int
i
=
0
;
i
<
contractPdfVOList
.
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
size
();
i
++){
if
(
contractPdfVOList
.
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
getJSONObject
(
i
).
getString
(
"templateField"
).
equals
(
"COMPANY_NAME"
)){
// 验证返回的公司名称
Assert
.
assertTrue
(
contractPdfVOList
.
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
getJSONObject
(
i
).
getString
(
"value"
).
equals
(
"杭州牧歌供应链管理有限公司"
));
}
else
if
(
contractPdfVOList
.
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
getJSONObject
(
i
).
getString
(
"templateField"
).
equals
(
"TENANT_NAME"
)){
// 验证返回的场馆名称
Assert
.
assertTrue
(
contractPdfVOList
.
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
getJSONObject
(
i
).
getString
(
"value"
).
equals
(
"小小瑜伽城西银泰西湖场馆"
));
}
}
Assert
.
assertTrue
(
response
.
getJSONObject
(
"templateVO"
).
getJSONArray
(
"fieldConfigVOList"
).
size
()>=
6
,
"模版字段数量大于等于6"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetNormalTemplateList.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 11:58
* @Description: 获取合同模版列表
* @Version: 1.0
*/
public
class
TestGetNormalTemplateList
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getNormalTemplateList"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetNormalTemplateList
(){
String
body
=
"{\"tenantId\":\""
+
xmAppApi
.
getLoginInfo
().
getStudioId
()+
"\"}"
;
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
,
headers
).
assetsSuccess
(
true
);
Assert
.
assertTrue
(
xmAppApi
.
getBodyInJSON
().
getJSONArray
(
"result"
).
size
()>=
1
,
"获取模版管理列表数据失败"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetShowResidueCount.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-06 16:33
* @Description: 剩余份数小于设置的预警值合同管理提示条
* @Version: 1.0
*/
public
class
TestGetShowResidueCount
extends
BaseTestImpl
{
@Resource
(
name
=
"eleContractTools"
)
EleContractTools
eleContractTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getShowResidueCount"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetShowResidueCount
(){
int
warning
=
1000
;
// 查询预警记录id
JSONObject
balanceWarning
=
eleContractTools
.
getBalanceWarning
();
String
id
=
balanceWarning
.
getString
(
"id"
);
// 先设置预警值
eleContractTools
.
setBalanceWarning
(
warning
,
id
);
// 查询剩余份数小于设置的预警值合同管理提示条
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"tenantId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
Assert
.
assertTrue
(
xmAppApi
.
getBodyInJSON
().
getInteger
(
"result"
)
==
warning
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetSuiteList.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 15:33
* @Description:获取合同充值套餐列表
* @Version: 1.0
*/
public
class
TestGetSuiteList
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getSuiteList"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetValidBalanceList
()
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
String
[]
keys
=
new
String
[]{
"productCode"
,
"productName"
,
"validPeriodYear"
,
"amount"
,
"price"
,
"oriUnitPrice"
,
"unitPrice"
};
String
[]
values1
=
new
String
[]{
"E_CONT_100_1Y"
,
"电子合同100份"
,
"1"
,
"100"
,
"49800"
,
"698"
,
"498"
};
String
[]
values2
=
new
String
[]{
"E_CONT_200_1Y"
,
"电子合同200份"
,
"1"
,
"200"
,
"79600"
,
"598"
,
"398"
};
String
[]
values3
=
new
String
[]{
"E_CONT_500_2Y"
,
"电子合同500份"
,
"2"
,
"500"
,
"149000"
,
"498"
,
"298"
};
String
[]
values4
=
new
String
[]{
"E_CONT_1000_2Y"
,
"电子合同1000份"
,
"2"
,
"1000"
,
"198000"
,
"398"
,
"198"
};
for
(
int
i
=
0
;
i
<
4
;
i
++){
String
[]
values
=
i
==
0
?
values1
:
i
==
1
?
values2
:
i
==
2
?
values3
:
values4
;
for
(
int
j
=
0
;
j
<
keys
.
length
;
j
++){
Assert
.
assertEquals
(
xmAppApi
.
getBodyInJSON
().
getJSONArray
(
"result"
).
getJSONObject
(
i
).
getString
(
keys
[
j
]),
values
[
j
]);
}
}
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetTemplate.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 13:54
* @Description: 获取单个合同模板
* @Version: 1.0
*/
public
class
TestGetTemplate
extends
BaseTestImpl
{
@Resource
(
name
=
"eleContractTools"
)
EleContractTools
eleContractTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getTemplate"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetTemplate
(){
String
id
=
eleContractTools
.
getNormalTemplateList
(
""
).
getJSONObject
(
0
).
getString
(
"id"
);
String
body
=
"{\"id\":\""
+
id
+
"\"}"
;
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
,
headers
).
assetsSuccess
(
true
);
Assert
.
assertEquals
(
xmAppApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"id"
),
id
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetTenantPurchaseFlag.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-06 16:46
* @Description: 获取租户是否购买结果
* @Version: 1.0
*/
public
class
TestGetTenantPurchaseFlag
extends
BaseTestImpl
{
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getTenantPurchaseFlag"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetTenantPurchaseFlag
(){
String
body
=
"{\"tenantId\":\""
+
xmAppApi
.
getLoginInfo
().
getStudioId
()+
"\"}"
;
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
,
headers
).
assetsSuccess
(
true
);
Assert
.
assertTrue
(
xmAppApi
.
getBodyInJSON
().
getBoolean
(
"result"
),
"场馆已经购买但是返回的false"
);
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestGetValidBalanceList.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 14:55
* @Description: 获取租户有效余额记录
* @Version: 1.0
*/
public
class
TestGetValidBalanceList
extends
BaseTestImpl
{
@Resource
(
name
=
"eleContractTools"
)
EleContractTools
eleContractTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_getValidBalanceList"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testGetValidBalanceList
(){
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"tenantId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
Assert
.
assertTrue
(
xmAppApi
.
getBodyInJSON
().
getJSONArray
(
"result"
).
size
()>
0
,
"获取租户有效余额记录失败"
);
// 和充值记录的数据对比
String
[]
keys
=
{
"id"
,
"tenantId"
,
"productCode"
,
"purchaseAmount"
,
"startTime"
,
"endTime"
,
"payChannel"
};
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++){
Assert
.
assertEquals
(
xmAppApi
.
getBodyInJSON
().
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
keys
[
i
]),
eleContractTools
.
getBalanceList
().
getJSONObject
(
0
).
getString
(
keys
[
i
]),
"获取租户有效余额记录与充值记录列表内容对比"
);
}
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestSetBalanceWarning.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 15:25
* @Description: 设置租户的预警配置
* @Version: 1.0
*/
public
class
TestSetBalanceWarning
extends
BaseTestImpl
{
@Resource
(
name
=
"eleContractTools"
)
EleContractTools
eleContractTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_setBalanceWarning"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testSetBalanceWarning
(){
// 获取预警id
JSONObject
balanceWarning
=
eleContractTools
.
getBalanceWarning
();
String
id
=
balanceWarning
.
getString
(
"id"
);
Random
random
=
new
Random
();
int
amount
=
random
.
nextInt
(
100
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"warnAmount"
,
amount
);
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"notifyPhone"
,
"13120057004"
);
body
.
put
(
"id"
,
id
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
// 设置完成后查询设置的预警值
balanceWarning
=
eleContractTools
.
getBalanceWarning
();
String
[]
keys
=
{
"warnAmount"
,
"notifyPhone"
,
"id"
};
String
[]
values
=
{
amount
+
""
,
"13120057004"
,
id
};
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++){
Assert
.
assertEquals
(
balanceWarning
.
getString
(
keys
[
i
]),
values
[
i
]);
}
}
}
src/main/java/com/xiaomai/cases/polar/eleContract/TestStartContractV2.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
eleContract
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.training.TrainingTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.eleContract
* @Author: xuyamei
* @CreateTime: 2024-08-05 18:01
* @Description: 发起合同、撤回合同
* @Version: 1.0
*/
public
class
TestStartContractV2
extends
BaseTestImpl
{
@Resource
(
name
=
"eleContractTools"
)
EleContractTools
eleContractTools
;
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_EleContract
,
"API_startContractV2"
,
LoginAccount
.
DZHT_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
private
String
eleContractId
;
private
String
studentId
;
@Test
(
description
=
"发起电子合同"
)
public
void
testStartContractV2
(){
// 查询发起的合同的学员
studentId
=
trainingTools
.
searchTargerMember
(
"13120057004"
);
// 获取合同模版编辑内容
String
templateId
=
eleContractTools
.
getNormalTemplateList
(
"自动化"
).
getJSONObject
(
0
).
getString
(
"id"
);
JSONObject
getContractEditDisplay
=
eleContractTools
.
getContractEditDisplay
(
templateId
);
String
contractName
=
"自动化发起合同"
+
TimeUtils
.
getCurrentTime
();
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"targetId"
,
studentId
);
// 学员id
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
// 学员id
body
.
put
(
"adminId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
// 学员id
// contractList 存放模版具体的内容
JSONArray
contractList
=
new
JSONArray
();
JSONObject
contract
=
new
JSONObject
();
contract
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
contract
.
put
(
"contractName"
,
contractName
);
contract
.
put
(
"templateId"
,
templateId
);
JSONArray
contractFiledRequestList
=
new
JSONArray
();
int
size
=
getContractEditDisplay
.
getJSONObject
(
"templateVO"
).
getJSONArray
(
"fieldConfigVOList"
).
size
();
// 企业信息和场馆信息塞进去
for
(
int
i
=
0
;
i
<
getContractEditDisplay
.
getJSONArray
(
"contractPdfVOList"
).
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
size
();
i
++){
JSONObject
contractFiledRequest
=
new
JSONObject
();
contractFiledRequest
.
put
(
"id"
,
getContractEditDisplay
.
getJSONArray
(
"contractPdfVOList"
).
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
getJSONObject
(
i
).
getString
(
"id"
));
contractFiledRequest
.
put
(
"templateField"
,
getContractEditDisplay
.
getJSONArray
(
"contractPdfVOList"
).
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
getJSONObject
(
i
).
getString
(
"templateField"
));
contractFiledRequest
.
put
(
"value"
,
getContractEditDisplay
.
getJSONArray
(
"contractPdfVOList"
).
getJSONObject
(
0
).
getJSONArray
(
"contractFieldVOList"
).
getJSONObject
(
i
).
getString
(
"value"
));
contractFiledRequestList
.
add
(
contractFiledRequest
);
}
// 模版中的其余信息
for
(
int
i
=
0
;
i
<
size
;
i
++){
JSONObject
contractFiledRequest
=
new
JSONObject
();
String
templateField
=
getContractEditDisplay
.
getJSONObject
(
"templateVO"
).
getJSONArray
(
"fieldConfigVOList"
).
getJSONObject
(
i
).
getString
(
"templateField"
);
if
(!
templateField
.
equals
(
"COMPANY_NAME"
)
&&
!
templateField
.
equals
(
"TENANT_NAME"
)
&&
!
templateField
.
equals
(
"COMPANY_SIGNATURE"
)
&&
!
templateField
.
equals
(
"PERSON_SIGNATURE"
))
{
// 获取的内容不包含类型为企业名称、校区名称、企业签章、家长签字
contractFiledRequest
.
put
(
"id"
,
getContractEditDisplay
.
getJSONObject
(
"templateVO"
).
getJSONArray
(
"fieldConfigVOList"
).
getJSONObject
(
i
).
getString
(
"id"
));
contractFiledRequest
.
put
(
"templateField"
,
templateField
);
contractFiledRequest
.
put
(
"value"
,
""
);
contractFiledRequestList
.
add
(
contractFiledRequest
);
}
else
if
(
templateField
.
equals
(
"MEMBER_NAME"
)){
contractFiledRequest
.
put
(
"id"
,
getContractEditDisplay
.
getJSONObject
(
"templateVO"
).
getJSONArray
(
"fieldConfigVOList"
).
getJSONObject
(
i
).
getString
(
"id"
));
contractFiledRequest
.
put
(
"templateField"
,
templateField
);
contractFiledRequest
.
put
(
"value"
,
"测试学员"
);
contractFiledRequestList
.
add
(
contractFiledRequest
);
}
else
if
(
templateField
.
equals
(
"PHONE"
)){
contractFiledRequest
.
put
(
"id"
,
getContractEditDisplay
.
getJSONObject
(
"templateVO"
).
getJSONArray
(
"fieldConfigVOList"
).
getJSONObject
(
i
).
getString
(
"id"
));
contractFiledRequest
.
put
(
"templateField"
,
templateField
);
contractFiledRequest
.
put
(
"value"
,
"13120057004"
);
contractFiledRequestList
.
add
(
contractFiledRequest
);
}
}
contract
.
put
(
"contractFiledRequestList"
,
contractFiledRequestList
);
contractList
.
add
(
contract
);
body
.
put
(
"contractList"
,
contractList
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
String
taskId
=
xmAppApi
.
getBodyInJSON
().
getString
(
"result"
);
// 获取发起合同任务的状态
eleContractTools
.
getStartContractV2Result
(
taskId
);
while
(
true
){
boolean
result
=
eleContractTools
.
getStartContractV2Result
(
taskId
);
if
(
result
){
break
;
}
}
// 验证1:合同列表 合同状态为待签署
boolean
dataExist
=
false
;
JSONArray
getContractPage
=
eleContractTools
.
getContractPage
(
studentId
,
""
,
""
).
getJSONArray
(
"records"
);
for
(
int
i
=
0
;
i
<
getContractPage
.
size
();
i
++){
if
(
getContractPage
.
getJSONObject
(
i
).
getString
(
"name"
).
equals
(
contractName
)){
dataExist
=
true
;
eleContractId
=
getContractPage
.
getJSONObject
(
i
).
getString
(
"id"
);
Assert
.
assertEquals
(
getContractPage
.
getJSONObject
(
i
).
getString
(
"contractStatus"
),
"WAIT_C"
);
}
}
Assert
.
assertTrue
(
dataExist
,
"发起合同后在合同列表没有查到相关合同"
);
// 待签署的合同数量
int
total
=
Integer
.
parseInt
(
eleContractTools
.
getContractPage
(
""
,
""
,
"WAIT_C"
).
getString
(
"total"
));
// 验证2:校验锁定额度
int
lockAmount
=
eleContractTools
.
getValidBalanceList
().
getJSONObject
(
0
).
getInteger
(
"lockAmount"
);
Assert
.
assertTrue
(
lockAmount
==
total
,
"锁定额度与合同列表中待签署合同数量不一致"
);
// 验证3:合同状态、归属人
JSONObject
getContract
=
eleContractTools
.
getContract
(
eleContractId
);
String
[]
keys
=
{
"contractStatus"
,
"targetId"
};
String
[]
values
=
{
"WAIT_C"
,
studentId
};
for
(
int
i
=
0
;
i
<
keys
.
length
;
i
++){
Assert
.
assertEquals
(
getContract
.
getString
(
keys
[
i
]),
values
[
i
],
"合同状态、归属人与预期不一致"
);
}
}
@Test
(
priority
=
1
,
description
=
"复制签署地址"
)
public
void
testGetContractSignUrl
(){
String
URL
=
eleContractTools
.
getContractSignUrl
(
eleContractId
);
Assert
.
assertTrue
(!
URL
.
equals
(
""
),
"复制签署地址失败"
);
// 验证一下有待签署的合同,不允许重新认证
Assert
.
assertTrue
(
eleContractTools
.
checkBeforeResetVerify
(),
"有待签署的合同,但是重新认证校验返回的false"
);
}
@Test
(
priority
=
1
,
description
=
"关联订单"
)
public
void
testAssociate
(){
// 关联订单
// 查询学员关联的id
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
20
);
body
.
put
(
"receiverId"
,
studentId
);
body
.
put
(
"supplierId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"type"
,
"SIGN"
);
String
[]
status
=
{
"WAITING"
,
"PAID"
,
"ARREARS"
};
body
.
put
(
"states"
,
status
);
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
JSONArray
pageVoucher
=
orderTools
.
pageVoucher
(
body
);
// 获取一条订单id
String
orderId
=
""
;
String
businessNo
=
""
;
for
(
int
i
=
0
;
i
<
pageVoucher
.
size
();
i
++){
if
(
pageVoucher
.
getJSONObject
(
i
).
getString
(
"source"
).
equals
(
"OFFLINE_SOURCE"
)){
businessNo
=
pageVoucher
.
getJSONObject
(
i
).
getString
(
"businessNo"
);
orderId
=
pageVoucher
.
getJSONObject
(
i
).
getString
(
"id"
);
}
}
eleContractTools
.
associate
(
eleContractId
,
businessNo
,
orderId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 验证1:合同详情 合同关联的订单id
JSONObject
getContract
=
eleContractTools
.
getContract
(
eleContractId
);
Assert
.
assertEquals
(
getContract
.
getString
(
"associatedNo"
),
businessNo
,
"合同关联的订单号与实际不一致"
);
Assert
.
assertEquals
(
getContract
.
getString
(
"associatedId"
),
orderId
,
"合同关联的订单id与实际不一致"
);
}
@Test
(
priority
=
3
,
description
=
"取消关联订单"
)
public
void
testDisAssociate
(){
// 取消关联
eleContractTools
.
disAssociate
(
eleContractId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 验证1:合同详情 合同关联的订单id
JSONObject
getContract
=
eleContractTools
.
getContract
(
eleContractId
);
Assert
.
assertEquals
(
getContract
.
getString
(
"associatedNo"
),
""
,
"合同取消关联的订单后关联的订单不为空"
);
}
@Test
(
priority
=
4
,
description
=
"撤销电子合同"
)
public
void
testRetractContract
(){
eleContractTools
.
retractContract
(
eleContractId
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 验证1:合同详情 合同状态为已撤回
JSONObject
getContract
=
eleContractTools
.
getContract
(
eleContractId
);
Assert
.
assertEquals
(
getContract
.
getString
(
"contractStatus"
),
"REVOKE"
,
"合同状态非已撤回"
);
// 待签署的合同数量
int
total
=
Integer
.
parseInt
(
eleContractTools
.
getContractPage
(
""
,
""
,
"WAIT_C"
).
getString
(
"total"
));
// 验证2:校验锁定额度
int
lockAmount
=
eleContractTools
.
getValidBalanceList
().
getJSONObject
(
0
).
getInteger
(
"lockAmount"
);
Assert
.
assertTrue
(
lockAmount
==
total
,
"锁定额度与合同列表中待签署合同数量不一致"
);
}
}
src/main/java/com/xiaomai/cases/polar/finance/order/OrderTools.java
View file @
a19c8b30
...
...
@@ -6,13 +6,15 @@ import com.xiaomai.client.DataUserInfo;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMBaseTest
;
import
org.springframework.stereotype.Component
;
import
java.math.BigDecimal
;
@Component
(
"orderTools"
)
public
class
OrderTools
extends
XMBaseTest
{
/**
...
...
@@ -155,6 +157,24 @@ public class OrderTools extends XMBaseTest {
}
/**
* @description:查询的订单
* @author: xuyamei
* @date: 2024/8/6 15:12
* @param jsonObject 请求参数
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONArray
pageVoucher
(
JSONObject
jsonObject
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Finance
)
.
setApiName
(
"API_pageVoucher"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
}
/**
* @param
...
...
@@ -370,6 +390,13 @@ public class OrderTools extends XMBaseTest {
card
.
put
(
"cardChange"
,
cardChange
);
card
.
put
(
"deductionAmount"
,
deductionAmount
);
//优惠金额(元)
card
.
put
(
"activatePattern"
,
activatePattern
);
if
(
activatePattern
.
equals
(
"FIRST_USED"
)){
//如果选择生效方式为 首次使用生效
card
.
put
(
"maxIdlePeriod"
,
30
);
//最晚生效天数
card
.
put
(
"giftQuantity"
,
2
);
//赠送2次
}
if
(
activatePattern
.
equals
(
"SPECIFIC_DATE"
)){
//选择指定日期生效
card
.
put
(
"activateDate"
,
CommUtil
.
oneKeyGetAddDay
(
7
));
//当前时间+7天
}
card
.
put
(
"commodityCardType"
,
commodityCardType
);
jsonObject
.
put
(
"card"
,
card
);
...
...
src/main/java/com/xiaomai/cases/polar/member/Tools.java
View file @
a19c8b30
...
...
@@ -7,9 +7,10 @@ import com.xiaomai.enums.ApiModule;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.XMBaseTest
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
@Component
(
"tools"
)
public
class
Tools
extends
XMBaseTest
{
...
...
src/main/java/com/xiaomai/cases/polar/memberCard/CardTools.java
View file @
a19c8b30
...
...
@@ -9,10 +9,13 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMBaseTest
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.List
;
@Component
(
"cardTools"
)
public
class
CardTools
extends
XMBaseTest
{
/**
...
...
@@ -20,14 +23,14 @@ public class CardTools extends XMBaseTest {
* @description:创建会员卡
* @author: yangjian
**/
public
JSONObject
memberCardCreate
(
String
title
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
memberCardCreate
(
String
title
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_tenantMemberCard_create"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONArray
activatePatternList
=
new
JSONArray
();
JSONArray
activatePatternList
=
new
JSONArray
();
activatePatternList
.
add
(
"PURCHASE"
);
activatePatternList
.
add
(
"SPECIFIC_DATE"
);
activatePatternList
.
add
(
"FIRST_USED"
);
...
...
@@ -36,7 +39,7 @@ public class CardTools extends XMBaseTest {
//List itemList = new ArrayList();
//itemList.add("");
JSONObject
Object
=
new
JSONObject
();
Object
.
put
(
"identifier"
,
xmApp
Api
.
getLoginInfo
().
getUser
());
Object
.
put
(
"identifier"
,
data
Api
.
getLoginInfo
().
getUser
());
Object
.
put
(
"benefitType"
,
"BALANCE"
);
Object
.
put
(
"targetScope"
,
"GROUP_CLASS_AND_PERSONAL_COURSE"
);
Object
.
put
(
"balance"
,
"30"
);
...
...
@@ -48,13 +51,10 @@ public class CardTools extends XMBaseTest {
benefitList
.
add
(
Object
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"surfaceUrl"
,
"https://image.xiaomaiketang.com/xm/internal/HpRiJpFnTC.png"
);
//会员卡封面图片
jsonObject
.
put
(
"surfaceCornerMark"
,
"自动化标签"
);
jsonObject
.
put
(
"title"
,
title
);
//会员卡名称 不能重复要加东西 "次卡-自动化会员卡"+RandomStringUtil.randomString(3)
jsonObject
.
put
(
"surfaceUrl"
,
"https://image.xiaomaiketang.com/xm/internal/HpRiJpFnTC.png"
);
//会员卡封面图片
jsonObject
.
put
(
"surfaceCornerMark"
,
"自动化标签"
);
jsonObject
.
put
(
"title"
,
title
);
//会员卡名称 不能重复要加东西 "次卡-自动化会员卡"+RandomStringUtil.randomString(3)
jsonObject
.
put
(
"validPeriod"
,
"3"
);
//有效期-3天
jsonObject
.
put
(
"activatePatternList"
,
activatePatternList
);
//三种生效方式
jsonObject
.
put
(
"sharePeopleLimit"
,
"2"
);
//共享人数
...
...
@@ -63,27 +63,75 @@ public class CardTools extends XMBaseTest {
jsonObject
.
put
(
"underlinePrice"
,
"10"
);
//划线价
jsonObject
.
put
(
"purchaseNumberLimit"
,
"-1"
);
//购买数量限制
jsonObject
.
put
(
"xcxSaleStatus"
,
"YES"
);
//小程序是否售卖
jsonObject
.
put
(
"creatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"creatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"shelfState"
,
"YES"
);
//卡启用状态
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"description"
,
"{\"items\":[{\"content\":\"自动化创建的卡\",\"aspect\":\"\",\"type\":\"TEXT\"}]}"
);
jsonObject
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
/**
/**
* 快速创建会员卡次卡-存量数据: 嘟嘟创建的会员卡-次卡
*
* @param title
* @param dataUserInfos
* @return
*/
public
String
oneKeyCreateMembershipCardNumberCard
(
String
title
,
DataUserInfo
...
dataUserInfos
)
{
String
requestString
=
"{\n"
+
"\"surfaceUrl\": \"https://image.xiaomaiketang.com/xm/internal/HpRiJpFnTC.png\",\n"
+
"\"maxIdlePeriod\": 30,\n"
+
"\"surfaceCornerMark\": \"\",\n"
+
"\"title\": \""
+
title
+
"\",\n"
+
"\"validPeriod\": \"9999\",\n"
+
"\"activatePatternList\": [\n"
+
"\"PURCHASE\",\n"
+
"\"FIRST_USED\",\n"
+
"\"SPECIFIC_DATE\"\n"
+
"],\n"
+
"\"benefitList\": [\n"
+
"{\n"
+
"\"identifier\": \""
+
RandomStringUtil
.
randomString
(
20
)
+
"\",\n"
+
"\"benefitType\": \"BALANCE\",\n"
+
"\"targetScope\": \"GROUP_CLASS_AND_PERSONAL_COURSE\",\n"
+
"\"balance\": \"60\",\n"
+
"\"reserveLimitType\": \"UN_LIMIT\",\n"
+
"\"reserveLimitNumber\": 0,\n"
+
"\"defaultConsumeBalance\": 1,\n"
+
"\"itemList\": [],\n"
+
"\"targetType\": \"COURSE\"\n"
+
"}\n"
+
"],\n"
+
"\"price\": \"398\",\n"
+
"\"underlinePrice\": \"1000\",\n"
+
"\"purchaseNumberLimit\": \"-1\",\n"
+
"\"xcxSaleStatus\": \"YES\",\n"
+
"\"creatorId\": \"1798957492546801666\",\n"
+
"\"shelfState\": \"YES\",\n"
+
"\"brandId\": \"1796482011391729666\",\n"
+
"\"studioId\": \"1800375402938871809\",\n"
+
"\"description\": \"{\\\"items\\\":[]}\",\n"
+
"\"operatorId\": \"1798957492546801666\",\n"
+
"\"commodityCardType\": \"MEMBER_CARD\"\n"
+
"}"
;
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
requestString
,
dataheadrs
).
assetsSuccess
(
true
);
return
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
}
/**
* @param
* @description:会员卡列表
* @author: yangjian
**/
public
JSONObject
fetchPageOfMemberCard
(
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
fetchPageOfMemberCard
(
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_fetchPageOfMemberCard"
)
...
...
@@ -93,17 +141,17 @@ public JSONObject fetchPageOfMemberCard(DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
//jsonObject.put("shelfState",shelfState);//启用状态
//jsonObject.put("xcxSaleStatus",xcxSaleStatus);//售卖状态
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
}
public
JSONObject
fetchPageOfMemberCard
(
String
courseId
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
fetchPageOfMemberCard
(
String
courseId
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_fetchPageOfMemberCard"
)
.
setTerminal
(
Terminal
.
B
);
...
...
@@ -112,23 +160,23 @@ public JSONObject fetchPageOfMemberCard(DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
//jsonObject.put("shelfState",shelfState);//启用状态
//jsonObject.put("xcxSaleStatus",xcxSaleStatus);//售卖状态
jsonObject
.
put
(
"courseId"
,
courseId
);
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"courseId"
,
courseId
);
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
.
getJSONObject
(
"result"
);
}
/**
/**
* @param
* @description:会员卡搜索
* @author: yangjian
**/
public
JSONObject
testMemberCardcommonSearch
(
String
title
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
doMemberCardcommonSearch
(
String
title
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_commonSearch"
)
...
...
@@ -136,22 +184,22 @@ public JSONObject testMemberCardcommonSearch(String title, DataUserInfo...dataUs
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"title"
,
title
);
//搜索的卡名
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"title"
,
title
);
//搜索的卡名
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
}
/**
/**
* @param
* @description:会员卡售卖记录
* @author: yangjian
**/
public
JSONObject
membercardsearch
(
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
membercardsearch
(
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_membercard_search"
)
...
...
@@ -160,16 +208,16 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
}
/**
* @param
...
...
@@ -177,22 +225,22 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
* @author: yangjian
**/
public
JSONObject
commonSearch
(
String
content
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
commonSearch
(
String
content
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_C
lue
)
dataApi
.
setApiModule
(
ApiModule
.
Polar_C
ard
)
.
setApiName
(
"API_commonSearch"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"content"
,
content
);
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"content"
,
content
);
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
...
...
@@ -201,7 +249,7 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
* @description:会员卡详情
* @author: yangjian
**/
public
JSONObject
fetchDetailById
(
String
id
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
fetchDetailById
(
String
id
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_fetchDetailById"
)
...
...
@@ -210,13 +258,13 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"id"
,
id
);
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"id"
,
id
);
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
...
...
@@ -225,7 +273,7 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
* @description:会员卡售卖记录详情
* @author: yangjian
**/
public
JSONObject
membercardfindDetailById
(
String
id
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
membercardfindDetailById
(
String
id
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_membercard_findDetailById"
)
...
...
@@ -235,9 +283,9 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"id"
,
id
);
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
...
...
@@ -246,18 +294,18 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
/**
* @description:查询会员可用于约课的会员卡
* @author: xuyamei
* @date: 2024/6/23 12:38
* @param courseId:课程id
* @param courseType:课程类型 GROUP_CLASS
* @param accountType:账户类型 MEMBER
* @param accountType:账户类型 MEMBER:EXPERIENCE
* @param memberId 会员id
* @param reserveDate:约课时间
* @param dataUserInfos
* @description:查询会员可用于约课的会员卡
* @author: xuyamei
* @date: 2024/6/23 12:38
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
listUserReservableBenefit
(
String
courseId
,
String
courseType
,
String
accountType
,
String
memberId
,
long
reserveDate
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONArray
listUserReservableBenefit
(
String
courseId
,
String
courseType
,
String
accountType
,
String
memberId
,
long
reserveDate
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_listUserReservableBenefit"
)
.
setTerminal
(
Terminal
.
B
);
...
...
@@ -283,7 +331,7 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
* @description:手动扣次
* @author: yangjian
**/
public
JSONObject
manualDeduct
(
String
benefitId
,
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
manualDeduct
(
String
benefitId
,
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_manualDeduct"
)
...
...
@@ -292,16 +340,16 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"balance"
,
1
);
jsonObject
.
put
(
"balance"
,
1
);
jsonObject
.
put
(
"benefitId"
,
benefitId
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"memo"
,
"自动化手动扣次"
);
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
...
...
@@ -310,7 +358,7 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
* @description:会员卡消耗记录
* @author: yangjian
**/
public
JSONObject
fetchPageOfConsumeRecord
(
String
benefitId
,
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
fetchPageOfConsumeRecord
(
String
benefitId
,
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_fetchPageOfConsumeRecord"
)
...
...
@@ -319,16 +367,16 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"benefitId"
,
benefitId
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"benefitId"
,
benefitId
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
...
...
@@ -337,7 +385,7 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
* @description:修改会员卡有效期
* @author: yangjian
**/
public
JSONObject
modifyExpireDate
(
String
benefitId
,
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
modifyExpireDate
(
String
benefitId
,
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_modifyExpireDate"
)
...
...
@@ -346,17 +394,17 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"confirm"
,
false
);
jsonObject
.
put
(
"confirm"
,
false
);
jsonObject
.
put
(
"expireDate"
,
TimeUtils
.
getTodayTime
());
jsonObject
.
put
(
"memo"
,
"自动化修改会员卡有效期"
);
jsonObject
.
put
(
"benefitId"
,
benefitId
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"memo"
,
"自动化修改会员卡有效期"
);
jsonObject
.
put
(
"benefitId"
,
benefitId
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
...
...
@@ -365,7 +413,7 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
* @description:会员卡停卡
* @author: yangjian
**/
public
JSONObject
membercard_suspend
(
String
benefitId
,
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
membercard_suspend
(
String
benefitId
,
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_membercard_suspend"
)
...
...
@@ -376,15 +424,15 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
jsonObject
.
put
(
"planRestoreDate"
,
TimeUtils
.
getAfterDayDate
(
1
));
//停卡到第二天
jsonObject
.
put
(
"memo"
,
"自动化停卡"
);
jsonObject
.
put
(
"benefitId"
,
benefitId
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"memo"
,
"自动化停卡"
);
jsonObject
.
put
(
"benefitId"
,
benefitId
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
...
...
@@ -393,7 +441,7 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
* @description:会员卡查看编辑记录
* @author: yangjian
**/
public
JSONObject
fetchPageOfHistory
(
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
public
JSONObject
fetchPageOfHistory
(
String
memberCardId
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_fetchPageOfHistory"
)
...
...
@@ -402,21 +450,79 @@ public JSONObject membercardsearch( DataUserInfo...dataUserInfos) {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
/**
* 修改会员卡的停启用状态
*
* @param memberCardId 会员卡ID
* @param shelfState 启用:YES,停用:NO
* @param dataUserInfos
*/
public
void
modifyMemberCardShelfState
(
String
memberCardId
,
String
shelfState
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_modifyShelfState"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"shelfState"
,
shelfState
);
jsonObject
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* 售卖记录全局搜索:根据会员名称/手机号搜索,获取会员名下购卡相关记录
*
* @param memberId
*/
public
void
getUserMemberCardList
(
String
memberId
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_fetchUserCardList"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"accountType"
,
"MEMBER"
);
jsonObject
.
put
(
"memberId"
,
memberId
);
jsonObject
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* 查看会员卡售卖记录-变动记录
* @param memberCardAccountId
*/
public
void
getMemberCardAccountOperateRecord
(
String
memberCardAccountId
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_fetchPageOfOperateRecord"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"memberCardId"
,
memberCardAccountId
);
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
100
);
jsonObject
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
}
src/main/java/com/xiaomai/cases/polar/memberCard/GetMemberCardBaseInfoForSign.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
memberCard
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.training.TrainingTools
;
import
com.xiaomai.utils.XMBaseTest
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.annotations.BeforeClass
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
/**
* @author adu
* data 2024/7/24 10:15
*/
public
class
GetMemberCardBaseInfoForSign
extends
BaseTestImpl
{
String
memberId
=
""
;
String
memberCardId
=
""
;
@Resource
(
name
=
"tools"
)
Tools
tools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"cardTools"
)
CardTools
cardTools
;
String
shelfState
=
""
;
BigDecimal
quantity
;
//可用次数
float
price
;
//价格
int
validPeriod
;
//有效期
String
latestSnapshotId
;
//最近的快照ID
@BeforeClass
@Override
public
void
beforeTest
()
{
super
.
beforeTest
();
//搜索目标会员
String
phone
=
"17682302508"
;
memberId
=
trainingTools
.
searchTargerMember
(
phone
);
if
(
memberId
.
isEmpty
())
{
memberId
=
tools
.
create
(
"测试机吴彦祖"
,
phone
).
getString
(
"result"
);
}
//搜索目标会员卡-次卡
String
title
=
"嘟嘟创建的会员卡-次卡"
;
cardTools
.
doMemberCardcommonSearch
(
title
);
int
total
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
();
if
(
total
>
0
)
{
memberCardId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result[0].id"
);
shelfState
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result[0].shelfState"
);
//YES,上架状态:YES
if
(
shelfState
.
equals
(
"NO"
))
{
cardTools
.
modifyMemberCardShelfState
(
memberCardId
,
"YES"
);
}
}
else
{
//创建一个新的会员卡
memberCardId
=
cardTools
.
oneKeyCreateMembershipCardNumberCard
(
title
);
}
//获取会员卡详情
cardTools
.
fetchDetailById
(
memberCardId
);
quantity
=
BigDecimal
.
valueOf
(
Long
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.benefitList[0].balance"
)));
price
=
Float
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.price"
));
validPeriod
=
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.validPeriod"
));
latestSnapshotId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.latestSnapshotId"
);
//给会员签单-购买会员卡
orderTools
.
signOrder
(
memberCardId
,
latestSnapshotId
,
quantity
,
price
,
validPeriod
,
latestSnapshotId
,
0
,
"FIRST_USED"
,
"MEMBER_CARD"
,
memberId
,
price
,
price
,
"1"
);
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/memberCard/TestActivateMemberCard.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
memberCard
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* 售卖记录详情-会员卡开卡
*
* @author adu
* data 2024/7/24 14:43
*/
public
class
TestActivateMemberCard
extends
GetMemberCardBaseInfoForSign
{
@Resource
(
name
=
"cardTools"
)
CardTools
cardTools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Card
,
"API_activateMemberCard"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"操作会员卡开卡"
)
public
void
testActivateMemberCard
()
{
cardTools
.
getUserMemberCardList
(
memberId
);
String
memberAccountCardId
=
""
;
String
state
;
int
count
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
();
if
(
count
>
0
){
memberAccountCardId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result[0].id"
);
state
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result[0].state"
);
if
(
state
.
equals
(
"UN_ACTIVE"
)){
//操作开卡
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"memberCardId"
,
memberAccountCardId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
//查看售卖记录详情
cardTools
.
membercardfindDetailById
(
memberAccountCardId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.state"
),
"NORMAL"
,
"开卡后卡状态没变更为生效状态"
);
String
benefitId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.benefitList[0].id"
);
//check生成一条变动记录
cardTools
.
getMemberCardAccountOperateRecord
(
memberAccountCardId
);
Assert
.
assertTrue
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].operateType"
).
equals
(
"ACTIVATE"
),
"手动开卡后生成的变动记录第一条备注不是手动开卡ACTIVATE"
);
Assert
.
assertTrue
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].remark"
).
equals
(
"手动开卡"
),
"手动开卡后生成的变动记录第一条备注不是手动开卡"
);
//查看消耗记录
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberAccountCardId
);
int
totalBefore
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
Assert
.
assertTrue
(
totalBefore
==
1
,
"会员购卡后没生成购买的消耗记录"
);
Assert
.
assertTrue
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].consumeType"
).
equals
(
"PURCHASE"
),
"会员购卡后生成消耗记录不是购买"
);
//操作退卡
orderTools
.
refundOrder
(
2
,
memberAccountCardId
,
quantity
,
price
,
"MEMBER_CARD"
,
memberId
,
price
,
price
,
"1"
);
String
refundOrderId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
//退卡成功后check 售卖记录详情状态:已退卡
cardTools
.
membercardfindDetailById
(
memberAccountCardId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.state"
),
"REFUNDED"
,
"退卡后卡卡账户状态没变更为已退卡状态"
);
//退卡后check是否生成一条退卡的消耗记录
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberAccountCardId
);
int
totalAfter
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
Assert
.
assertTrue
(
totalAfter
==
2
,
"会员退卡后没生成购买的消耗记录"
);
Assert
.
assertTrue
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].consumeType"
).
equals
(
"REFUND"
),
"会员退卡后生成消耗记录不是退卡"
);
//check 消耗次数
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].changeOfPurchaseBalance"
),
"-60.00"
,
"购买次数变动不是-60"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].changeOfUsablePurchaseBalance"
),
"-60.00"
,
"可用次数变动不是-2"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].changeOfGiveBalance"
),
"-2.00"
,
"赠送次数变动不是-60"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].changeOfUsableGiveBalance"
),
"-2.00"
,
"可用赠送次数变动不是-2"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].changeOfBenefitAmount"
),
"-398.00"
,
"变动金额不是-398.00"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].leftBenefitAmount"
),
"0.00"
,
"剩余金额不是0.00"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].leftPurchaseBalance"
),
"0.00"
,
"剩余购买次数不是0"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].leftUsablePurchaseBalance"
),
"0.00"
,
"剩余可用次数不是0"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].leftGiveBalance"
),
"0.00"
,
"剩余赠送次数不是0"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].leftUsableGiveBalance"
),
"0.00"
,
"剩余可用赠送次数不是0"
);
}
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/memberCard/TestMemberCardSearch.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
memberCard
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.clue.MemberTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMBaseTest
;
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
TestMemberCardSearch
extends
XMBaseTest
{
@Resource
(
name
=
"cardTools"
)
CardTools
cardTools
;
@BeforeMethod
public
void
beforeTest
(){
xmAppApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
...
...
@@ -26,25 +28,23 @@ public class TestMemberCardSearch extends XMBaseTest {
.
setCase_name
(
Thread
.
currentThread
().
getStackTrace
()[
1
].
getFileName
().
split
(
"\\."
)[
0
]);
super
.
beforeTest
();
}
@Test
(
description
=
"会员卡列表搜索"
)
@Test
(
description
=
"会员卡列表
根据卡名称-全局
搜索"
)
public
void
testMemberCardcommonSearch
()
{
CardTools
Cardtools
=
new
CardTools
();
Cardtools
.
memberCardCreate
(
"次卡-自动化会员卡"
+
RandomStringUtil
.
randomString
(
3
));
//创建随机的名的次卡
Cardtools
.
fetchPageOfMemberCard
();
String
title
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].title"
);
String
memberCardName
=
"次卡-自动化会员卡"
+
RandomStringUtil
.
randomString
(
8
);
cardTools
.
memberCardCreate
(
memberCardName
);
//创建随机的名的次卡
cardTools
.
fetchPageOfMemberCard
();
//创建成功后查询会员卡列表(此处也可以不查询)
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
()>=
1
,
"创建会员卡成功后,会员卡列表数据为空"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].title"
),
memberCardName
,
"创建成功后,列表中第一条数据不是显示的该卡"
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"title"
,
titl
e
);
//这里需要搜索新创建的会员卡
jsonObject
.
put
(
"title"
,
memberCardNam
e
);
//这里需要搜索新创建的会员卡
jsonObject
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
jsonObject
.
toJSONString
(),
headers
).
assetsSuccess
(
true
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
xmAppApi
.
getApi_response
(),
"$.result"
).
size
()==
1
,
"精确搜索后发现会搜索到的数据不等于1"
);
Assert
.
assertTrue
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.result[0].title"
).
equals
(
memberCardName
),
"精确搜索后发现会员卡名称不匹配"
);
}
}
src/main/java/com/xiaomai/cases/polar/memberCard/TestModifyShelfState.java
View file @
a19c8b30
...
...
@@ -7,10 +7,15 @@ import com.xiaomai.enums.RequestType;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.XMBaseTest
;
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
TestModifyShelfState
extends
XMBaseTest
{
@Resource
(
name
=
"cardTools"
)
CardTools
cardTools
;
@BeforeMethod
public
void
beforeTest
(){
xmAppApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
...
...
@@ -26,43 +31,60 @@ public class TestModifyShelfState extends XMBaseTest {
public
void
testmodifyShelfState
()
{
CardTools
Cardtools
=
new
CardTools
();
Cardtools
.
fetchPageOfMemberCard
();
String
memberCardId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].id"
);
String
memberCardId
=
""
;
String
shelfState
;
//先检查次下列表有没有数据,有数据才会执行下面的点代码(如果是个空机构,肯定不会被执行,想从存量数据中获取,需要自己先造个数据)
int
listDatas
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
if
(
listDatas
>
0
)
{
memberCardId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].id"
);
//取出第一个数据后,要check下会员卡的启用状态,想停用,要保证卡的状态目前就是启用状态
shelfState
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].shelfState"
);
//如果不是启用状态,则开启
if
(
shelfState
.
equals
(
"NO"
)){
cardTools
.
modifyMemberCardShelfState
(
memberCardId
,
"YES"
);
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"shelfState"
,
"NO"
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"shelfState"
,
"NO"
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
jsonObject
.
toJSONString
(),
headers
).
assetsSuccess
(
true
);
//check 会员卡详情,查看状态是否是下架状态
cardTools
.
fetchDetailById
(
memberCardId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.shelfState"
),
"NO"
,
"操作停用会员卡后,查看卡详情,卡启用状态没变更为NO"
);
}
}
@Test
(
description
=
"启用会员卡"
)
public
void
testmodifyShelfState1
()
{
CardTools
Cardtools
=
new
CardTools
();
Cardtools
.
fetchPageOfMemberCard
();
String
memberCardId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].id"
);
String
memberCardId
=
""
;
String
shelfState
;
int
listDatas
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
if
(
listDatas
>
0
)
{
memberCardId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].id"
);
shelfState
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].shelfState"
);
if
(
shelfState
.
equals
(
"YES"
))
{
cardTools
.
modifyMemberCardShelfState
(
memberCardId
,
"NO"
);
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"shelfState"
,
"YES"
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"shelfState"
,
"YES"
);
jsonObject
.
put
(
"memberCardId"
,
memberCardId
);
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
jsonObject
.
toJSONString
(),
headers
).
assetsSuccess
(
true
);
//check 会员卡详情,查看状态是否是上架状态
cardTools
.
fetchDetailById
(
memberCardId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.shelfState"
),
"YES"
,
"操作启用会员卡后,查看卡详情,卡启用状态没变更为YES"
);
}
}
}
src/main/java/com/xiaomai/cases/polar/memberCard/TestModifyXcxSaleState.java
View file @
a19c8b30
...
...
@@ -28,8 +28,6 @@ public class TestModifyXcxSaleState extends XMBaseTest {
Cardtools
.
fetchPageOfMemberCard
();
String
memberCardId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].id"
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"xcxSaleState"
,
"NO"
);
...
...
@@ -37,9 +35,6 @@ public class TestModifyXcxSaleState extends XMBaseTest {
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
jsonObject
.
toJSONString
(),
headers
).
assetsSuccess
(
true
);
}
...
...
src/main/java/com/xiaomai/cases/polar/reserve/ReserveTools.java
View file @
a19c8b30
...
...
@@ -6,7 +6,9 @@ import com.xiaomai.client.DataUserInfo;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMBaseTest
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.stereotype.Component
;
/**
...
...
@@ -20,6 +22,12 @@ import org.springframework.stereotype.Component;
@Component
(
"reserveTools"
)
public
class
ReserveTools
extends
XMBaseTest
{
public
void
setUp
(
String
name
,
DataUserInfo
...
dataUserInfo
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
name
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfo
);
}
/**
* @description: 添加预约
...
...
@@ -72,6 +80,58 @@ public class ReserveTools extends XMBaseTest {
}
/**
* @description: 预约私教课
* @author: xuyamei
* @date: 2024/7/26 17:34
* @param areaId 场地id
* @param courseId 课程id
* @param chiefCoachId 教练id
* @param memberId 会员id
* @param benefitId 权益id
* @param spanMinutes 上课时长
* @param reserveMemberNum 预约人数
* @param scheduleId 课次id
* @param scheduleStartTime 上课开始时间
* @param success
* @param dataUserInfos
* @return: java.lang.String
**/
public
String
addPersonalReserve
(
String
areaId
,
String
courseId
,
String
chiefCoachId
,
String
memberId
,
String
benefitId
,
int
spanMinutes
,
int
reserveMemberNum
,
String
scheduleId
,
long
scheduleStartTime
,
boolean
success
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
"API_addPersonalReserve"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
body
=
new
JSONObject
();
JSONArray
areaIds
=
new
JSONArray
();
// 场地,私教约课会用到
if
(!
areaId
.
equals
(
""
)){
areaIds
.
add
(
areaId
);
}
body
.
put
(
"courseId"
,
courseId
);
body
.
put
(
"benefitId"
,
benefitId
);
//会员卡权益Id
body
.
put
(
"chiefCoachId"
,
chiefCoachId
);
// 主教id
body
.
put
(
"memberId"
,
memberId
);
// 会员id
body
.
put
(
"planCheckBalance"
,
1
);
// 计划扣除额度
body
.
put
(
"reserveMemberNum"
,
reserveMemberNum
);
// 预约人数
body
.
put
(
"spanMinutes"
,
spanMinutes
);
// 上课时长
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
if
(!
scheduleId
.
equals
(
""
)){
body
.
put
(
"scheduleId"
,
scheduleId
);
// 课次id
}
body
.
put
(
"scheduleStartTime"
,
scheduleStartTime
);
// 课次id
body
.
put
(
"memo"
,
"自动化添加预约备注"
+
TimeUtils
.
getCurrentTime
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
success
);
if
(
success
){
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getString
(
"reserveId"
);
}
return
dataApi
.
getBodyInJSON
().
toString
();
}
/**
* @description:获取会员预约记录列表
* @author: xuyamei
* @date: 2024/6/12 15:26
...
...
@@ -141,7 +201,7 @@ public class ReserveTools extends XMBaseTest {
* @param dataUserInfos
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getPageByStudio
(
String
courseId
,
String
reserveState
,
String
signState
,
String
coachId
,
Long
scheduleStartTime
,
Long
scheduleEndDate
,
String
memberId
,
String
courseType
,
DataUserInfo
...
dataUserInfos
){
public
JSONArray
getPageByStudio
(
String
courseId
,
String
reserveState
,
String
signState
,
String
coachId
,
Long
scheduleStartTime
,
Long
scheduleEndDate
,
String
memberId
,
String
courseType
,
String
campId
,
DataUserInfo
...
dataUserInfos
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
"API_memberReserve_getPageByStudio"
)
.
setTerminal
(
Terminal
.
B
);
...
...
@@ -150,7 +210,7 @@ public class ReserveTools extends XMBaseTest {
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
2
0
);
body
.
put
(
"size"
,
50
0
);
if
(!
courseId
.
equals
(
""
)){
body
.
put
(
"courseId"
,
courseId
);
}
...
...
@@ -170,6 +230,10 @@ public class ReserveTools extends XMBaseTest {
if
(!
memberId
.
equals
(
""
)){
body
.
put
(
"memberId"
,
memberId
);
}
if
(
courseType
.
equals
(
"TRAINING_CAMP"
)&&
!
campId
.
isEmpty
()){
body
.
put
(
"tenantMemberCardId"
,
campId
);
}
body
.
put
(
"courseType"
,
courseType
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
...
...
@@ -303,5 +367,304 @@ public class ReserveTools extends XMBaseTest {
}
/**
* @description: 私教列表
* @author: xuyamei
* @date: 2024/7/8 11:20
* @param searchContext :搜索姓名或手机号
* @param dataUserInfo
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONObject
pageStudioPersonalCoach
(
String
searchContext
,
DataUserInfo
...
dataUserInfo
){
setUp
(
"API_pageStudioPersonalCoach"
,
dataUserInfo
);
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
(
"searchContext"
,
searchContext
);
// 搜索文本:手机号或者员工昵称
body
.
put
(
"state"
,
"DUTY"
);
// 状态:搜索在职的
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
20
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description:获取具体某个私教的可约时间
* @author: xuyamei
* @date: 2024/7/8 11:24
* @param id 员工id
* @param vo [normalTimeVOS,specialTimeVOS]
* ex-enum-descriptions:[常规时间,特定可约时间]
* @param dataUserInfo
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONArray
getPersonalCoachTime
(
String
id
,
String
vo
,
DataUserInfo
...
dataUserInfo
){
setUp
(
"API_getPersonalCoachTime"
,
dataUserInfo
);
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
(
"id"
,
id
);
// 员工id
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
vo
);
}
/**
* @description 查询具体某个私教历史特定可约时间
* @author: xuyamei
* @date: 2024/7/8 11:50
* @param
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getCoachHistorySpecialDate
(
String
id
){
setUp
(
"API_getCoachHistorySpecialDate"
);
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
(
"id"
,
id
);
// 员工id
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONArray
(
"result"
);
}
/**
* @description: 设置常规可约时间
* @author: xuyamei
* @date: 2024/7/8 14:44
* @param coachId :教练id
* @param normalTimeInfoRequests :常规时间(可传空)
* @param userInfo
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
createNormalDate
(
String
coachId
,
JSONArray
normalTimeInfoRequests
,
DataUserInfo
...
userInfo
){
setUp
(
"API_createNormalDate"
,
userInfo
);
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
(
"coachId"
,
coachId
);
// 员工id
JSONObject
infoRequests
=
new
JSONObject
();
// 常规时间为空,则快速新建
if
(
normalTimeInfoRequests
.
size
()
==
0
){
JSONArray
timePeriodInfos
=
new
JSONArray
();
int
[]
minuteOffset
=
{
300
,
720
,
1080
};
int
[]
spanMinutes
=
{
420
,
360
,
300
};
for
(
int
i
=
0
;
i
<
3
;
i
++){
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
minuteOffset
[
i
]);
timeInfo
.
put
(
"spanMinutes"
,
spanMinutes
[
i
]);
timePeriodInfos
.
add
(
timeInfo
);
}
infoRequests
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
// 每星期
String
[]
weekdays
=
{
"MONDAY"
,
"TUESDAY"
,
"WEDNESDAY"
,
"THURSDAY"
,
"FRIDAY"
,
"SATURDAY"
,
"SUNDAY"
};
infoRequests
.
put
(
"weekdays"
,
weekdays
);
normalTimeInfoRequests
.
add
(
infoRequests
);
}
body
.
put
(
"normalTimeInfoRequests"
,
normalTimeInfoRequests
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
5000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
return
dataApi
.
getBodyInJSON
().
getJSONArray
(
"result"
);
}
/**
* @description:创建特殊可约时间
* @author: xuyamei
* @date: 2024/7/23 16:39
* @param coachId 教练id
* @param dutyType ["OFF_DUTY","ON_DUTY"] ["全天休息","可约时间"]
* @param specialTimeInfoRequests :可单独传可约时间段,不用默认创建全天休息的时间
* @param userInfo
* @return: void
**/
public
void
createSpecialDate
(
String
coachId
,
String
dutyType
,
JSONObject
specialTimeInfoRequests
,
DataUserInfo
...
userInfo
){
setUp
(
"API_createSpecialDate"
,
userInfo
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"coachId"
,
coachId
);
// 如果不传可约时间,则快速新建
if
(
specialTimeInfoRequests
.
size
()
==
0
){
// 可约时间类型
specialTimeInfoRequests
.
put
(
"dutyType"
,
dutyType
);
// 设置特定日期
JSONArray
selectedDates
=
new
JSONArray
();
selectedDates
.
add
(
TimeUtils
.
getTodayTime
());
specialTimeInfoRequests
.
put
(
"selectedDates"
,
selectedDates
);
// 如果是可约时间非全天休息,则传可约时间段
if
(
dutyType
.
equals
(
"ON_DUTY"
)){
// 时间段 00:00 ~ 23:59
JSONArray
timePeriodInfos
=
new
JSONArray
();
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
0
);
timeInfo
.
put
(
"spanMinutes"
,
1380
);
timePeriodInfos
.
add
(
timeInfo
);
specialTimeInfoRequests
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
}
}
body
.
put
(
"specialTimeInfoRequest"
,
specialTimeInfoRequests
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
5000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
/**
* @description: 删除特殊可约时间
* @author: xuyamei
* @date: 2024/7/23 16:39
* @param id 特约日期记录id
* @param userInfo
**/
public
void
deleteSpecialDate
(
String
id
,
DataUserInfo
...
userInfo
){
setUp
(
"API_deleteSpecialDate"
,
userInfo
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
JSONArray
ids
=
new
JSONArray
();
ids
.
add
(
id
);
body
.
put
(
"ids"
,
ids
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* @description: 修改特殊可约时间
* @author: xuyamei
* @date: 2024/7/24 11:16
* @param coachId 教练id
* @param dutyType 可约类型 ["OFF_DUTY","ON_DUTY"] ["全天休息","可约时间"]
* @param timePeriodInfos 时间段 [{minuteOffset,spanMinutes}] 可约类型为全天休息时传空
* @param userInfo
* @return: void
**/
public
void
modifySpecialDate
(
String
coachId
,
String
dutyType
,
JSONArray
timePeriodInfos
,
Long
selectedDate
,
DataUserInfo
...
userInfo
){
setUp
(
"API_modifySpecialDate"
,
userInfo
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"dutyType"
,
dutyType
);
body
.
put
(
"coachId"
,
coachId
);
body
.
put
(
"selectedDate"
,
selectedDate
);
if
(
timePeriodInfos
.
size
()
!=
0
){
body
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* @description: 获取私教课程的可约时间块
* @author: xuyamei
* @date: 2024/7/24 17:17
* @param coachId 教练id
* @param courseId 课程id
* @param selectedDate 选中日期
* @param userInfos
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getPersonalTimeBlocks
(
String
coachId
,
String
courseId
,
Long
selectedDate
,
DataUserInfo
...
userInfos
){
setUp
(
"API_getPersonalTimeBlocks"
,
userInfos
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"coachId"
,
coachId
);
body
.
put
(
"courseId"
,
courseId
);
body
.
put
(
"selectedDate"
,
selectedDate
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONArray
(
"result"
);
}
/**
* @param startDate
* @param endDate
* @description:查询私教课表
* @author: xuyamei
* @date: 2024/6/23 17:46
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getPersonalScheduleTable
(
Long
startDate
,
Long
endDate
,
String
courseId
)
{
setUp
(
"API_getPersonalScheduleTable"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
if
(
courseId
.
equals
(
""
)){
body
.
put
(
"courseId"
,
courseId
);
}
body
.
put
(
"startDate"
,
startDate
);
body
.
put
(
"endDate"
,
endDate
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
if
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
))
>
0
)
{
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"timetableGroups"
).
getJSONObject
(
0
).
getJSONArray
(
"timetableList"
);
}
else
{
return
null
;
}
}
/**
* @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/TestAddMemberReserve.java
→
src/main/java/com/xiaomai/cases/polar/reserve/
group/
TestAddMemberReserve.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
reserve
;
package
com
.
xiaomai
.
cases
.
polar
.
reserve
.
group
;
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.cases.polar.setting.rules.RuleTools
;
...
...
@@ -14,11 +16,13 @@ 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
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.core.annotation.Order
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -50,6 +54,9 @@ public class TestAddMemberReserve extends BaseTestImpl {
@Resource
(
name
=
"ruleTools"
)
RuleTools
ruleTools
;
MemberTools
memberTools
=
new
MemberTools
();
OrderTools
orderTools
=
new
OrderTools
();
CardTools
cardTools
=
new
CardTools
();
...
...
@@ -57,18 +64,18 @@ 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
();
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_addReserve"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -84,22 +91,23 @@ 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
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
fals
e
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)]);
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
tru
e
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)]);
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
//统计查询到的目标日程数量
ruldId
=
XMJSONPath
.
readPath
(
getGroupRuleScheduleList
.
getJSONObject
(
0
),
"$.ruleId"
);
System
.
out
.
println
(
"----------ruldId---------"
+
ruldId
);
Long
scheduleStartTime
=
TimeUtils
.
getTodayTime
();
Long
scheduleEndTime
=
TimeUtils
.
getTodayEndTime
();
try
{
Thread
.
sleep
(
25
00
);
Thread
.
sleep
(
30
00
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 查询课次id
JSONArray
getGroupScheduleTable
=
groupScheduleTools
.
getGroupScheduleTable
(
scheduleStartTime
,
scheduleEndTime
);
JSONArray
getGroupScheduleTable
=
groupScheduleTools
.
getGroupScheduleTable
(
scheduleStartTime
,
scheduleEndTime
,
courseId
);
for
(
int
i
=
0
;
i
<
getGroupScheduleTable
.
size
();
i
++){
if
(
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
if
(
getGroupScheduleTable
.
getJSONObject
(
i
).
containsKey
(
"ruleId"
)
&&
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
scheduleId
=
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
...
...
@@ -110,12 +118,19 @@ public class TestAddMemberReserve extends BaseTestImpl {
throw
new
RuntimeException
(
e
);
}
// 查询存量的学员没有则创建学员,// todo 先手动新建
String
memberId
;
// 查询存量的学员没有则创建学员
if
(
tools
.
commonSearch
(
"约课学员sandy"
,
"NORMAL"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId
=
tools
.
commonSearch
(
"约课学员sandy"
,
"NORMAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
"约课学员sandy"
,
"HISTORY"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId
=
tools
.
commonSearch
(
"约课学员sandy"
,
"HISTORY"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
"约课学员sandy"
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId
=
tools
.
commonSearch
(
"约课学员sandy"
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
{
memberId
=
memberTools
.
create
(
"约课学员sandy"
,
RandomStringUtil
.
randomMobile
(
"203"
)).
getString
(
"result"
);
}
memberInfo1
.
add
(
memberId
);
// 查询是否有可用的会员卡,没有则购买
JSONArray
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId
,
TimeUtils
.
getTodayTime
());
...
...
@@ -130,13 +145,18 @@ public class TestAddMemberReserve extends BaseTestImpl {
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId
,
TimeUtils
.
getTodayTime
());
}
// 查询权益
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
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
)
{
...
...
@@ -170,7 +190,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
Assert
.
assertTrue
(
success
,
"约课后在会员详情页面未查询到相关信息"
);
// check 2.2 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"SUCCESS"
,
""
,
""
,
startTime
,
scheduleEndTime
,
memberId
,
"GROUP_CLASS"
);
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"SUCCESS"
,
""
,
""
,
startTime
,
scheduleEndTime
,
memberId
,
"GROUP_CLASS"
,
""
);
success
=
false
;
for
(
int
i
=
0
;
i
<
getPageByStudio
.
size
();
i
++){
if
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
...
...
@@ -189,23 +209,35 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberId
,
"查询的约课数据不是同一个会员"
);
// check 4: 会员卡消耗记录中包含该记录锁定
// check 3: 会员卡消耗记录中包含该记录锁定
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
{
"resourceId"
,
"consumeType"
,
"changeOfUsablePurchaseBalance"
};
String
[]
respect
=
{
reserveId
,
"RESERVE"
,
"-1.00"
};
String
[]
message
=
{
"会员卡消耗记录中记录的资源id与实际约课记录id不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录类型不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录余额不符合"
};
for
(
int
i
=
0
;
i
<
result2
.
length
;
i
++){
Assert
.
assertEquals
(
consumeRecord
.
getJSONObject
(
0
).
getString
(
result2
[
i
]),
respect
[
i
],
message
[
i
]);
}
}
// todo 补充修改会员卡有效期然后继续预约
@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
.
assert
Equals
(
message
,
"预约失败,无需重复添加"
);
Assert
.
assert
True
(
message
.
equals
(
"会员已约该课程,不可重复预约"
)
||
message
.
equals
(
"预约失败,无需重复添加"
)
);
}
@Test
(
priority
=
2
)
public
void
testAddMemberReserve3
(){
// 修改课次人数上限为1
groupScheduleTools
.
editGroupSchedule
(
scheduleId
,
startTime
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
1
,
1
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 修改预约规则不允许排队
JSONObject
getRules
=
ruleTools
.
getGroupBookingRules
();
// 获取场馆团课预约规则
String
id
=
getRules
.
getString
(
"id"
);
// 获取规则id
...
...
@@ -215,14 +247,17 @@ public class TestAddMemberReserve extends BaseTestImpl {
// 新学员 购买卡
String
memberId2
=
""
;
// 查询存量的学员没有则创建学员
,// todo 先手动新建
// 查询存量的学员没有则创建学员
if
(
tools
.
commonSearch
(
"约课学员susan"
,
"NORMAL"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId2
=
tools
.
commonSearch
(
"约课学员susan"
,
"NORMAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
"约课学员susan"
,
"HISTORY"
).
getJSONArray
(
"result"
).
size
()>
0
){
memberId2
=
tools
.
commonSearch
(
"约课学员susan"
,
"HISTORY"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
{
}
else
if
(
tools
.
commonSearch
(
"约课学员susan"
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
size
()>
0
)
{
memberId2
=
tools
.
commonSearch
(
"约课学员susan"
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
{
memberId2
=
memberTools
.
create
(
"约课学员susan"
,
RandomStringUtil
.
randomMobile
(
"203"
)).
getString
(
"result"
);
}
memberInfo2
.
add
(
memberId2
);
// 查询是否有可用的会员卡,没有则购买
JSONArray
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId2
,
TimeUtils
.
getTodayTime
());
...
...
@@ -236,7 +271,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"
);
...
...
@@ -253,7 +291,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
);
...
...
@@ -266,33 +304,40 @@ 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
,
"取消约课后在约课记录查询取消状态没有查询到相关信息"
);
// todo 查询会员卡取消后释放锁定次数
// check 3: 会员卡消耗记录中包含该记录锁定的次数释放
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
[]
{
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/TestAddToQueue.java
→
src/main/java/com/xiaomai/cases/polar/reserve/
group/
TestAddToQueue.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
reserve
;
package
com
.
xiaomai
.
cases
.
polar
.
reserve
.
group
;
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.cases.polar.setting.rules.RuleTools
;
...
...
@@ -14,10 +16,12 @@ 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
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -48,6 +52,8 @@ public class TestAddToQueue extends BaseTestImpl {
@Resource
(
name
=
"ruleTools"
)
RuleTools
ruleTools
;
MemberTools
memberTools
=
new
MemberTools
();
OrderTools
orderTools
=
new
OrderTools
();
CardTools
cardTools
=
new
CardTools
();
...
...
@@ -68,7 +74,8 @@ public class TestAddToQueue extends BaseTestImpl {
private
Long
startTime
;
private
String
courseId
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_addReserve"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -123,7 +130,14 @@ public class TestAddToQueue extends BaseTestImpl {
// check 1: 预约记录、会员详情预约记录、预约详情数据check
checkReserve
(
memberId2
.
getString
(
0
),
reserveId
,
"QUEUE_PROCESS"
,
memberId2
.
getString
(
1
),
"排队"
);
// todo check 4: 会员卡消耗记录中包含该记录锁定
// check 2: 会员卡消耗记录中包含该记录锁定
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
memberId2
.
getString
(
1
),
memberId2
.
getString
(
2
)).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
{
"resourceId"
,
"consumeType"
,
"changeOfUsablePurchaseBalance"
};
String
[]
respect
=
{
reserveId
,
"RESERVE"
,
"-1.00"
};
String
[]
message
=
{
"会员卡消耗记录中记录的资源id与实际约课记录id不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录类型不符合"
,
"会员卡消耗记录中记录的资源id与实际约课记录余额不符合"
};
for
(
int
i
=
0
;
i
<
result2
.
length
;
i
++){
Assert
.
assertEquals
(
consumeRecord
.
getJSONObject
(
0
).
getString
(
result2
[
i
]),
respect
[
i
],
message
[
i
]);
}
}
...
...
@@ -131,17 +145,17 @@ public class TestAddToQueue extends BaseTestImpl {
@DataProvider
public
Object
[][]
data
(){
return
new
Object
[][]{
{
"memberId1"
,
"排队失败,无需重复添加
,
会员已约该课程,不可重复预约"
},
// 已经在课次排队
{
"memberId2"
,
"排队失败,无需重复添加
,
会员已约该课程,不可重复预约"
}
// 已排队再次排队
{
"memberId1"
,
"排队失败,无需重复添加
"
,
"
会员已约该课程,不可重复预约"
},
// 已经在课次排队
{
"memberId2"
,
"排队失败,无需重复添加
"
,
"
会员已约该课程,不可重复预约"
}
// 已排队再次排队
};
}
@Test
(
priority
=
1
,
description
=
"已经在课次中再次排队"
,
dataProvider
=
"data"
)
public
void
addToQueue2
(
String
member
,
String
message
){
public
void
addToQueue2
(
String
member
,
String
message
1
,
String
message2
){
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
.
assertTrue
(
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
contains
(
message
),
"排队提示信息不符合"
);
Assert
.
assertTrue
(
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
equals
(
message1
)
||
dataApi
.
getBodyInJSON
().
getString
(
"message"
).
equals
(
message2
),
"排队提示信息不符合"
);
}
@Test
(
priority
=
2
,
description
=
"在创建一个排队学员,进行排队,排在第二位,将第一位的排队取消,check 学员排在第一,将课次学员取消, check学员在课次中,并排队成功"
)
...
...
@@ -171,21 +185,29 @@ public class TestAddToQueue extends BaseTestImpl {
Assert
.
assertEquals
(
getDetailById
.
getString
(
"queueSort"
),
"2"
,
"排队后排队名次应该是第二位"
);
// 操作2:将第一位"排队学员Amy"的排队取消
reserveTools
.
cancelMemberReserve
(
memberId2
.
getString
(
2
),
true
);
reserveTools
.
cancelMemberReserve
(
memberId2
.
getString
(
3
),
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
),
"排队"
);
checkReserve
(
memberId2
.
getString
(
0
),
memberId2
.
getString
(
3
),
"QUEUE_CANCEL"
,
memberId2
.
getString
(
1
),
"排队"
);
// check 2.2 排队学员Amy 会员卡消耗记录中包含该记录释放
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
memberId2
.
getString
(
1
),
memberId2
.
getString
(
2
)).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfUsablePurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
memberId2
.
getString
(
3
),
"CANCEL_QUEUE"
,
"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
]);
}
//check 2.2 排队学员yaya 排在第一位
getDetailById
=
reserveTools
.
getDetailById
(
reserveId
);
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
)
{
...
...
@@ -263,7 +285,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
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
fals
e
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)]);
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
tru
e
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)]);
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
//统计查询到的目标日程数量
...
...
@@ -275,9 +297,9 @@ public class TestAddToQueue extends BaseTestImpl {
throw
new
RuntimeException
(
e
);
}
// 查询课次id
JSONArray
getGroupScheduleTable
=
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
todayStartTimeTamp
),
scheduleEndTime
);
JSONArray
getGroupScheduleTable
=
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
todayStartTimeTamp
),
scheduleEndTime
,
courseId
);
for
(
int
i
=
0
;
i
<
getGroupScheduleTable
.
size
();
i
++){
if
(
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
if
(
getGroupScheduleTable
.
getJSONObject
(
i
).
containsKey
(
"ruleId"
)
&&
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
scheduleId
=
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
...
...
@@ -293,13 +315,15 @@ public class TestAddToQueue extends BaseTestImpl {
**/
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
{
}
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"
);
}
// 查询是否有可用的会员卡,没有则购买
...
...
@@ -316,10 +340,12 @@ public class TestAddToQueue extends BaseTestImpl {
}
// 查询权益
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
;
}
...
...
@@ -353,7 +379,7 @@ public class TestAddToQueue extends BaseTestImpl {
}
Assert
.
assertTrue
(
success
,
message
+
"在会员详情页面未查询到相关信息"
);
// check 1.2 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
reserveState
,
""
,
""
,
startTime
,
scheduleEndTime
,
memberId
,
"GROUP_CLASS"
);
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
)){
...
...
src/main/java/com/xiaomai/cases/polar/reserve/TestSignIn.java
→
src/main/java/com/xiaomai/cases/polar/reserve/
group/
TestSignIn.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
reserve
;
package
com
.
xiaomai
.
cases
.
polar
.
reserve
.
group
;
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
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
...
...
@@ -46,6 +50,7 @@ public class TestSignIn extends BaseTestImpl {
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
MemberTools
memberTools
=
new
MemberTools
();
OrderTools
orderTools
=
new
OrderTools
();
CardTools
cardTools
=
new
CardTools
();
...
...
@@ -65,7 +70,8 @@ public class TestSignIn extends BaseTestImpl {
private
String
courseId
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_signIn"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
@@ -94,7 +100,7 @@ public class TestSignIn extends BaseTestImpl {
throw
new
RuntimeException
(
e
);
}
// 操作签到
reserveTools
.
signIn
(
true
,
memberInfo
.
getString
(
2
),
false
);
reserveTools
.
signIn
(
true
,
memberInfo
.
getString
(
3
),
false
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
...
...
@@ -129,7 +135,7 @@ public class TestSignIn extends BaseTestImpl {
}
Assert
.
assertTrue
(
success
,
"约课后在会员详情页面未查询到相关信息"
);
// check 2.2 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"SUCCESS"
,
"SIGNED"
,
""
,
startTime
,
scheduleEndTime
,
memberInfo
.
getString
(
0
),
"GROUP_CLASS"
);
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
)){
...
...
@@ -148,8 +154,14 @@ public class TestSignIn extends BaseTestImpl {
}
Assert
.
assertEquals
(
getDetailById
.
getString
(
"memberId"
),
memberInfo
.
getString
(
0
),
"查询的约课数据不是同一个会员"
);
// check 4: 会员卡消耗记录中包含该记录锁定
// 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
]);
}
}
@DataProvider
(
name
=
"dataProvider"
)
...
...
@@ -163,11 +175,11 @@ public class TestSignIn extends BaseTestImpl {
@Test
(
description
=
"签到"
,
priority
=
1
,
dataProvider
=
"dataProvider"
)
public
void
testSignIn2
(
String
type
,
String
message
)
{
if
(
type
.
equals
(
"signIn"
)){
reserveTools
.
signIn
(
false
,
memberInfo
.
getString
(
2
),
false
);
reserveTools
.
signIn
(
false
,
memberInfo
.
getString
(
3
),
false
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
Assert
.
assertEquals
(
response
.
getString
(
"message"
),
message
,
"已经操作签到,又操作签到提示错误"
);
}
else
{
reserveTools
.
cancelMemberReserve
(
memberInfo
.
getString
(
2
),
false
);
reserveTools
.
cancelMemberReserve
(
memberInfo
.
getString
(
3
),
false
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
Assert
.
assertEquals
(
response
.
getString
(
"message"
),
message
,
"已经操作签到,又操作取消提示错误"
);
}
...
...
@@ -236,7 +248,12 @@ public class TestSignIn 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
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
false
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)]);
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
xmAppApi
.
getLoginInfo
().
getAdminId
(),
todayStartTimeTamp
,
todayEndDateTimeTamp
,
new
ArrayList
(),
new
ArrayList
(),
true
,
1
,
minuteOffset
[
random
.
nextInt
(
20
)]);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//1.2-查询排课日程
JSONArray
getGroupRuleScheduleList
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
//统计查询到的目标日程数量
...
...
@@ -248,9 +265,9 @@ public class TestSignIn extends BaseTestImpl {
throw
new
RuntimeException
(
e
);
}
// 查询课次id
JSONArray
getGroupScheduleTable
=
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
todayStartTimeTamp
),
scheduleEndTime
);
JSONArray
getGroupScheduleTable
=
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
todayStartTimeTamp
),
scheduleEndTime
,
courseId
);
for
(
int
i
=
0
;
i
<
getGroupScheduleTable
.
size
();
i
++){
if
(
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
if
(
getGroupScheduleTable
.
getJSONObject
(
i
).
containsKey
(
"ruleId"
)
&&
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"ruleId"
).
equals
(
ruldId
)){
scheduleId
=
getGroupScheduleTable
.
getJSONObject
(
i
).
getString
(
"scheduleId"
);
break
;
}
...
...
@@ -266,13 +283,15 @@ public class TestSignIn extends BaseTestImpl {
**/
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
{
}
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"
);
}
// 查询是否有可用的会员卡,没有则购买
...
...
@@ -289,10 +308,12 @@ public class TestSignIn extends BaseTestImpl {
}
// 查询权益
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
;
}
...
...
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestCreateBatchNormalDate.java
0 → 100644
View file @
a19c8b30
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.reserve.ReserveTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.Arrays
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-24 11:49
* @Description: 批量设置常规可约时间
* @Version: 1.0
*/
public
class
TestCreateBatchNormalDate
extends
BaseTestImpl
{
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
JSONArray
coachIds
=
new
JSONArray
();
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_createBatchNormalDate"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testCreateBatchNormalDate
(){
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
// 获取教练列表
JSONObject
pageStudioPersonalCoach
=
reserveTools
.
pageStudioPersonalCoach
(
""
);
int
total
=
pageStudioPersonalCoach
.
getInteger
(
"total"
);
Random
rand
=
new
Random
();
// 随机取两个教练
String
coachedId1
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
coachIds
.
add
(
coachedId1
);
String
coachedId2
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
if
(
coachedId1
.
equals
(
coachedId2
)){
coachedId2
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
9
:
total
-
1
)).
getString
(
"id"
);
}
coachIds
.
add
(
coachedId2
);
body
.
put
(
"coachIds"
,
coachIds
);
// 员工id
// 设置可约时间
JSONArray
normalTimeInfoRequests
=
new
JSONArray
();
JSONObject
infoRequests
=
new
JSONObject
();
JSONArray
timePeriodInfos
=
new
JSONArray
();
// 三个时段 5:00-12:00 12:00-18:00 18:00-23:00
int
[]
minuteOffset
=
{
300
,
720
,
1080
};
int
[]
spanMinutes
=
{
420
,
360
,
300
};
for
(
int
i
=
0
;
i
<
3
;
i
++){
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
minuteOffset
[
i
]);
timeInfo
.
put
(
"spanMinutes"
,
spanMinutes
[
i
]);
timePeriodInfos
.
add
(
timeInfo
);
}
infoRequests
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
// 每星期
String
[]
weekdays
=
{
"MONDAY"
,
"TUESDAY"
,
"WEDNESDAY"
,
"THURSDAY"
,
"FRIDAY"
,
"SATURDAY"
,
"SUNDAY"
};
infoRequests
.
put
(
"weekdays"
,
weekdays
);
normalTimeInfoRequests
.
add
(
infoRequests
);
body
.
put
(
"normalTimeInfoRequests"
,
normalTimeInfoRequests
);
// 批量设置可约时间
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
3000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
for
(
int
i
=
0
;
i
<
coachIds
.
size
();
i
++){
JSONArray
personalCoachTime
=
reserveTools
.
getPersonalCoachTime
(
coachIds
.
getString
(
i
),
"normalTimeVOS"
);
// 校验每周重复的可约时间
Assert
.
assertEquals
(
timePeriodInfos
.
toString
(),
personalCoachTime
.
getJSONObject
(
0
).
getJSONArray
(
"timePeriodInfos"
).
toString
(),
"每周重复的可约时间请求结果与实际结果不一样"
);
JSONArray
weekDays
=
new
JSONArray
(
Arrays
.
asList
(
weekdays
));
Assert
.
assertEquals
(
weekDays
.
toString
(),
personalCoachTime
.
getJSONObject
(
0
).
getJSONArray
(
"weekdays"
).
toString
(),
"每周重复的周请求结果与实际结果不一样"
);
}
}
@Test
(
description
=
"将设置的值清空"
,
priority
=
1
)
public
void
testCreateBatchNormalDate_clear
(){
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
JSONArray
normalTimeInfoRequests
=
new
JSONArray
();
body
.
put
(
"normalTimeInfoRequests"
,
normalTimeInfoRequests
);
body
.
put
(
"coachIds"
,
coachIds
);
// 员工id
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
3000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
for
(
int
i
=
0
;
i
<
coachIds
.
size
();
i
++){
JSONArray
personalCoachTime
=
reserveTools
.
getPersonalCoachTime
(
coachIds
.
getString
(
i
),
"normalTimeVOS"
);
// 校验每周重复的可约时间
Assert
.
assertTrue
(
personalCoachTime
.
size
()==
0
,
"清空数据后还能查询到数据"
);
}
}
}
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestCreateBatchSpecialDate.java
0 → 100644
View file @
a19c8b30
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.reserve.ReserveTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-24 15:32
* @Description:批量设置特殊可约时间
* @Version: 1.0
*/
public
class
TestCreateBatchSpecialDate
extends
BaseTestImpl
{
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
JSONArray
coachIds
=
new
JSONArray
();
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_createBatchSpecialDate"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"设置特定日期可约"
)
public
void
testCreateBatchSpecialDate
()
{
// 获取教练列表
JSONObject
pageStudioPersonalCoach
=
reserveTools
.
pageStudioPersonalCoach
(
""
);
int
total
=
pageStudioPersonalCoach
.
getInteger
(
"total"
);
Random
rand
=
new
Random
();
// 随机取两个教练
String
coachedId1
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
coachIds
.
add
(
coachedId1
);
String
coachedId2
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
if
(
coachedId1
.
equals
(
coachedId2
)){
coachedId2
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
9
:
total
-
1
)).
getString
(
"id"
);
}
coachIds
.
add
(
coachedId2
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
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"
,
60
);
timePeriodInfos
.
add
(
timeInfo
);
specialTimeInfoRequest
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
body
.
put
(
"specialTimeInfoRequest"
,
specialTimeInfoRequest
);
body
.
put
(
"coachIds"
,
coachIds
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
5000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 批量设置特殊可约时间后检查个人私教时间是否有这条数据
for
(
int
j
=
0
;
j
<
coachIds
.
size
();
j
++){
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
coachIds
.
getString
(
j
),
"specialTimeVOS"
);
boolean
flag
=
false
;
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++)
{
JSONObject
specialTimeVO
=
specialTimeVOS
.
getJSONObject
(
i
);
if
(
selectedDates
.
getString
(
0
).
equals
(
specialTimeVO
.
getString
(
"dutyDate"
)))
{
flag
=
true
;
// 查询可约类型: 全天休息 -1, 可约时间 1,
Assert
.
assertEquals
(
specialTimeVO
.
getString
(
"dutyType"
),
"1"
,
"特殊日期类型错误"
);
// 查询这条数据的可约时间
Assert
.
assertTrue
(
specialTimeVO
.
getString
(
"timePeriodInfos"
).
equals
(
timePeriodInfos
.
toString
()),
"特殊日期可约时间段"
);
}
}
Assert
.
assertTrue
(
flag
,
"批量设置特殊日期后没有找到相关数据"
);
}
}
@Test
(
description
=
"删除特殊日期"
,
priority
=
1
)
public
void
testDeleteSpecialDate1
()
{
for
(
int
j
=
0
;
j
<
coachIds
.
size
();
j
++){
// 查询特殊可约时间列表
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
coachIds
.
getString
(
j
),
"specialTimeVOS"
);
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
String
id
=
specialTimeVOS
.
getJSONObject
(
i
).
getJSONArray
(
"recordIds"
).
getString
(
0
);
// 删除查询到的特殊可约时间
reserveTools
.
deleteSpecialDate
(
id
);
}
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
coachIds
.
getString
(
j
),
"specialTimeVOS"
);
Assert
.
assertEquals
(
specialTimeVOS
.
size
(),
0
,
"删除特殊日期后,特殊日期列表不为空"
);
}
}
@Test
(
description
=
"设置特定日期全天休息"
,
priority
=
2
)
public
void
testCreateBatchSpecialDate2
()
{
// 获取教练列表
JSONObject
pageStudioPersonalCoach
=
reserveTools
.
pageStudioPersonalCoach
(
""
);
int
total
=
pageStudioPersonalCoach
.
getInteger
(
"total"
);
Random
rand
=
new
Random
();
// 随机取两个教练
String
coachedId1
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
coachIds
.
add
(
coachedId1
);
String
coachedId2
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
10
:
total
)).
getString
(
"id"
);
if
(
coachedId1
.
equals
(
coachedId2
)){
coachedId2
=
pageStudioPersonalCoach
.
getJSONArray
(
"records"
).
getJSONObject
(
rand
.
nextInt
(
total
>
10
?
9
:
total
-
1
)).
getString
(
"id"
);
}
coachIds
.
add
(
coachedId2
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
// 可约时间类型
specialTimeInfoRequest
.
put
(
"dutyType"
,
"OFF_DUTY"
);
// 设置特定日期
JSONArray
selectedDates
=
new
JSONArray
();
selectedDates
.
add
(
TimeUtils
.
getBeforeDayDate
(-
1
));
// 第二天
specialTimeInfoRequest
.
put
(
"selectedDates"
,
selectedDates
);
body
.
put
(
"specialTimeInfoRequest"
,
specialTimeInfoRequest
);
body
.
put
(
"coachIds"
,
coachIds
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 批量设置特殊可约时间后检查个人私教时间是否有这条数据
for
(
int
j
=
0
;
j
<
coachIds
.
size
();
j
++){
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
coachIds
.
getString
(
j
),
"specialTimeVOS"
);
boolean
flag
=
false
;
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
JSONObject
specialTimeVO
=
specialTimeVOS
.
getJSONObject
(
i
);
if
(
selectedDates
.
getString
(
0
).
equals
(
specialTimeVO
.
getString
(
"dutyDate"
))){
flag
=
true
;
// 查询可约类型: 全天休息 -1, 可约时间 1,
Assert
.
assertEquals
(
specialTimeVO
.
getString
(
"dutyType"
),
"-1"
,
"特殊日期类型错误"
);
}
}
Assert
.
assertTrue
(
flag
,
"设置特殊日期全天休息后没有找到相关数据"
);
}
}
@Test
(
description
=
"删除特殊日期"
,
priority
=
3
)
public
void
testDeleteSpecialDate
()
{
for
(
int
j
=
0
;
j
<
coachIds
.
size
();
j
++){
// 查询特殊可约时间列表
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
coachIds
.
getString
(
j
),
"specialTimeVOS"
);
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
String
id
=
specialTimeVOS
.
getJSONObject
(
i
).
getJSONArray
(
"recordIds"
).
getString
(
0
);
// 删除查询到的特殊可约时间
reserveTools
.
deleteSpecialDate
(
id
);
}
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
coachIds
.
getString
(
j
),
"specialTimeVOS"
);
Assert
.
assertEquals
(
specialTimeVOS
.
size
(),
0
,
"删除特殊日期后,特殊日期列表不为空"
);
}
}
}
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestCreateNormalDate.java
0 → 100644
View file @
a19c8b30
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.reserve.ReserveTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.Arrays
;
import
java.util.Collections
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.reserve
* @Author: xuyamei
* @CreateTime: 2024-07-08 14:47
* @Description: 设置常规可约时间
* @Version: 1.0
*/
public
class
TestCreateNormalDate
extends
BaseTestImpl
{
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_createNormalDate"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"设置周一至周日 统一一个时间点"
)
public
void
testCreateNormalDate
(){
// 设置可约时间
JSONArray
normalTimeInfoRequests
=
new
JSONArray
();
JSONObject
infoRequests
=
new
JSONObject
();
JSONArray
timePeriodInfos
=
new
JSONArray
();
// 三个时段 5:00-12:00 12:00-18:00 18:00-23:00
int
[]
minuteOffset
=
{
300
,
720
,
1080
};
int
[]
spanMinutes
=
{
420
,
360
,
300
};
for
(
int
i
=
0
;
i
<
3
;
i
++){
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
minuteOffset
[
i
]);
timeInfo
.
put
(
"spanMinutes"
,
spanMinutes
[
i
]);
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
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
normalTimeInfoRequests
);
JSONArray
personalCoachTime
=
reserveTools
.
getPersonalCoachTime
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"normalTimeVOS"
);
// 校验每周重复的可约时间
Assert
.
assertEquals
(
timePeriodInfos
.
toString
(),
personalCoachTime
.
getJSONObject
(
0
).
getJSONArray
(
"timePeriodInfos"
).
toString
(),
"每周重复的可约时间请求结果与实际结果不一样"
);
JSONArray
weekDays
=
new
JSONArray
(
Arrays
.
asList
(
weekdays
));
Assert
.
assertEquals
(
weekDays
.
toString
(),
personalCoachTime
.
getJSONObject
(
0
).
getJSONArray
(
"weekdays"
).
toString
(),
"每周重复的周请求结果与实际结果不一样"
);
}
@Test
(
description
=
"周一至周日分开设置 "
)
public
void
testCreateNormalDate1
(){
// 设置可约时间
JSONArray
normalTimeInfoRequests
=
new
JSONArray
();
String
[]
weekdays
=
{
"MONDAY"
,
"TUESDAY"
,
"WEDNESDAY"
,
"THURSDAY"
,
"FRIDAY"
,
"SATURDAY"
,
"SUNDAY"
};
for
(
int
j
=
0
;
j
<
weekdays
.
length
;
j
++){
JSONObject
infoRequests
=
new
JSONObject
();
JSONArray
timePeriodInfos
=
new
JSONArray
();
// 三个时段 5:00-12:00 12:00-18:00 18:00-23:00
int
[]
minuteOffset
=
{
300
,
720
,
1080
};
int
[]
spanMinutes
=
{
420
,
360
,
300
};
for
(
int
i
=
0
;
i
<
3
;
i
++){
JSONObject
timeInfo
=
new
JSONObject
();
timeInfo
.
put
(
"minuteOffset"
,
minuteOffset
[
i
]);
timeInfo
.
put
(
"spanMinutes"
,
spanMinutes
[
i
]);
timePeriodInfos
.
add
(
timeInfo
);
}
infoRequests
.
put
(
"timePeriodInfos"
,
timePeriodInfos
);
JSONArray
arr
=
new
JSONArray
();
arr
.
add
(
weekdays
[
j
]);
// 每星期
infoRequests
.
put
(
"weekdays"
,
arr
);
normalTimeInfoRequests
.
add
(
infoRequests
);
}
// 设置常规可约时间
reserveTools
.
createNormalDate
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
normalTimeInfoRequests
);
JSONArray
personalCoachTime
=
reserveTools
.
getPersonalCoachTime
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"normalTimeVOS"
);
for
(
int
i
=
0
;
i
<
personalCoachTime
.
size
();
i
++){
// 校验每周重复的可约时间
Assert
.
assertEquals
(
normalTimeInfoRequests
.
getJSONObject
(
i
).
getJSONArray
(
"timePeriodInfos"
).
toString
(),
personalCoachTime
.
getJSONObject
(
i
).
getJSONArray
(
"timePeriodInfos"
).
toString
(),
"每周重复的可约时间请求结果与实际结果不一样"
);
Assert
.
assertEquals
(
normalTimeInfoRequests
.
getJSONObject
(
i
).
getJSONArray
(
"weekdays"
).
toString
(),
personalCoachTime
.
getJSONObject
(
i
).
getJSONArray
(
"weekdays"
).
toString
(),
"每周重复的周请求结果与实际结果不一样"
);
}
}
}
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestCreateSpecialDate.java
0 → 100644
View file @
a19c8b30
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.reserve.ReserveTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.course
* @Author: xuyamei
* @CreateTime: 2024-04-25 11:43
* @Description: 创建特定日期可约
* @Version: 1.0
*/
public
class
TestCreateSpecialDate
extends
BaseTestImpl
{
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_createSpecialDate"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"设置全天休息"
)
public
void
testCreateSpecialDate_OFF
()
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"coachId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
// 可约时间类型
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
specialTimeInfoRequest
.
put
(
"dutyType"
,
"OFF_DUTY"
);
// 全天休息
// 设置特定日期
JSONArray
specialTimeInfoRequestArray
=
new
JSONArray
();
specialTimeInfoRequestArray
.
add
(
TimeUtils
.
getTodayTime
());
specialTimeInfoRequest
.
put
(
"selectedDates"
,
specialTimeInfoRequestArray
);
body
.
put
(
"specialTimeInfoRequest"
,
specialTimeInfoRequest
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
5000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 设置全天休息完成后检查个人时间是否有这条数据
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"specialTimeVOS"
);
boolean
flag
=
false
;
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
JSONObject
specialTimeVO
=
specialTimeVOS
.
getJSONObject
(
i
);
if
(
specialTimeInfoRequestArray
.
getString
(
0
).
equals
(
specialTimeVO
.
getString
(
"dutyDate"
))){
flag
=
true
;
Assert
.
assertEquals
(
specialTimeVO
.
getString
(
"dutyType"
),
"-1"
,
"特殊日期类型错误"
);
}
}
Assert
.
assertTrue
(
flag
,
"设置特殊日期全天休息后没有找到相关数据"
);
}
@Test
(
description
=
"设置特定日期可约"
,
priority
=
1
)
public
void
testCreateSpecialDate_ON
()
{
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
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"ON_DUTY"
,
specialTimeInfoRequest
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 设置特殊可约时间后检查个人私教时间是否有这条数据
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"specialTimeVOS"
);
boolean
flag
=
false
;
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
JSONObject
specialTimeVO
=
specialTimeVOS
.
getJSONObject
(
i
);
if
(
selectedDates
.
getString
(
0
).
equals
(
specialTimeVO
.
getString
(
"dutyDate"
))){
flag
=
true
;
Assert
.
assertEquals
(
specialTimeVO
.
getString
(
"dutyType"
),
"1"
,
"特殊日期类型错误"
);
Assert
.
assertTrue
(
specialTimeVO
.
getString
(
"timePeriodInfos"
).
equals
(
timePeriodInfos
.
toString
()),
"特殊日期可约时间段"
);
}
}
Assert
.
assertTrue
(
flag
,
"设置特殊日期后没有找到相关数据"
);
}
@Test
(
description
=
"删除特殊日期"
,
priority
=
2
)
public
void
testDeleteSpecialDate
()
{
// 查询特殊可约时间列表
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"specialTimeVOS"
);
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
String
id
=
specialTimeVOS
.
getJSONObject
(
i
).
getJSONArray
(
"recordIds"
).
getString
(
0
);
// 删除查询到的特殊可约时间
reserveTools
.
deleteSpecialDate
(
id
);
}
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"specialTimeVOS"
);
Assert
.
assertEquals
(
specialTimeVOS
.
size
(),
0
,
"删除特殊日期后,特殊日期列表不为空"
);
}
}
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestGetCoachHistorySpecialDate.java
0 → 100644
View file @
a19c8b30
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.reserve.ReserveTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-24 16:18
* @Description: 获取教练的历史特殊日期
* @Version: 1.0
*/
public
class
TestGetCoachHistorySpecialDate
extends
BaseTestImpl
{
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
private
String
coachedId
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_getCoachHistorySpecialDate"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
(
description
=
"设置全天休息-->获取时间"
)
public
void
testGetCoachHistorySpecialDate
()
{
// 获取教练列表
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"
);
// 获取教练后先清除特殊日期数据。避免重叠
// 查询特殊可约时间列表
JSONArray
specialTimeVOS
=
reserveTools
.
getCoachHistorySpecialDate
(
coachedId
);
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
String
id
=
specialTimeVOS
.
getJSONObject
(
i
).
getJSONArray
(
"recordIds"
).
getString
(
0
);
// 删除查询到的特殊可约时间
reserveTools
.
deleteSpecialDate
(
id
);
}
Long
date
=
TimeUtils
.
getBeforeDayDate
(
1
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"coachId"
,
coachedId
);
// 可约时间类型
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
specialTimeInfoRequest
.
put
(
"dutyType"
,
"OFF_DUTY"
);
// 全天休息
// 设置特定日期
JSONArray
specialTimeInfoRequestArray
=
new
JSONArray
();
specialTimeInfoRequestArray
.
add
(
date
);
specialTimeInfoRequest
.
put
(
"selectedDates"
,
specialTimeInfoRequestArray
);
body
.
put
(
"specialTimeInfoRequest"
,
specialTimeInfoRequest
);
reserveTools
.
createSpecialDate
(
coachedId
,
"OFF_DUTY"
,
specialTimeInfoRequest
);
// 设置全天休息完成后检查个人时间是否有这条数据
specialTimeVOS
=
reserveTools
.
getCoachHistorySpecialDate
(
coachedId
);
boolean
flag
=
false
;
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
JSONObject
specialTimeVO
=
specialTimeVOS
.
getJSONObject
(
i
);
if
(
date
.
toString
().
equals
(
specialTimeVO
.
getString
(
"dutyDate"
))){
flag
=
true
;
Assert
.
assertEquals
(
specialTimeVO
.
getString
(
"dutyType"
),
"-1"
,
"特殊日期类型错误"
);
}
}
Assert
.
assertTrue
(
flag
,
"设置特殊日期全天休息后在历史特定日期可约时间列表没有找到相关数据"
);
}
@Test
(
description
=
"删除特殊日期"
,
priority
=
1
)
public
void
testDeleteSpecialDate
()
{
// 查询特殊可约时间列表
JSONArray
specialTimeVOS
=
reserveTools
.
getCoachHistorySpecialDate
(
coachedId
);
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
String
id
=
specialTimeVOS
.
getJSONObject
(
i
).
getJSONArray
(
"recordIds"
).
getString
(
0
);
// 删除查询到的特殊可约时间
reserveTools
.
deleteSpecialDate
(
id
);
}
specialTimeVOS
=
reserveTools
.
getCoachHistorySpecialDate
(
coachedId
);
Assert
.
assertEquals
(
specialTimeVOS
.
size
(),
0
,
"删除特殊日期后,特殊日期列表不为空"
);
}
@Test
(
description
=
"设置特定日期可约"
,
priority
=
2
)
public
void
testCreateSpecialDate_ON
()
{
Long
date
=
TimeUtils
.
getBeforeDayDate
(
2
);
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
// 可约时间类型
specialTimeInfoRequest
.
put
(
"dutyType"
,
"ON_DUTY"
);
// 设置特定日期
JSONArray
selectedDates
=
new
JSONArray
();
selectedDates
.
add
(
date
);
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
specialTimeVOS
=
reserveTools
.
getCoachHistorySpecialDate
(
coachedId
);
boolean
flag
=
false
;
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
JSONObject
specialTimeVO
=
specialTimeVOS
.
getJSONObject
(
i
);
if
(
selectedDates
.
getString
(
0
).
equals
(
specialTimeVO
.
getString
(
"dutyDate"
))){
flag
=
true
;
Assert
.
assertEquals
(
specialTimeVO
.
getString
(
"dutyType"
),
"1"
,
"特殊日期类型错误"
);
Assert
.
assertTrue
(
specialTimeVO
.
getString
(
"timePeriodInfos"
).
equals
(
timePeriodInfos
.
toString
()),
"特殊日期可约时间段"
);
}
}
Assert
.
assertTrue
(
flag
,
"设置特殊日期在历史特定日期可约时间列表没有找到相关数据"
);
}
@Test
(
description
=
"删除特殊日期"
,
priority
=
3
)
public
void
testDeleteSpecialDate2
()
{
// 查询特殊可约时间列表
JSONArray
specialTimeVOS
=
reserveTools
.
getCoachHistorySpecialDate
(
coachedId
);
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
String
id
=
specialTimeVOS
.
getJSONObject
(
i
).
getJSONArray
(
"recordIds"
).
getString
(
0
);
// 删除查询到的特殊可约时间
reserveTools
.
deleteSpecialDate
(
id
);
}
specialTimeVOS
=
reserveTools
.
getCoachHistorySpecialDate
(
coachedId
);
Assert
.
assertEquals
(
specialTimeVOS
.
size
(),
0
,
"删除特殊日期后,特殊日期列表不为空"
);
}
}
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestGetPersonalTimeBlocks.java
0 → 100644
View file @
a19c8b30
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.course.CourseTools
;
import
com.xiaomai.cases.polar.reserve.ReserveTools
;
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.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.Random
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-24 17:20
* @Description: 获取私教课程的可约时间块
* @Version: 1.0
*/
public
class
TestGetPersonalTimeBlocks
extends
BaseTestImpl
{
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@Resource
(
name
=
"courseTools"
)
CourseTools
courseTools
;
@Resource
(
name
=
"courseCategoryTools"
)
CourseCategoryTools
courseCategoryTools
;
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_getPersonalTimeBlocks"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
private
String
coachedId
;
private
String
courseId
;
@Test
public
void
TestGetPersonalTimeBlocks
()
{
// 获取到员工
// 获取教练列表
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"
);
// 获取到相关私教课程
// 获取课程分类
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"私教课分类"
+
TimeUtils
.
getCurrentTime
());
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
);
// 编辑私教课程教练添加到课程中
courseTools
.
editPersonalCourse
(
categoryId
,
courseId
,
courseName
,
1
,
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
);
// 检查可约时间块
JSONArray
personalTimeBlocks
=
reserveTools
.
getPersonalTimeBlocks
(
coachedId
,
courseId
,
TimeUtils
.
getTodayTime
());
Assert
.
assertTrue
(
personalTimeBlocks
.
size
()>
0
,
"设置老师今天时间可约,但是返回的结果是空的"
);
}
@Test
(
priority
=
1
)
public
void
TestGetPersonalTimeBlocks_OFF
()
{
// 创建私教特殊可约时间为休息
JSONObject
specialTimeInfoRequest
=
new
JSONObject
();
// 可约时间类型
specialTimeInfoRequest
.
put
(
"dutyType"
,
"OFF_DUTY"
);
// 设置特定日期
JSONArray
selectedDates
=
new
JSONArray
();
selectedDates
.
add
(
TimeUtils
.
getTodayTime
());
specialTimeInfoRequest
.
put
(
"selectedDates"
,
selectedDates
);
// 设置特殊可约时间
reserveTools
.
createSpecialDate
(
coachedId
,
"OFF_DUTY"
,
specialTimeInfoRequest
);
// 检查可约时间块
JSONArray
personalTimeBlocks
=
reserveTools
.
getPersonalTimeBlocks
(
coachedId
,
courseId
,
TimeUtils
.
getTodayTime
());
Assert
.
assertTrue
(
personalTimeBlocks
.
size
()==
0
,
"设置老师今天时间休息,但是返回了数据"
);
}
@Test
(
priority
=
2
)
public
void
del
(){
// 查询特殊可约时间列表
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
coachedId
,
"specialTimeVOS"
);
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
String
id
=
specialTimeVOS
.
getJSONObject
(
i
).
getJSONArray
(
"recordIds"
).
getString
(
0
);
// 删除查询到的特殊可约时间
reserveTools
.
deleteSpecialDate
(
id
);
}
}
}
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestModifySpecialDate.java
0 → 100644
View file @
a19c8b30
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.reserve.ReserveTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-24 10:05
* @Description: 修改特定可约时间
* @Version: 1.0
*/
public
class
TestModifySpecialDate
extends
BaseTestImpl
{
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
private
String
id
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_modifySpecialDate"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testModifySpecialDate
(){
Long
date
=
TimeUtils
.
getTodayTime
();
// 先创建特殊可约时间,当天可休息
reserveTools
.
createSpecialDate
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"OFF_DUTY"
,
new
JSONObject
());
// 可约时间段
JSONArray
timePeriodInfos
=
new
JSONArray
();
JSONObject
timePeriodInfo
=
new
JSONObject
();
timePeriodInfo
.
put
(
"minuteOffset"
,
0
);
timePeriodInfo
.
put
(
"spanMinutes"
,
720
);
timePeriodInfos
.
add
(
timePeriodInfo
);
// 修改特殊可约时间
reserveTools
.
modifySpecialDate
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"ON_DUTY"
,
timePeriodInfos
,
date
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 修改特殊可约时间后检查个人私教时间
JSONArray
specialTimeVOS
=
reserveTools
.
getPersonalCoachTime
(
xmAppApi
.
getLoginInfo
().
getAdminId
(),
"specialTimeVOS"
);
boolean
flag
=
false
;
for
(
int
i
=
0
;
i
<
specialTimeVOS
.
size
();
i
++){
JSONObject
specialTimeVO
=
specialTimeVOS
.
getJSONObject
(
i
);
if
(
date
.
toString
().
equals
(
specialTimeVO
.
getString
(
"dutyDate"
))){
flag
=
true
;
id
=
specialTimeVO
.
getJSONArray
(
"recordIds"
).
getString
(
0
);
Assert
.
assertEquals
(
specialTimeVO
.
getString
(
"dutyType"
),
"1"
,
"修改特殊日期类型后查询到全天休息"
);
Assert
.
assertTrue
(
specialTimeVO
.
getString
(
"timePeriodInfos"
).
equals
(
timePeriodInfos
.
toString
()),
"修改特殊日期可约时间段与查询到的数据不一致"
);
}
}
Assert
.
assertTrue
(
flag
,
"特殊日期不存在"
);
}
@Test
(
description
=
"清除数据"
,
priority
=
1
)
public
void
del
(){
reserveTools
.
deleteSpecialDate
(
id
);
}
}
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestReservePerson.java
0 → 100644
View file @
a19c8b30
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.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.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-26 16:25
* @Description: 一对一和一对多私教课预约
* @Version: 1.0
*/
public
class
TestReservePerson
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
String
benefitId
;
private
Long
timestamp
;
private
String
memberId
;
private
String
scheduleId
;
private
String
courseId
;
private
String
coachedId
;
private
String
memberCardId
;
private
String
reserveId
;
JSONArray
member2
=
new
JSONArray
();
JSONArray
member1
=
new
JSONArray
();
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_addPersonalReserve"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
}
@Test
public
void
testReservePerson
(){
// 第一步:查询存量的约课课程
// 查询存量的课程分类
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
);
}
// 第二步:查询存量的学员,如果没有则新建
createMember
(
"私教约课学员佳佳"
);
// 第三步:查询存量的私教教练,并将教练添加到课程中
// 获取到员工
// 获取教练列表
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
();
reserveId
=
reserveTools
.
addPersonalReserve
(
""
,
courseId
,
coachedId
,
memberId
,
benefitId
,
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
;
}
}
}
// 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
(
reserveId
)){
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
[]
{
reserveId
,
benefitId
,
"1"
,
courseId
,
"PERSONAL"
,
timestamp
+
""
,
"SUCCESS"
,
scheduleId
};
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"
,
""
,
coachedId
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
memberId
,
"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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
}
}
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录锁定
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfUsablePurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
reserveId
,
"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
=
1
)
public
void
testReservePerson_cancel
()
{
reserveTools
.
cancelMemberReserve
(
reserveId
,
true
);
try
{
Thread
.
sleep
(
2000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 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
(),
memberId
,
"GROUP_CLASS"
);
for
(
int
i
=
0
;
i
<
getPageByMember
.
size
();
i
++){
if
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
Assert
.
assertEquals
(
getPageByMember
.
getJSONObject
(
i
).
getString
(
"reserveState"
),
"RESERVE_CANCEL"
,
"取消约课状态不是已取消"
);
}
}
// check 3:预约记录列表中已取消
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
courseId
,
"RESERVE_CANCEL"
,
""
,
""
,
timestamp
,
TimeUtils
.
getTodayEndTime
(),
memberId
,
"GROUP_CLASS"
,
""
);;
for
(
int
i
=
0
;
i
<
getPageByStudio
.
size
();
i
++){
if
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
Assert
.
assertEquals
(
getPageByStudio
.
getJSONObject
(
i
).
getString
(
"reserveState"
),
"RESERVE_CANCEL"
,
"取消约课状态不是已取消"
);
}
}
// 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"
};
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
]);
}
}
@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
]);
}
}
/**
* @description:查询学员
* @author: xuyamei
* @date: 2024/7/26 16:41
* @param memberName
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
createMember
(
String
memberName
){
// 查询存量的学员没有则创建学员,
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
));
}
// 查询权益
benefitId
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
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"
);
}
}
}
src/main/java/com/xiaomai/cases/polar/reserve/personal/TestSignReservePerson.java
0 → 100644
View file @
a19c8b30
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"
);
}
}
}
src/main/java/com/xiaomai/cases/polar/schedule/camp/CampScheduleTools.java
View file @
a19c8b30
...
...
@@ -10,6 +10,7 @@ import com.xiaomai.utils.CommUtil;
import
com.xiaomai.utils.XMBaseTest
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.stereotype.Component
;
import
org.testng.Assert
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
...
...
@@ -74,7 +75,9 @@ public class CampScheduleTools extends XMBaseTest {
body
.
put
(
"assistCoachIds"
,
assistCoachIds
);
//设置助教,可设置为空 new ArrayList<>();
body
.
put
(
"force"
,
force
);
//是否有冲突 true,false
body
.
put
(
"enableCustomerReserve"
,
"NO"
);
//能否用户自己约课,不能
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
...
...
@@ -115,7 +118,9 @@ public class CampScheduleTools extends XMBaseTest {
body
.
put
(
"assistCoachIds"
,
new
ArrayList
<>());
//设置助教,可设置为空 new ArrayList<>();
body
.
put
(
"force"
,
force
);
//是否有冲突 true,false
body
.
put
(
"enableCustomerReserve"
,
"NO"
);
//能否用户自己约课,不能
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
@@ -146,7 +151,9 @@ public class CampScheduleTools extends XMBaseTest {
body.put("coachId", coachId);
}*/
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
@@ -162,7 +169,9 @@ public class CampScheduleTools extends XMBaseTest {
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"force"
,
true
);
//删除学员约课记录
body
.
put
(
"ruleId"
,
ruleId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
@@ -180,6 +189,35 @@ public class CampScheduleTools extends XMBaseTest {
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"startDate"
,
startDate
);
body
.
put
(
"endDate"
,
endDate
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
if
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
))
>
0
)
{
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"timetableGroups"
).
getJSONObject
(
0
).
getJSONArray
(
"timetableList"
);
}
else
{
return
null
;
}
}
/**
* @description: 查询训练营排课课表
* @author: xuyamei
* @date: 2024/7/31 10:48
* @param startDate 开始日期
* @param endDate 结束日期
* @param campId :训练营活动id
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getCampScheduleTable
(
Long
startDate
,
Long
endDate
,
String
campId
)
{
setUP
(
"API_getCampScheduleTable"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"startDate"
,
startDate
);
body
.
put
(
"endDate"
,
endDate
);
body
.
put
(
"campId"
,
campId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
if
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
))
>
0
)
{
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"timetableGroups"
).
getJSONObject
(
0
).
getJSONArray
(
"timetableList"
);
...
...
@@ -205,7 +243,9 @@ public class CampScheduleTools extends XMBaseTest {
body
.
put
(
"startDate"
,
startDate
);
body
.
put
(
"endDate"
,
endDate
);
body
.
put
(
"weekdays"
,
weekdaysList
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
return
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
));
}
...
...
@@ -220,7 +260,9 @@ public class CampScheduleTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
ruldId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
@@ -235,7 +277,9 @@ public class CampScheduleTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
scheduleId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
...
...
@@ -251,7 +295,9 @@ public class CampScheduleTools extends XMBaseTest {
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"applyRestRule"
,
applyRestRule
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
...
...
@@ -277,6 +323,52 @@ public class CampScheduleTools extends XMBaseTest {
}
/**
* 选择匹配到对应规则ID的课次
* @param n
* @param ruldId
* @return
*/
/* public Set<String> getCampTableDate(int n,String ruldId) {
//查看下周训练营课表
getCampScheduleTable(CommUtil.oneKeyGetNextWeekStartDay(), CommUtil.oneKeyGetNextWeekEndDay());
String date = CommUtil.oneKeyGetNextWeekXDay(n);//下周N 日期时间戳
int count = XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.timetableGroups").size();
if (count > 0) {
JSONArray array = XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.timetableGroups");
Set<String> scheduleIds = array.toJavaList(JSONObject.class).stream()
.filter(e -> e.getString("date").equals(date))//过滤出日期等于下周N的数据
.flatMap(e -> e.getJSONArray("timetableList").toJavaList(JSONObject.class).stream())//对过滤出的数据再次取目标数据重新组合成一个新的数据流
.filter(e -> null != e.getString("ruleId"))
.filter(e ->e.getString("ruleId").equals(ruldId))
.map(e -> e.getString("scheduleId"))//获取scheduleId
.collect(Collectors.toSet());
return scheduleIds; //如果当天没排课,则scheduleIds.size()==0
}
return null;
}*/
public
String
getCampTableDate
(
int
n
,
String
ruldId
)
{
//查看下周训练营课表
getCampScheduleTable
(
CommUtil
.
oneKeyGetNextWeekStartDay
(),
CommUtil
.
oneKeyGetNextWeekEndDay
());
String
date
=
CommUtil
.
oneKeyGetNextWeekXDay
(
n
);
//下周N 日期时间戳
int
count
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
).
size
();
if
(
count
>
0
)
{
JSONArray
array
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
);
String
scheduleId
=
array
.
toJavaList
(
JSONObject
.
class
).
stream
()
.
filter
(
e
->
e
.
getString
(
"date"
).
equals
(
date
))
//过滤出日期等于下周N的数据
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
//对过滤出的数据再次取目标数据重新组合成一个新的数据流
.
filter
(
e
->
null
!=
e
.
getString
(
"ruleId"
))
.
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
))
.
map
(
e
->
e
.
getString
(
"scheduleId"
))
//获取scheduleId
.
findFirst
().
orElse
(
""
);
return
scheduleId
;
//如果当天没排课,
}
return
""
;
}
...
...
src/main/java/com/xiaomai/cases/polar/schedule/camp/SelectTargetTrainingCampAndGetInfo.java
View file @
a19c8b30
...
...
@@ -33,6 +33,7 @@ public class SelectTargetTrainingCampAndGetInfo extends BaseCreateTrainingData {
public
int
traineeUpperLimit
;
public
int
totalClassHour
;
public
String
chiefCoachId
=
""
;
public
Double
price
;
List
<
String
>
assistCoachIds
;
@BeforeClass
...
...
@@ -61,6 +62,7 @@ public class SelectTargetTrainingCampAndGetInfo extends BaseCreateTrainingData {
.
fluentPut
(
"traineeLowerLimit"
,
group
.
getIntValue
(
"traineeLowerLimit"
))
.
fluentPut
(
"traineeUpperLimit"
,
group
.
getIntValue
(
"traineeUpperLimit"
))
.
fluentPut
(
"totalClassHour"
,
group
.
getIntValue
(
"totalClassHour"
))
.
fluentPut
(
"price"
,
group
.
getDouble
(
"price"
))
.
fluentPut
(
"trainerList"
,
group
.
getJSONArray
(
"trainerList"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
map
(
trainers
->
{
return
new
JSONObject
()
...
...
@@ -79,6 +81,7 @@ public class SelectTargetTrainingCampAndGetInfo extends BaseCreateTrainingData {
traineeLowerLimit
=
campInfo
.
get
(
0
).
getIntValue
(
"traineeLowerLimit"
);
traineeUpperLimit
=
campInfo
.
get
(
0
).
getIntValue
(
"traineeUpperLimit"
);
totalClassHour
=
campInfo
.
get
(
0
).
getIntValue
(
"totalClassHour"
);
price
=
campInfo
.
get
(
0
).
getDouble
(
"price"
);
chiefCoachId
=
campInfo
.
get
(
0
).
getJSONArray
(
"trainerList"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
{
return
"杜君丽"
.
equals
(
e
.
getString
(
"nickName"
));
}).
map
(
e
->
e
.
getString
(
"id"
)).
findFirst
().
orElse
(
null
);
...
...
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestCreateCampRuleSchedule.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
camp
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.schedule.group.GroupScheduleTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.After
Class
;
import
org.testng.annotations.After
Test
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
...
...
@@ -30,6 +29,7 @@ public class TestCreateCampRuleSchedule extends SelectTargetTrainingCampAndGetIn
String
ruldId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_createCampRuleSchedule"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -58,14 +58,14 @@ public class TestCreateCampRuleSchedule extends SelectTargetTrainingCampAndGetIn
ruldId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"ruleId"
);
}
@After
Class
(
description
=
"删除此case创建的训练营排课日程和训练营活动"
)
@After
Test
(
description
=
"删除此case创建的训练营排课日程和训练营活动"
)
public
void
delData
()
{
//直接删除训练营会的,对应的排课日程会被自动删除,校验其他case中已有
if
(
null
!=
campId
||!
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
campId
);
if
(
null
!=
this
.
campId
||!
this
.
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
this
.
campId
);
}
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestDelC
ampScheduleItem
.java
→
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestDelC
urrentAndSubsequentCampSchedule
.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
camp
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
...
...
@@ -8,32 +9,31 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.After
Class
;
import
org.testng.annotations.After
Test
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Set
;
/**
* 删除训练营课次(单个/当前及后续)
* @author adu
* data 2024/
7/12 17:05
* data 2024/
8/1 11:16
*/
public
class
TestDelC
ampScheduleItem
extends
SelectTargetTrainingCampAndGetInfo
{
public
class
TestDelC
urrentAndSubsequentCampSchedule
extends
SelectTargetTrainingCampAndGetInfo
{
@Resource
(
name
=
"campScheduleTools"
)
CampScheduleTools
campScheduleTools
;
String
campId
=
""
;
String
chiefCoachId
=
""
;
String
ruldId
=
""
;
int
loopNum
=
0
;
int
loopNum
=
0
;
String
[]
weekDaysArray
=
{
"TUESDAY"
,
"THURSDAY"
,
"SATURDAY"
,
"SUNDAY"
};
List
<
String
>
weekdaysList
=
Arrays
.
asList
(
weekDaysArray
);
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_delCampScheduleItem"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -54,73 +54,58 @@ public class TestDelCampScheduleItem extends SelectTargetTrainingCampAndGetInfo{
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
1
,
"排课创建成功后,日程中没查询到对应数据"
);
ruldId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"ruleId"
);
}
@Test
(
description
=
"删除当前课次"
)
public
void
testDelCurrentCampScheduleItem
(){
//获取下周日课次ID
Set
<
String
>
scheduleIds7
=
campScheduleTools
.
getCampTableDate
(
13
);
if
(
scheduleIds7
.
size
()
!=
0
&&
scheduleIds7
!=
null
){
//删除下周日所有的课次
scheduleIds7
.
stream
().
forEach
(
scheduleId
->
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
false
);
body
.
put
(
"scheduleId"
,
scheduleId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
});
//删除成功后check 下周日课表是否有数据
String
startDate
=
CommUtil
.
oneKeyGetNextWeekXDay
(
13
);
//下周日00点时间
String
endDate
=
CommUtil
.
oneKeyGetNextWeekEndXDay
(
7
);
//下周日23:59
campScheduleTools
.
getCampScheduleTable
(
startDate
,
endDate
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
),
"0"
);
}
}
@Test
(
description
=
"删除当前及后续课次"
,
priority
=
1
)
@Test
(
description
=
"删除当前及后续课次"
)
public
void
testDelCurrentAndSubsequentCampSchedule
()
{
//获取下周六课次ID
Set
<
String
>
scheduleIds6
=
campScheduleTools
.
getCampTableDate
(
12
);
if
(
scheduleIds6
.
size
()
!=
0
&&
scheduleIds6
!=
null
){
//删除下周日所有的课次
scheduleIds6
.
stream
().
forEach
(
scheduleId
->
{
String
scheduleIds6
=
campScheduleTools
.
getCampTableDate
(
12
,
ruldId
);
if
(!
StringUtils
.
isEmpty
(
scheduleIds6
))
{
//删除下周六即后续所有的课次
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
true
);
body
.
put
(
"scheduleId"
,
scheduleId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
});
body
.
put
(
"scheduleId"
,
scheduleIds6
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//删除成功后check从下周六到排课结束日期课表是否有数据
String
startDate
=
CommUtil
.
oneKeyGetNextWeekXDay
(
12
);
//下周六00点时间
campScheduleTools
.
getCampScheduleTable
(
startDate
,
super
.
openEndDate
);
if
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
))
>
0
)
{
Long
goalCount
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
//对过滤出的数据再次取目标数据重新组合成一个新的数据流
.
filter
(
e
->
null
!=
e
.
getString
(
"ruleId"
))
.
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
)).
count
();
Assert
.
assertTrue
(
goalCount
==
0
,
"删除当前课次后,再去课表中查看,后端仍然返回数据"
);
}
else
{
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
),
"0"
);
}
//删除成功后,check对应训练营活动的已排课次数是否同步变更
int
delLoopNum
=
campScheduleTools
.
queryExpectedLoopNum
(
startDate
,
super
.
openEndDate
,
weekdaysList
);
int
delLoopNum
=
campScheduleTools
.
queryExpectedLoopNum
(
startDate
,
super
.
openEndDate
,
weekdaysList
);
//查看日程,获取原规则中展示的训练营已排课课次数,原来已排课课次数-删除的已排课课次数
campScheduleTools
.
getCampRuleScheduleDetail
(
ruldId
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONObjectByReadPath
(
dataApi
.
getApi_response
(),
"$.result.campVO"
).
getIntValue
(
"scheduleClassHour"
)==(
loopNum
-
delLoopNum
));
Assert
.
assertTrue
(
XMJSONPath
.
getJSONObjectByReadPath
(
dataApi
.
getApi_response
(),
"$.result.campVO"
).
getIntValue
(
"scheduleClassHour"
)
==
(
loopNum
-
delLoopNum
));
}
}
@After
Class
(
description
=
"删除此case创建的训练营排课日程"
)
@After
Test
(
description
=
"删除此case创建的训练营排课日程"
)
public
void
delData
()
{
//先删除规则,再操作删除对应的训练营活动,此处顺序不能换,如果先删除训练营活动,对应的排课会自动删除,所以就不用删除排课日程了,这个场景其他case中会体现
if
(
null
!=
ruldId
||
!
ruldId
.
isEmpty
())
{
if
(
null
!=
ruldId
||
!
ruldId
.
isEmpty
())
{
campScheduleTools
.
delCampRuleSchedule
(
ruldId
);
//删除日程后check 日程列表数据是否还能搜索到,期望搜索结果数据为空
campScheduleTools
.
getCampRuleScheduleList
(
campId
,
super
.
courseId
,
""
);
campScheduleTools
.
getCampRuleScheduleList
(
campId
,
super
.
courseId
,
""
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
0
,
"日程被删除后,对应的排课日程列表还可以查到相关数据"
);
}
if
(
null
!=
campId
||
!
campId
.
isEmpty
())
{
if
(
null
!=
campId
||
!
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
campId
);
}
...
...
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestDelCurrentCampScheduleItem.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
camp
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONObject
;
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.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterTest
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.Arrays
;
import
java.util.List
;
/**
* 删除训练营课次(单个/当前及后续)
*
* @author adu
* data 2024/7/12 17:05
*/
public
class
TestDelCurrentCampScheduleItem
extends
SelectTargetTrainingCampAndGetInfo
{
@Resource
(
name
=
"campScheduleTools"
)
CampScheduleTools
campScheduleTools
;
String
campId
=
""
;
String
chiefCoachId
=
""
;
String
ruldId
=
""
;
int
loopNum
=
0
;
String
[]
weekDaysArray
=
{
"TUESDAY"
,
"THURSDAY"
,
"SATURDAY"
,
"SUNDAY"
};
List
<
String
>
weekdaysList
=
Arrays
.
asList
(
weekDaysArray
);
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_delCampScheduleItem"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
// 获取选择的训练营ID
campId
=
super
.
campId
;
//1.2获取训练营活动的指定教练ID
chiefCoachId
=
super
.
chiefCoachId
;
//获取目标时间段内 最大有效课时数
loopNum
=
campScheduleTools
.
queryExpectedLoopNum
(
CommUtil
.
oneKeyGetAddDay
(
3
),
super
.
openEndDate
,
weekdaysList
);
//创建训练营排课:按次数 星期:2,4,6,7
campScheduleTools
.
oneKeyCreateCampRuleSchedule
(
campId
,
chiefCoachId
,
super
.
courseId
,
super
.
traineeLowerLimit
,
super
.
traineeUpperLimit
,
"1140"
,
super
.
openEndDate
,
true
,
String
.
valueOf
(
loopNum
));
//查询排课日程:根据训练营和关联课程查询
campScheduleTools
.
getCampRuleScheduleList
(
campId
,
super
.
courseId
,
""
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
1
,
"排课创建成功后,日程中没查询到对应数据"
);
ruldId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"ruleId"
);
}
@Test
(
description
=
"删除当前课次"
)
public
void
testDelCurrentCampScheduleItem
()
{
//获取下周日课次ID(只删除匹配到ruldId的课次)
String
scheduleId7
=
campScheduleTools
.
getCampTableDate
(
13
,
ruldId
);
if
(!
StringUtils
.
isEmpty
(
scheduleId7
))
{
//删除本次规则创建的下周日所有的课次
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
false
);
body
.
put
(
"scheduleId"
,
scheduleId7
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//删除成功后check 下周日课表是否包含删除的课次
String
startDate
=
CommUtil
.
oneKeyGetNextWeekXDay
(
13
);
//下周日00点时间
String
endDate
=
CommUtil
.
oneKeyGetNextWeekEndXDay
(
7
);
//下周日23:59
campScheduleTools
.
getCampScheduleTable
(
startDate
,
endDate
);
Long
goalCount
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
//对过滤出的数据再次取目标数据重新组合成一个新的数据流
.
filter
(
e
->
null
!=
e
.
getString
(
"ruleId"
))
.
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
))
.
map
(
e
->
e
.
getString
(
"scheduleId"
)).
count
();
//获取scheduleId 的数量
Assert
.
assertTrue
(
goalCount
==
0
,
"删除当前课次后,再去课表中查看,后端仍然返回数据"
);
}
}
@AfterTest
(
description
=
"删除此case创建的训练营排课日程"
)
public
void
delData
()
{
//先删除规则,再操作删除对应的训练营活动,此处顺序不能换,如果先删除训练营活动,对应的排课会自动删除,所以就不用删除排课日程了,这个场景其他case中会体现
if
(
null
!=
ruldId
||
!
ruldId
.
isEmpty
())
{
campScheduleTools
.
delCampRuleSchedule
(
ruldId
);
//删除日程后check 日程列表数据是否还能搜索到,期望搜索结果数据为空
campScheduleTools
.
getCampRuleScheduleList
(
campId
,
super
.
courseId
,
""
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
0
,
"日程被删除后,对应的排课日程列表还可以查到相关数据"
);
}
if
(
null
!=
campId
||
!
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
campId
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestEditCampRuleSchedule.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
camp
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.reserve.ReserveTools
;
import
com.xiaomai.cases.polar.schedule.group.GroupScheduleTools
;
import
com.xiaomai.cases.polar.training.TrainingTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
...
...
@@ -9,7 +14,7 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.After
Class
;
import
org.testng.annotations.After
Test
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
...
...
@@ -30,18 +35,31 @@ public class TestEditCampRuleSchedule extends SelectTargetTrainingCampAndGetInfo
GroupScheduleTools
groupScheduleTools
;
@Resource
(
name
=
"campScheduleTools"
)
CampScheduleTools
campScheduleTools
;
@Resource
(
name
=
"tools"
)
Tools
tools
;
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
String
campId
=
""
;
String
chiefCoachId
=
""
;
String
ruldId
=
""
;
String
memberId
=
""
;
String
orderId
=
""
;
String
phone
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_editCampRuleSchedule"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"编辑训练营排课规则"
)
public
void
testEditCampRuleSchedule
()
{
public
void
testEditCampRuleSchedule
()
throws
InterruptedException
{
//获取选择的训练营ID
campId
=
super
.
campId
;
//获取训练营活动的指定教练ID
...
...
@@ -62,6 +80,25 @@ public class TestEditCampRuleSchedule extends SelectTargetTrainingCampAndGetInfo
ruldId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"ruleId"
);
int
scheduleClassHourBefore
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getJSONObject
(
"campVO"
).
getIntValue
(
"scheduleClassHour"
);
//创建排课后,学员报名关联的训练营活动
//搜索目标会员
phone
=
"15658063769"
;
memberId
=
trainingTools
.
searchTargerMember
(
phone
);
if
(
memberId
.
isEmpty
())
{
memberId
=
tools
.
create
(
"晨晨爸爸"
,
phone
).
getString
(
"result"
);
}
//给会员报名
trainingTools
.
doSignCampOrder
(
memberId
,
this
.
price
,
this
.
campId
,
""
);
orderId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
Thread
.
sleep
(
2000
);
//check 预约记录(训练营预约记录,根据训练营活动筛选)
JSONArray
reserverList
=
reserveTools
.
getPageByStudio
(
""
,
""
,
""
,
""
,
null
,
null
,
""
,
"TRAINING_CAMP"
,
campId
);
//check 学员报名后生成的预约记录数量
Assert
.
assertTrue
(
reserverList
.
size
()==
scheduleClassHourBefore
,
"排课后再报名训练营活动,生成课次的预约记录数量对不上"
);
//下面要操作缩短结束日期,check
String
[]
weekDaysArray
=
{
"TUESDAY"
,
"THURSDAY"
,
"SATURDAY"
,
"SUNDAY"
};
List
<
String
>
weekdaysList
=
Arrays
.
asList
(
weekDaysArray
);
...
...
@@ -87,26 +124,60 @@ public class TestEditCampRuleSchedule extends SelectTargetTrainingCampAndGetInfo
body
.
put
(
"endDate"
,
CommUtil
.
getNDayEndTimeTamp
(
22
));
//结束日期缩短了20天,
body
.
put
(
"force"
,
true
);
body
.
put
(
"retainBooking"
,
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//查询训练营日程详情,check修改项是否被同步修改
campScheduleTools
.
getCampRuleScheduleDetail
(
ruldId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.chiefCoachId"
),
chiefCoachId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.endDate"
).
substring
(
0
,
9
),
CommUtil
.
getNDayEndTimeTamp
(
22
).
substring
(
0
,
9
));
//
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.endDate").substring(0, 9), CommUtil.getNDayEndTimeTamp(22).substring(0, 9));
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.venueAreaIds"
).
containsAll
(
venueAreaIds
),
"场地有空改为有数据后,查看日程详情发现数据没变更"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.assistCoachIds"
).
containsAll
(
assistTrainer
),
"助教有空改为有数据后,查看日程详情发现数据没变更"
);
Assert
.
assertEquals
(
XMJSONPath
.
getJSONObjectByReadPath
(
dataApi
.
getApi_response
(),
"$.result.campVO"
).
getIntValue
(
"totalClassHour"
),
super
.
totalClassHour
,
"总课时数有问题"
);
int
scheduleClassHourAfter
=
XMJSONPath
.
getJSONObjectByReadPath
(
dataApi
.
getApi_response
(),
"$.result.campVO"
).
getIntValue
(
"scheduleClassHour"
);
int
scheduleClassHourAfter
=
XMJSONPath
.
getJSONObjectByReadPath
(
dataApi
.
getApi_response
(),
"$.result.campVO"
).
getIntValue
(
"scheduleClassHour"
);
//校验已排课次数是否同步变更:原排课次数-缩短日期那段时间的次数
Assert
.
assertEquals
(
scheduleClassHourAfter
,
(
scheduleClassHourBefore
-
loopNum
));
//check 编辑日程后(缩短日期)预约记录数量减少check
JSONArray
reserverListAfter
=
reserveTools
.
getPageByStudio
(
""
,
""
,
""
,
""
,
null
,
null
,
""
,
"TRAINING_CAMP"
,
campId
);
Assert
.
assertTrue
(
reserverListAfter
.
size
()==
scheduleClassHourAfter
,
"排课后再报名训练营活动,生成课次的预约记录数量对不上"
);
//筛选出符合条件的数据有多少条
// Long count = reserverListAfter.toJavaList(JSONObject.class).stream().filter(e -> e.getString("tenantMemberCardId").equals(campId)).count();
//check 编辑日程后,对应的预约记录是否同步变更
reserverListAfter
.
toJavaList
(
JSONObject
.
class
).
stream
().
forEach
(
object
->
Assert
.
assertTrue
(
object
.
getJSONArray
(
"assistCoachIds"
).
containsAll
(
assistTrainer
)&&
object
.
getJSONArray
(
"areaIds"
).
containsAll
(
venueAreaIds
),
"编辑日程后,预约记录没同步变更"
)
);
//作废学员训练营报名订单
orderTools
.
discard
(
orderId
,
"重复录入"
,
"自动化测试作废训练营订单"
);
//作废订单后,学员之前报名训练营生成的课次预约记录要被删除check
JSONArray
reserverRecords
=
reserveTools
.
getPageByStudio
(
""
,
""
,
""
,
""
,
null
,
null
,
""
,
"TRAINING_CAMP"
,
campId
);
Assert
.
assertTrue
(
reserverRecords
.
size
()==
0
,
"作废学员订单后,训练营课次中对应的预约记录没有被删除哈"
);
}
@After
Class
(
description
=
"删除此case创建的训练营排课日程"
)
@After
Test
(
description
=
"删除此case创建的训练营排课日程"
)
public
void
delData
()
{
if
(
null
!=
campId
||!
campId
.
isEmpty
())
{
if
(
null
!=
ruldId
||
!
ruldId
.
isEmpty
())
{
campScheduleTools
.
delCampRuleSchedule
(
ruldId
);
}
if
(
null
!=
orderId
||
!
orderId
.
isEmpty
())
{
trainingTools
.
fetchUserTrainingCardList
(
memberId
);
if
(!
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"state"
).
equals
(
"DISCARD"
))
{
orderTools
.
discard
(
orderId
,
"重复录入"
,
"自动化测试作废训练营订单"
);
}
}
if
(
null
!=
campId
||
!
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
campId
);
}
}
}
...
...
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestEditC
ampScheduleItem
.java
→
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestEditC
urrentAndSubsequentCampSchedule
.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
camp
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.schedule.group.GroupScheduleTools
;
...
...
@@ -10,7 +11,7 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.After
Class
;
import
org.testng.annotations.After
Test
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
...
...
@@ -25,10 +26,10 @@ import java.util.stream.Collectors;
* data 2024/7/12 17:08
*/
public
class
TestEditC
ampScheduleItem
extends
SelectTargetTrainingCampAndGetInfo
{
public
class
TestEditC
urrentAndSubsequentCampSchedule
extends
SelectTargetTrainingCampAndGetInfo
{
public
static
Date
now
=
new
Date
();
Set
<
String
>
scheduleIdsN
;
//String
scheduleIdsN;
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
@Resource
(
name
=
"campScheduleTools"
)
...
...
@@ -45,10 +46,11 @@ public class TestEditCampScheduleItem extends SelectTargetTrainingCampAndGetInfo
public
int
scheduleClassHourEditBefore
=
0
;
public
int
scheduleClassHourEditAfter
=
0
;
public
List
<
String
>
venueAreaIdsEditAfter
;
//
public List<String> venueAreaIdsEditAfter;
public
Boolean
flag
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_editCampSchedule"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -67,7 +69,7 @@ public class TestEditCampScheduleItem extends SelectTargetTrainingCampAndGetInfo
"1140"
,
super
.
openEndDate
,
true
,
String
.
valueOf
(
loopNum
));
//查询排课日程:根据训练营和关联课程查询
campScheduleTools
.
getCampRuleScheduleList
(
campId
,
super
.
courseId
,
""
);
campScheduleTools
.
getCampRuleScheduleList
(
super
.
campId
,
super
.
courseId
,
""
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
1
,
"排课创建成功后,日程中没查询到对应数据"
);
ruldId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"ruleId"
);
//获取训练营活动已排课课次数
...
...
@@ -75,49 +77,9 @@ public class TestEditCampScheduleItem extends SelectTargetTrainingCampAndGetInfo
}
@Test
(
description
=
"编辑当前课次"
)
public
void
testEditCurrentCampSchedule
()
{
//获取下周日课次ID
scheduleIdsN
=
campScheduleTools
.
getCampTableDate
(
13
);
if
(
scheduleIdsN
.
size
()
!=
0
&&
scheduleIdsN
!=
null
)
{
scheduleIdsN
.
stream
().
forEach
(
scheduleId
->
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
false
);
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"startTime"
,
startStamp
);
//修改上课时间
body
.
put
(
"chiefCoachId"
,
chiefCoachId
);
body
.
put
(
"minMemberNum"
,
super
.
traineeLowerLimit
);
body
.
put
(
"maxMemberNum"
,
super
.
traineeUpperLimit
);
body
.
put
(
"venueAreaIds"
,
new
ArrayList
<>());
body
.
put
(
"assistCoachIds"
,
super
.
assistCoachIds
);
//有空改为有数据2个教练
body
.
put
(
"spanMinutes"
,
50
);
body
.
put
(
"force"
,
true
);
//有冲突时忽略冲突
body
.
put
(
"retainBooking"
,
true
);
//保留学员预约
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//编辑成功后check对应课次详情修改内容是否同步成功
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
String
detailResult
=
dataApi
.
getApi_response
();
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.chiefCoachId"
),
chiefCoachId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.startTime"
),
startStamp
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.assistCoachIds"
).
size
()
==
2
,
"助教修改后添加2个教练没生效"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.venueAreaIds"
).
size
()
==
0
,
"课次创建时场地为空,查看课次详情不为空"
);
});
}
}
@Test
(
description
=
"编辑当前及后续课次"
,
priority
=
1
)
public
void
testEditCurrentAndSubsequentSchedule
()
{
@Test
(
description
=
"编辑当前及后续课次"
)
public
void
testEditCurrentAndSubsequentCampSchedule
()
throws
InterruptedException
{
//获取存量场地
List
<
String
>
venueAreaIds
=
groupScheduleTools
.
getStockArea
(
"流星花园秘密基地"
);
//获取下下周二的课次ID
...
...
@@ -131,27 +93,28 @@ public class TestEditCampScheduleItem extends SelectTargetTrainingCampAndGetInfo
JSONArray
array
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
);
scheduleId22
=
array
.
toJavaList
(
JSONObject
.
class
).
stream
()
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
//对过滤出的数据再次取目标数据重新组合成一个新的数据流
.
filter
(
e
->
null
!=
e
.
getString
(
"ruleId"
))
.
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
))
.
map
(
e
->
e
.
getString
(
"scheduleId"
))
//获取scheduleId
.
collect
(
Collectors
.
toSet
());
if
(
scheduleId22
.
size
()
!=
0
&&
scheduleId22
!=
null
)
{
scheduleId22
.
stream
().
forEach
(
scheduleId
->
{
//删除下下周二的课次
//删除
本次创建的
下下周二的课次
campScheduleTools
.
delCampScheduleItem
(
scheduleId
,
false
);
});
}
}
//获取下周六的课次ID
Set
<
String
>
scheduleIds6
=
campScheduleTools
.
getCampTableDate
(
12
);
if
(
scheduleIds6
.
size
()
!=
0
&&
scheduleIds6
!=
null
)
{
scheduleIds6
.
stream
().
forEach
(
scheduleId
->
{
String
scheduleIds6
=
campScheduleTools
.
getCampTableDate
(
12
,
ruldId
);
if
(!
StringUtils
.
isEmpty
(
scheduleIds6
))
{
//编辑下周六及后续课次
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
true
);
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"scheduleId"
,
scheduleIds6
);
//获取下周六某个时间点的开始时间戳
String
startStamp
=
CommUtil
.
getWholeHourTimeStamp
(
12
,
"19:00"
);
body
.
put
(
"startTime"
,
startStamp
);
//上课时间不做修改
...
...
@@ -163,7 +126,9 @@ public class TestEditCampScheduleItem extends SelectTargetTrainingCampAndGetInfo
body
.
put
(
"spanMinutes"
,
50
);
body
.
put
(
"force"
,
true
);
//有冲突时忽略冲突
body
.
put
(
"retainBooking"
,
true
);
//保留学员预约
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
...
...
@@ -171,14 +136,15 @@ public class TestEditCampScheduleItem extends SelectTargetTrainingCampAndGetInfo
}
//check当前课次信息是否被同步修改
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleIds6
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.startTime"
),
startStamp
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.venueAreaIds"
).
containsAll
(
venueAreaIds
),
"场地有空改为有数据,但是课次详情中显示不正确哦"
);
});
}
//后续检查点check
Thread
.
sleep
(
1000
);
//1.查询排课日程:根据训练营查询,应该对应训练营可以查到2条数据,原日程和修改后生成的日程
campScheduleTools
.
getCampRuleScheduleList
(
campId
,
""
,
""
);
campScheduleTools
.
getCampRuleScheduleList
(
super
.
campId
,
super
.
courseId
,
""
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
2
,
"编辑当前及后续课次成功后,日程中没查询到2条对应数据"
);
//1.1获取到新生成的排课日程ID
//过滤出刚创建的日程
...
...
@@ -197,74 +163,64 @@ public class TestEditCampScheduleItem extends SelectTargetTrainingCampAndGetInfo
}
});
Assert
.
assertTrue
(
flag
==
true
,
"新规则的场地数据为空了"
);
//编辑当前及后续课次后,已排课次数量变更check
Assert
.
assertTrue
(
scheduleClassHourEditBefore
+
1
==
scheduleClassHourEditAfter
,
"编辑当前及后续课次后,训练营已排课次数+1(独立出去的课次 又生成新的一个课次;
之前删除的课次,也生成新的课次了)"
);
//编辑当前及后续课次后,已排课次数量变更check
【独立出去的课次 又生成新的一个课次本次没造该场景】
Assert
.
assertTrue
(
scheduleClassHourEditBefore
==
scheduleClassHourEditAfter
,
"编辑当前及后续课次后,训练营已排课次数不变(
之前删除的课次,也生成新的课次了)"
);
//新日程的开始日期check
Assert
.
assertEquals
(
sDateBefore
,
CommUtil
.
getXStartOfDateNextXWeek
(
5
,
1
),
"新规则的开始日期不对,应该是下周六的时间"
);
Assert
.
assertEquals
(
eDateBefore
.
substring
(
0
,
9
),
super
.
openEndDate
.
substring
(
0
,
9
),
"新规则的结束日期不对"
);
//
Assert.assertEquals(eDateBefore.substring(0, 9), super.openEndDate.substring(0, 9), "新规则的结束日期不对");
//2.断言check:获取下周四的课次,check是否还是原来的数据(不会受到影响)
Set
<
String
>
scheduleIds4
=
campScheduleTools
.
getCampTableDate
(
10
);
if
(
scheduleIds4
.
size
()
!=
0
&&
scheduleIds4
!=
null
)
{
scheduleIds4
.
stream
().
forEach
(
scheduleId
->
{
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
String
scheduleIds4
=
campScheduleTools
.
getCampTableDate
(
10
,
ruldId
);
if
(!
StringUtils
.
isEmpty
(
scheduleIds4
))
{
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleIds4
);
String
detailResult
=
dataApi
.
getApi_response
();
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.assistCoachIds"
).
size
()
==
0
,
"课次创建时助教为空,查看课次详情不为空"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.venueAreaIds"
).
size
()
==
0
,
"课次创建时场地为空,查看课次详情不为空"
);
});
}
// 3.check下周日的课次(以独立出去的课次是否受到影响:不受影响)
if
(
scheduleIdsN
.
size
()
!=
0
&&
scheduleIdsN
!=
null
)
{
scheduleIdsN
.
stream
().
forEach
(
scheduleId
->
{
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
}
//因为编辑单个课次 移除了本类,所以独立出去的课次 再本case中不设计了
/*// 3.check下周日的课次(以独立出去的课次是否受到影响:不受影响)
if (!StringUtils.isEmpty(scheduleIdsN)) {
campScheduleTools.getCampScheduleItemDetail(scheduleIdsN);
String detailResult = dataApi.getApi_response();
Assert.assertEquals(XMJSONPath.readPath(detailResult, "$.result.startTime"), startStamp);
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(detailResult, "$.result.assistCoachIds").size() == 2, "助教修改后添加2个教练没生效");
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(detailResult, "$.result.venueAreaIds").size() == 0, "课次创建时为空,查看课次详情不为空");
});
}
//4.check 下周日是否又生成一条新的课次
Set
<
String
>
scheduleIds77
=
campScheduleTools
.
getCampTableDate
(
13
);
Assert
.
assertTrue
(
scheduleIds77
.
size
()
==
(
scheduleIdsN
.
size
()
+
1
));
scheduleIds77
.
removeAll
(
scheduleIdsN
);
// System.out.println(JSON.toJSONString(scheduleIds77));
if
(
scheduleIds77
.
size
()
!=
0
&&
scheduleIds77
!=
null
)
{
scheduleIds77
.
stream
().
forEach
(
scheduleId
->
{
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.venueAreaIds"
).
containsAll
(
venueAreaIds
),
"场地有空改为有数据,但是课次详情中显示不正确哦"
);
});
}
String scheduleIds77 = campScheduleTools.getCampTableDate(13, newRuldId);
Assert.assertTrue(!StringUtils.isEmpty(scheduleIds77), "下周日没有生成一条新的数据");
campScheduleTools.getCampScheduleItemDetail(scheduleIds77);
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.venueAreaIds").containsAll(venueAreaIds), "场地有空改为有数据,但是课次详情中显示不正确哦");*/
//5.check 下下周二是否生成一条新的课次
campScheduleTools
.
getCampScheduleTable
(
targetStartDate
,
targetendDate
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
))
==
1
,
"课次被删除后,编辑当前及后续,后续删除的课次没重新生成新的课次"
);
}
@AfterClass
(
description
=
"删除此case创建的训练营排课日程"
)
public
void
delData
()
{
/* if (null != ruldId || !ruldId.isEmpty()) {
campScheduleTools.delCampRuleSchedule(ruldId);
}
if (null != newRuldId || !newRuldId.isEmpty()) {
campScheduleTools.delCampRuleSchedule(newRuldId);
}*/
List
<
String
>
ruleIdIds22
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
filter
(
e
->
e
.
getString
(
"date"
).
equals
(
targetStartDate
))
//过滤出日期等于下周日的数据
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
//对过滤出的数据再次取目标数据重新组合成一个新的数据流
.
filter
(
e
->
null
!=
e
.
getString
(
"ruleId"
))
.
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
newRuldId
))
.
map
(
e
->
e
.
getString
(
"ruleId"
))
//获取ruleId
.
collect
(
Collectors
.
toList
());
if
(
null
!=
campId
||
!
campId
.
isEmpty
())
{
Assert
.
assertTrue
(
ruleIdIds22
.
size
()
==
1
,
"课次被删除后,编辑当前及后续,后续删除的课次没重新生成新的课次"
);
//删除数据
this
.
getTrainingTools
().
deleteTraining
(
campId
);
//训练营被删除后,对应的排课日程会被自动删除check
campScheduleTools
.
getCampRuleScheduleList
(
campId
,
""
,
""
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
0
,
"训练营被删除后,对应的排课日程会被自动删除,目前还有相关数据请检查"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
)).
count
()==
0
,
"训练营被删除后,对应的排课日程会被自动删除,目前还有相关数据ruldId请检查"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
newRuldId
)).
count
()==
0
,
"训练营被删除后,对应的排课日程会被自动删除,目前还有相关数据newRuldId请检查"
);
}
}
}
...
...
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestEditCurrentCampSchedule.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
camp
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.schedule.group.GroupScheduleTools
;
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.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterTest
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author adu
* data 2024/8/1 11:19
*/
public
class
TestEditCurrentCampSchedule
extends
SelectTargetTrainingCampAndGetInfo
{
public
static
Date
now
=
new
Date
();
String
scheduleIdsN
;
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
@Resource
(
name
=
"campScheduleTools"
)
CampScheduleTools
campScheduleTools
;
String
campId
=
""
;
String
chiefCoachId
=
""
;
String
ruldId
=
""
;
//获取下周日某个时间点的开始时间戳
String
startStamp
=
CommUtil
.
getWholeHourTimeStamp
(
13
,
"13:30"
);
public
int
scheduleClassHourEditBefore
=
0
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_editCampSchedule"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
// 获取选择的训练营ID
campId
=
super
.
campId
;
//1.2获取训练营活动的指定教练ID
chiefCoachId
=
super
.
chiefCoachId
;
//获取目标时间段内 最大有效课时数
String
[]
weekDaysArray
=
{
"TUESDAY"
,
"THURSDAY"
,
"SATURDAY"
,
"SUNDAY"
};
List
<
String
>
weekdaysList
=
Arrays
.
asList
(
weekDaysArray
);
int
loopNum
=
campScheduleTools
.
queryExpectedLoopNum
(
CommUtil
.
oneKeyGetAddDay
(
3
),
super
.
openEndDate
,
weekdaysList
);
//创建训练营排课:按次数 星期:2,4,6,7
campScheduleTools
.
oneKeyCreateCampRuleSchedule
(
campId
,
chiefCoachId
,
super
.
courseId
,
super
.
traineeLowerLimit
,
super
.
traineeUpperLimit
,
"1140"
,
super
.
openEndDate
,
true
,
String
.
valueOf
(
loopNum
));
//查询排课日程:根据训练营和关联课程查询
campScheduleTools
.
getCampRuleScheduleList
(
super
.
campId
,
super
.
courseId
,
""
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
1
,
"排课创建成功后,日程中没查询到对应数据"
);
ruldId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"ruleId"
);
//获取训练营活动已排课课次数
scheduleClassHourEditBefore
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getJSONObject
(
"campVO"
).
getIntValue
(
"scheduleClassHour"
);
}
@Test
(
description
=
"编辑当前课次"
)
public
void
testEditCurrentCampSchedule
()
{
//获取本次创建规则中下周日课次ID
scheduleIdsN
=
campScheduleTools
.
getCampTableDate
(
13
,
ruldId
);
if
(!
StringUtils
.
isEmpty
(
scheduleIdsN
))
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
false
);
body
.
put
(
"scheduleId"
,
scheduleIdsN
);
body
.
put
(
"startTime"
,
startStamp
);
//修改上课时间
body
.
put
(
"chiefCoachId"
,
chiefCoachId
);
body
.
put
(
"minMemberNum"
,
super
.
traineeLowerLimit
);
body
.
put
(
"maxMemberNum"
,
super
.
traineeUpperLimit
);
body
.
put
(
"venueAreaIds"
,
new
ArrayList
<>());
body
.
put
(
"assistCoachIds"
,
super
.
assistCoachIds
);
//有空改为有数据2个教练
body
.
put
(
"spanMinutes"
,
50
);
body
.
put
(
"force"
,
true
);
//有冲突时忽略冲突
body
.
put
(
"retainBooking"
,
true
);
//保留学员预约
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//编辑成功后check对应课次详情修改内容是否同步成功
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleIdsN
);
String
detailResult
=
dataApi
.
getApi_response
();
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.chiefCoachId"
),
chiefCoachId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.startTime"
),
startStamp
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.assistCoachIds"
).
size
()
==
2
,
"助教修改后添加2个教练没生效"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.venueAreaIds"
).
size
()
==
0
,
"课次创建时场地为空,查看课次详情不为空"
);
}
}
@AfterTest
(
description
=
"删除此case创建的训练营排课日程"
)
public
void
delData
()
{
if
(
null
!=
campId
||
!
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
campId
);
//训练营被删除后,对应的排课日程会被自动删除check
campScheduleTools
.
getCampRuleScheduleList
(
campId
,
""
,
""
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
0
,
"训练营被删除后,对应的排课日程会被自动删除,目前还有相关数据请检查"
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestGetCampScheduleItemDetail.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
camp
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.training.TrainingTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
...
...
@@ -9,7 +13,7 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.After
Class
;
import
org.testng.annotations.After
Test
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
...
...
@@ -26,11 +30,20 @@ import java.util.Set;
public
class
TestGetCampScheduleItemDetail
extends
SelectTargetTrainingCampAndGetInfo
{
@Resource
(
name
=
"campScheduleTools"
)
CampScheduleTools
campScheduleTools
;
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
@Resource
(
name
=
"tools"
)
Tools
tools
;
String
campId
=
""
;
String
chiefCoachId
=
""
;
String
ruldId
=
""
;
String
memberId
=
""
;
String
orderId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_getCampScheduleItemDetail"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -42,6 +55,22 @@ public class TestGetCampScheduleItemDetail extends SelectTargetTrainingCampAndGe
campId
=
super
.
campId
;
//获取训练营活动的指定教练ID
chiefCoachId
=
super
.
chiefCoachId
;
//先报名训练营活动,再创建课次,创建课次后check 课次中有学员,自动生成预约记录
//搜索目标会员
String
phone
=
"15558121569"
;
memberId
=
trainingTools
.
searchTargerMember
(
phone
);
if
(
memberId
.
isEmpty
())
{
memberId
=
tools
.
create
(
"阿杜"
,
phone
).
getString
(
"result"
);
}
//给会员报名
trainingTools
.
doSignCampOrder
(
memberId
,
this
.
price
,
this
.
campId
,
""
);
orderId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
trainingTools
.
getTrainingApplyRecordsList
(
this
.
campId
,
phone
);
String
memberCardId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"memberCardId"
);
//创建训练营排课:按次数 星期:2,4,6,7
campScheduleTools
.
oneKeyCreateCampRuleSchedule
(
campId
,
chiefCoachId
,
super
.
courseId
,
super
.
traineeLowerLimit
,
super
.
traineeUpperLimit
,
...
...
@@ -53,8 +82,8 @@ public class TestGetCampScheduleItemDetail extends SelectTargetTrainingCampAndGe
ruldId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"ruleId"
);
//查看下周5的日课表,期望值无数据
S
et
<
String
>
scheduleIds5
=
campScheduleTools
.
getCampTableDate
(
11
);
Assert
.
assertTrue
(
scheduleIds5
.
size
()
==
0
||
scheduleIds5
==
null
,
"周五没排课,但是检查出有课次"
);
S
tring
scheduleIds5
=
campScheduleTools
.
getCampTableDate
(
11
,
ruldId
);
Assert
.
assertTrue
(
StringUtils
.
isEmpty
(
scheduleIds5
)
,
"周五没排课,但是检查出有课次"
);
//查看下周日的日课表,有数据,并查看课次详情
String
startDate
=
CommUtil
.
oneKeyGetNextWeekXDay
(
13
);
//下周日00点时间
...
...
@@ -76,9 +105,13 @@ public class TestGetCampScheduleItemDetail extends SelectTargetTrainingCampAndGe
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
scheduleId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//断言check
//课次中有1个学员check
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
xmAppApi
.
getApi_response
(),
"$.result.memberReserveList"
).
size
()
==
1
,
"排课前有学员报名了关联的训练营活动,所以课次中有1个预约学员,目前没发现课次中有学员"
);
//主教练check
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.result.chiefCoachId"
),
chiefCoachId
,
"教练和创建时设置的不一致"
);
//助教check
...
...
@@ -86,10 +119,26 @@ public class TestGetCampScheduleItemDetail extends SelectTargetTrainingCampAndGe
//场地check
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
xmAppApi
.
getApi_response
(),
"$.result.venueAreaIds"
).
isEmpty
(),
"创建排课时场地设置为空,但是课次详情中显示不为空哦"
);
//会员退款订单check
trainingTools
.
refundCampOrder
(
memberId
,
this
.
price
,
memberCardId
,
this
.
totalClassHour
);
//退单后再次check课次详情
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
JSONArray
memberReserveList
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.memberReserveList"
);
Assert
.
assertTrue
(
memberReserveList
==
null
||
memberReserveList
.
size
()
==
0
,
"学员退单后,没有从课次中移除"
);
}
@After
Class
(
description
=
"删除此case创建的训练营排课日程"
)
@After
Test
(
description
=
"删除此case创建的训练营排课日程"
)
public
void
delData
()
{
if
(
null
!=
orderId
||
!
orderId
.
isEmpty
())
{
trainingTools
.
fetchUserTrainingCardList
(
memberId
);
if
(!
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"state"
).
equals
(
"REFUNDED"
))
{
orderTools
.
discard
(
orderId
,
"重复录入"
,
"自动化测试作废训练营订单"
);
}
}
if
(
null
!=
campId
||
!
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
campId
);
}
...
...
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestGetCampScheduleTable.java
View file @
a19c8b30
...
...
@@ -9,10 +9,7 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterClass
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
import
org.testng.annotations.*
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
...
...
@@ -107,12 +104,14 @@ public class TestGetCampScheduleTable extends SelectTargetTrainingCampAndGetInfo
body
.
put
(
"coachId"
,
coachId
);
body
.
put
(
"statusSet"
,
statusSet
);
body
.
put
(
"venueAreaId"
,
venueAreaId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
int
resultCount
=
Integer
.
parseInt
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.result.totalCount"
));
Assert
.
assertTrue
(
resultCount
>=
total
,
"查询到的课表数据和预期不一致"
);
}
@After
Class
(
description
=
"删除此case创建的训练营排课日程,只操作删除对应的训练营活动即可"
)
@After
Test
(
description
=
"删除此case创建的训练营排课日程,只操作删除对应的训练营活动即可"
)
public
void
delData
()
{
if
(
null
!=
campId
||!
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
campId
);
...
...
src/main/java/com/xiaomai/cases/polar/schedule/camp/TestTrainingSign.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
camp
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.polar.memberCard.CardTools
;
import
com.xiaomai.cases.polar.reserve.ReserveTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.training
* @Author: xuyamei
* @CreateTime: 2024-07-31 10:39
* @Description: 训练营签到、请假、补签到、无需补课、请假已补
* @Version: 1.0
*/
public
class
TestTrainingSign
extends
BaseTestImpl
{
@Resource
(
name
=
"campScheduleTools"
)
CampScheduleTools
campScheduleTools
;
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
CardTools
cardTools
=
new
CardTools
();
private
String
scheduleId
;
@BeforeMethod
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_remedial"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xuyamei"
);
super
.
beforeTest
();
}
@Test
(
description
=
"训练营签到"
)
public
void
testTrainingSign
()
{
// 训练营课表查询存量的训练营课次
JSONArray
getCampScheduleTable
=
campScheduleTools
.
getCampScheduleTable
(
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
"1818220193259798530"
);
scheduleId
=
getCampScheduleTable
.
getJSONObject
(
0
).
getString
(
"scheduleId"
);
// 训练营课次详情
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
JSONArray
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
String
reserveId
=
""
;
// 约课id
String
memberId
=
""
;
String
benefitId
=
""
;
// 权益id
String
memberCardId
=
""
;
// 卡id
// 查到需要操作签到的学员id
boolean
hasData
=
false
;
// 是否找到需要操作的学员
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++)
{
System
.
out
.
println
(
"-------------i"
+
i
);
System
.
out
.
println
(
"-------------i"
+
i
);
if
(
memberRserveList
.
getJSONObject
(
i
).
getJSONObject
(
"member"
).
getString
(
"name"
).
contains
(
"微信用户"
)
&&
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
).
equals
(
"UN_SIGNED"
))
{
reserveId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
);
memberId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberId"
);
benefitId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"benefitId"
);
memberCardId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberCardId"
);
hasData
=
true
;
break
;
}
}
Assert
.
assertTrue
(
hasData
,
"没有找到需要操作的学员,课次今日可能没有可操作的学员,请手动在页面回归签到"
);
// 操作签到
reserveTools
.
signIn
(
true
,
reserveId
,
false
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1: 课次详情到课状态为签到
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++)
{
if
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
))
{
Assert
.
assertEquals
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
),
"SIGNED"
);
}
}
// check 2: 预约记录是否包含该预约
String
[]
result
=
new
String
[]{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseType"
,
"reserveState"
,
"scheduleId"
,
"signInState"
};
String
[]
resultData
=
new
String
[]{
reserveId
,
benefitId
,
"1"
,
"TRAINING_CAMP"
,
"SUCCESS"
,
scheduleId
,
"SIGNED"
};
// check 2.1 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
""
,
"SUCCESS"
,
"SIGNED"
,
""
,
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
,
"TRAINING_CAMP"
,
"1818220193259798530"
);
boolean
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"
),
memberId
,
"查询的训练营签到产生数据不是同一个会员"
);
}
}
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录签到消耗
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
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
=
"训练营请假"
,
priority
=
1
)
public
void
testTrainingSign_Leave
()
{
// 训练营课表查询存量的训练营课次
JSONArray
getCampScheduleTable
=
campScheduleTools
.
getCampScheduleTable
(
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
"1818220193259798530"
);
scheduleId
=
getCampScheduleTable
.
getJSONObject
(
0
).
getString
(
"scheduleId"
);
// 训练营课次详情
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
JSONArray
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
String
reserveId
=
""
;
// 约课id
String
memberId
=
""
;
String
benefitId
=
""
;
// 权益id
String
memberCardId
=
""
;
// 卡id
// 查到需要操作签到的学员id
boolean
hasData
=
false
;
// 是否找到需要操作的学员
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++){
if
(
memberRserveList
.
getJSONObject
(
i
).
getJSONObject
(
"member"
).
getString
(
"name"
).
contains
(
"训练营请假学员"
)
&&
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
).
equals
(
"UN_SIGNED"
)){
reserveId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
);
memberId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberId"
);
benefitId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"benefitId"
);
memberCardId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberCardId"
);
hasData
=
true
;
break
;
}
}
Assert
.
assertTrue
(
hasData
,
"没有找到需要操作的学员,课次今日可能没有可操作的学员,请手动在页面回归请假"
);
// 操作请假
reserveTools
.
signIn
(
true
,
reserveId
,
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1: 课次详情到课状态为签到
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++){
if
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
Assert
.
assertEquals
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
),
"LEAVE"
);
}
}
// check 2: 预约记录是否包含该预约
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseType"
,
"reserveState"
,
"scheduleId"
,
"signInState"
};
String
[]
resultData
=
new
String
[]
{
reserveId
,
benefitId
,
"1"
,
"TRAINING_CAMP"
,
"SUCCESS"
,
scheduleId
,
"LEAVE"
};
// check 2.1 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
""
,
"SUCCESS"
,
"LEAVE"
,
""
,
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
,
"TRAINING_CAMP"
,
"1818220193259798530"
);
boolean
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
}
}
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录签到消耗
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfPurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
reserveId
,
"LEAVE"
,
"-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
=
2
)
public
void
testTrainingSign_SIGNED
()
{
// 训练营课表查询存量的训练营课次
JSONArray
getCampScheduleTable
=
campScheduleTools
.
getCampScheduleTable
(
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
"1818220193259798530"
);
scheduleId
=
getCampScheduleTable
.
getJSONObject
(
0
).
getString
(
"scheduleId"
);
// 训练营课次详情
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
JSONArray
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
String
reserveId
=
""
;
// 约课id
String
memberId
=
""
;
String
benefitId
=
""
;
// 权益id
String
memberCardId
=
""
;
// 卡id
// 查到需要操作签到的学员id
boolean
hasData
=
false
;
// 是否找到需要操作的学员
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++){
if
(
memberRserveList
.
getJSONObject
(
i
).
getJSONObject
(
"member"
).
getString
(
"name"
).
contains
(
"训练营请假补签到"
)
&&
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
).
equals
(
"UN_SIGNED"
)){
reserveId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
);
memberId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberId"
);
benefitId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"benefitId"
);
memberCardId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberCardId"
);
hasData
=
true
;
break
;
}
}
Assert
.
assertTrue
(
hasData
,
"没有找到需要操作的学员,课次今日可能没有可操作的学员,请手动在页面回归请假补签到"
);
// 操作请假
reserveTools
.
signIn
(
true
,
reserveId
,
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 操作补签到
reserveTools
.
signIn
(
true
,
reserveId
,
false
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1: 课次详情到课状态为签到
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++){
if
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
Assert
.
assertEquals
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
),
"SIGNED"
);
}
}
// check 2: 预约记录是否包含该预约
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseType"
,
"reserveState"
,
"scheduleId"
,
"signInState"
};
String
[]
resultData
=
new
String
[]
{
reserveId
,
benefitId
,
"1"
,
"TRAINING_CAMP"
,
"SUCCESS"
,
scheduleId
,
"SIGNED"
};
// check 2.1 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
""
,
"SUCCESS"
,
"SIGNED"
,
""
,
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
,
"TRAINING_CAMP"
,
"1818220193259798530"
);
boolean
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
}
}
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录签到消耗还是请假,请假已经扣除补签到不会再扣
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfPurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
reserveId
,
"LEAVE"
,
"-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
testTrainingSign_MARK_REMEDIAL
()
{
// 训练营课表查询存量的训练营课次
JSONArray
getCampScheduleTable
=
campScheduleTools
.
getCampScheduleTable
(
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
"1818220193259798530"
);
scheduleId
=
getCampScheduleTable
.
getJSONObject
(
0
).
getString
(
"scheduleId"
);
// 训练营课次详情
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
JSONArray
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
String
reserveId
=
""
;
// 约课id
String
memberId
=
""
;
String
benefitId
=
""
;
// 权益id
String
memberCardId
=
""
;
// 卡id
// 查到需要操作签到的学员id
boolean
hasData
=
false
;
// 是否找到需要操作的学员
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++){
if
(
memberRserveList
.
getJSONObject
(
i
).
getJSONObject
(
"member"
).
getString
(
"name"
).
contains
(
"训练营请假标记已补"
)
&&
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
).
equals
(
"UN_SIGNED"
)){
reserveId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
);
memberId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberId"
);
benefitId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"benefitId"
);
memberCardId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberCardId"
);
hasData
=
true
;
break
;
}
}
Assert
.
assertTrue
(
hasData
,
"没有找到需要操作的学员,课次今日可能没有可操作的学员,请手动在页面回归请假标记已补"
);
// 操作请假
reserveTools
.
signIn
(
true
,
reserveId
,
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 操作标记已补
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"remedialSignState"
,
"MARK_REMEDIAL"
);
body
.
put
(
"reserveId"
,
reserveId
);
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1: 课次详情到课状态为请假 标记已补
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++){
if
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
Assert
.
assertEquals
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
),
"LEAVE"
);
Assert
.
assertEquals
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"remedialSignState"
),
"MARK_REMEDIAL"
);
}
}
// check 2: 预约记录是否包含该预约
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseType"
,
"reserveState"
,
"scheduleId"
,
"signInState"
,
"remedialSignState"
};
String
[]
resultData
=
new
String
[]
{
reserveId
,
benefitId
,
"1"
,
"TRAINING_CAMP"
,
"SUCCESS"
,
scheduleId
,
"LEAVE"
,
"MARK_REMEDIAL"
};
// check 2.1 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
""
,
"SUCCESS"
,
"LEAVE"
,
""
,
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
,
"TRAINING_CAMP"
,
"1818220193259798530"
);
boolean
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
}
}
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录签到消耗还是请假,请假已经扣除不会再扣
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfPurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
reserveId
,
"LEAVE"
,
"-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
testTrainingSign_NEED_NOT_REMEDIAL
()
{
// 训练营课表查询存量的训练营课次
JSONArray
getCampScheduleTable
=
campScheduleTools
.
getCampScheduleTable
(
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
"1818220193259798530"
);
scheduleId
=
getCampScheduleTable
.
getJSONObject
(
0
).
getString
(
"scheduleId"
);
// 训练营课次详情
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
JSONArray
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
String
reserveId
=
""
;
// 约课id
String
memberId
=
""
;
String
benefitId
=
""
;
// 权益id
String
memberCardId
=
""
;
// 卡id
// 查到需要操作签到的学员id
boolean
hasData
=
false
;
// 是否找到需要操作的学员
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++){
if
(
memberRserveList
.
getJSONObject
(
i
).
getJSONObject
(
"member"
).
getString
(
"name"
).
contains
(
"训练营请假无需"
)
&&
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
).
equals
(
"UN_SIGNED"
)){
reserveId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
);
memberId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberId"
);
benefitId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"benefitId"
);
memberCardId
=
memberRserveList
.
getJSONObject
(
i
).
getString
(
"memberCardId"
);
hasData
=
true
;
break
;
}
}
Assert
.
assertTrue
(
hasData
,
"没有找到需要操作的学员,课次今日可能没有可操作的学员,请手动在页面回归请假无需补课"
);
// 操作请假
reserveTools
.
signIn
(
true
,
reserveId
,
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// 操作标记已补
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"remedialSignState"
,
"NEED_NOT_REMEDIAL"
);
body
.
put
(
"reserveId"
,
reserveId
);
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1: 课次详情到课状态为请假-无需补课
campScheduleTools
.
getCampScheduleItemDetail
(
scheduleId
);
memberRserveList
=
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"memberReserveList"
);
for
(
int
i
=
0
;
i
<
memberRserveList
.
size
();
i
++){
if
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"id"
).
equals
(
reserveId
)){
Assert
.
assertEquals
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"signInState"
),
"LEAVE"
);
Assert
.
assertEquals
(
memberRserveList
.
getJSONObject
(
i
).
getString
(
"remedialSignState"
),
"NEED_NOT_REMEDIAL"
);
}
}
// check 2: 预约记录是否包含该预约
String
[]
result
=
new
String
[]
{
"id"
,
"benefitId"
,
"reserveMemberNum"
,
"courseType"
,
"reserveState"
,
"scheduleId"
,
"signInState"
,
"remedialSignState"
};
String
[]
resultData
=
new
String
[]
{
reserveId
,
benefitId
,
"1"
,
"TRAINING_CAMP"
,
"SUCCESS"
,
scheduleId
,
"LEAVE"
,
"NEED_NOT_REMEDIAL"
};
// check 2.1 预约记录列表
JSONArray
getPageByStudio
=
reserveTools
.
getPageByStudio
(
""
,
"SUCCESS"
,
"LEAVE"
,
""
,
TimeUtils
.
getTodayTime
(),
TimeUtils
.
getTodayEndTime
(),
memberId
,
"TRAINING_CAMP"
,
"1818220193259798530"
);
boolean
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
}
}
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"
),
memberId
,
"查询的约课数据不是同一个会员"
);
// check 3: 会员卡消耗记录中包含该记录签到消耗还是请假,请假已经扣除不会再扣
JSONArray
consumeRecord
=
cardTools
.
fetchPageOfConsumeRecord
(
benefitId
,
memberCardId
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
String
[]
result2
=
new
String
[]
{
"resourceId"
,
"consumeType"
,
"changeOfPurchaseBalance"
};
String
[]
respect
=
new
String
[]
{
reserveId
,
"LEAVE"
,
"-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
]);
}
}
}
src/main/java/com/xiaomai/cases/polar/schedule/group/GroupScheduleTools.java
View file @
a19c8b30
...
...
@@ -12,6 +12,7 @@ import com.xiaomai.utils.XMBaseTest;
import
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
org.testng.Assert
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
...
...
@@ -74,7 +75,9 @@ public class GroupScheduleTools extends XMBaseTest {
body
.
put
(
"endDate"
,
CommUtil
.
getNDayEndTimeTamp
(
60
));
//排课结束日期,这里就设置自动延顺60天,结束日期会覆盖你传的endDate
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
@@ -98,7 +101,8 @@ public class GroupScheduleTools extends XMBaseTest {
if
(
coachId
!=
null
&&
coachId
.
length
()
!=
0
)
{
body
.
put
(
"coachId"
,
coachId
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
return
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
);
}
...
...
@@ -144,7 +148,9 @@ public class GroupScheduleTools extends XMBaseTest {
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"force"
,
force
);
body
.
put
(
"ruleId"
,
ruleId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
@@ -228,7 +234,9 @@ public class GroupScheduleTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
ruldId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
@@ -248,7 +256,9 @@ public class GroupScheduleTools extends XMBaseTest {
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
scheduleId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
...
...
@@ -260,12 +270,15 @@ public class GroupScheduleTools extends XMBaseTest {
* @date: 2024/6/23 17:46
* @return: com.alibaba.fastjson.JSONArray
**/
public
JSONArray
getGroupScheduleTable
(
Long
startDate
,
Long
endDate
)
{
public
JSONArray
getGroupScheduleTable
(
Long
startDate
,
Long
endDate
,
String
courseId
)
{
setUP
(
"API_getGroupScheduleTable"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
if
(
courseId
.
equals
(
""
)){
body
.
put
(
"courseId"
,
courseId
);
}
body
.
put
(
"startDate"
,
startDate
);
body
.
put
(
"endDate"
,
endDate
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
...
...
@@ -306,7 +319,9 @@ public class GroupScheduleTools extends XMBaseTest {
body
.
put
(
"assistCoachIds"
,
new
ArrayList
());
body
.
put
(
"spanMinutes"
,
60
);
body
.
put
(
"force"
,
false
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
@@ -328,7 +343,9 @@ public class GroupScheduleTools extends XMBaseTest {
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"applyRestRule"
,
false
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
...
...
@@ -338,7 +355,7 @@ public class GroupScheduleTools extends XMBaseTest {
*/
public
Set
<
String
>
getTableDate
(
int
n
)
{
//查看团课课表
getGroupScheduleTable
(
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekStartDay
()),
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekEndDay
()));
getGroupScheduleTable
(
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekStartDay
()),
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekEndDay
())
,
""
);
//获取下周周N及后续的课次
String
date
=
CommUtil
.
oneKeyGetNextWeekXDay
(
n
);
//下周N 日期时间戳
int
count
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
).
size
();
...
...
@@ -358,6 +375,36 @@ public class GroupScheduleTools extends XMBaseTest {
}
/**
* 选择匹配到对应规则ID的课次
* @param n
* @param ruldId
* @return
*/
public
String
getTableDate
(
int
n
,
String
ruldId
)
{
//查看团课课表
getGroupScheduleTable
(
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekStartDay
()),
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekEndDay
()),
""
);
//获取下周周N及后续的课次
String
date
=
CommUtil
.
oneKeyGetNextWeekXDay
(
n
);
//下周N 日期时间戳
int
count
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
).
size
();
if
(
count
>
0
)
{
JSONArray
array
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
);
String
scheduleIds
=
array
.
toJavaList
(
JSONObject
.
class
).
stream
()
.
filter
(
e
->
e
.
getString
(
"date"
).
equals
(
date
))
//过滤出日期等于下周N的数据
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
//对过滤出的数据再次取目标数据重新组合成一个新的数据流
.
filter
(
e
->
null
!=
e
.
getString
(
"ruleId"
))
.
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
))
.
map
(
e
->
e
.
getString
(
"scheduleId"
))
//获取scheduleId
.
findFirst
().
orElse
(
""
);
return
scheduleIds
;
}
return
""
;
}
}
src/main/java/com/xiaomai/cases/polar/schedule/group/TestCreateGroupRuleSchedule.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.druid.util.StringUtils
;
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.setting.courseCategory.CourseCategoryTools
;
...
...
@@ -21,6 +23,7 @@ import java.util.List;
/**
* 创建排课
*
* @author adu
* data 2024/6/12 15:54
*/
...
...
@@ -47,16 +50,15 @@ public class TestCreateGroupRuleSchedule extends BaseTestImpl {
String
courseName
=
"阿杜自动化团课课程"
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_createGroupRuleSchedule"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"测试新建团课排课"
)
public
void
testCreateGroupRuleSchedule
()
{
//查询今日待上课的数据
public
void
testCreateGroupRuleSchedule
()
throws
InterruptedException
{
HomeTools
homeTools
=
new
HomeTools
();
int
num
=
homeTools
.
queryTodaySchedule
().
getJSONArray
(
"result"
).
size
();
//获取存量课程ID
String
courseId
=
groupScheduleTools
.
getStockGroupCourseId
(
courseName
);
...
...
@@ -78,27 +80,49 @@ public class TestCreateGroupRuleSchedule extends BaseTestImpl {
List
<
String
>
assistCoachIdS
=
groupScheduleTools
.
getStudioAdminId
(
assistCoachIds
);
//1-创建排课日程
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
chiefCoachIdS
,
todayStartTimeTamp
,
endDateTimeTamp
,
venueAreaIds
,
assistCoachIdS
,
false
,
1
,
480
);
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
chiefCoachIdS
,
todayStartTimeTamp
,
endDateTimeTamp
,
venueAreaIds
,
assistCoachIdS
,
true
,
1
,
480
);
//2-查询排课日程
JSONArray
result
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
chiefCoachIdS
);
String
ruldId
=
XMJSONPath
.
readPath
(
result
.
getJSONObject
(
0
),
"$.ruleId"
);
// 日程列表中新增一条刚创建的规则,匹配到对应的ruldId
Long
goalRuld
=
result
.
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
)).
count
();
Assert
.
assertTrue
(
goalRuld
==
1
);
Assert
.
assertTrue
(
result
.
size
()
>=
1
);
//创建今日待上课的排课后再查询今日待上课的数据
int
num1
=
homeTools
.
queryTodaySchedule
().
getJSONArray
(
"result"
).
size
();
Assert
.
assertEquals
(
num1
,
num
+
1
);
//查看今天的课表,获取刚创建的日程中对应的课次ID
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
todayStartTimeTamp
),
Long
.
valueOf
(
todayEndDateTimeTamp
),
courseId
);
JSONArray
array
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
);
String
scheduleId
=
array
.
toJavaList
(
JSONObject
.
class
).
stream
()
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
.
filter
(
e
->
null
!=
e
.
getString
(
"ruleId"
))
.
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
))
.
map
(
e
->
e
.
getString
(
"scheduleId"
))
//获取scheduleId
.
findFirst
().
orElse
(
null
);
//统计查询到的目标日程数量
int
size
=
result
.
size
();
String
ruldId
=
XMJSONPath
.
readPath
(
result
.
getJSONObject
(
0
),
"$.ruleId"
);
groupScheduleTools
.
delGroupRuleSchedule
(
ruldId
,
true
);
JSONArray
result2
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
chiefCoachIdS
);
// Assert.assertTrue(scheduleId!=null||!scheduleId.isEmpty(),"刚创建的规则中,没查询到今天对应的课次");//你这个判断,如果scheduleID != null 不成立,就会走到 !scheduleId.isEmpty(),此时shcdueId是null,使用.isEmpry就空指针了
Assert
.
assertTrue
(!
StringUtils
.
isEmpty
(
scheduleId
),
"刚创建的规则中,没查询到今天对应的课次"
);
//删除成功后,统计查询到的目标日程数量是否-1
Assert
.
assertEquals
(
result2
.
size
(),
size
-
1
);
}
//创建今日待上课的排课后查询今日待上课的数据
long
num
=
homeTools
.
queryTodaySchedule
().
getJSONArray
(
"result"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
filter
(
e
->
e
.
getString
(
"scheduleId"
).
equals
(
scheduleId
)).
count
();
Assert
.
assertEquals
(
num
,
1
);
groupScheduleTools
.
delGroupRuleSchedule
(
ruldId
,
true
);
Thread
.
sleep
(
1000
);
JSONArray
result2
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
chiefCoachIdS
);
//获取日程中规则ID=ruleId的日程数量
Long
delRuldCount
=
result2
.
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
ruldId
)).
count
();
//删除成功后,统计查询到的目标日程数量为0
Assert
.
assertTrue
(
delRuldCount
==
0
);
//删除今日待上课的排课后查询今日待上课的数据
long
num1
=
homeTools
.
queryTodaySchedule
().
getJSONArray
(
"result"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
filter
(
e
->
e
.
getString
(
"scheduleId"
).
equals
(
scheduleId
)).
count
();
Assert
.
assertEquals
(
num1
,
0
);
}
}
...
...
src/main/java/com/xiaomai/cases/polar/schedule/group/TestDelCurrentAndSubsequentGroupSchedule.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONObject
;
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.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterTest
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
/**
* 删除课次(删除当前课次/删除当前及后续课次)
*
* @author adu
* data 2024/6/30 17:02
*/
public
class
TestDelCurrentAndSubsequentGroupSchedule
extends
UniversalDataScheduling
{
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_delGroupScheduleItem"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"删除当前及后续课次"
)
public
void
testDelCurrentAndSubsequentGroupSchedule
()
{
//获取下周三的课次ID(匹配到对应的规则ID)
String
scheduleIdsG
=
groupScheduleTools
.
getTableDate
(
9
,
groupRuldId
);
//如果课次ID有值则继续走删除的case
if
(!
StringUtils
.
isEmpty
(
scheduleIdsG
))
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
true
);
body
.
put
(
"scheduleId"
,
scheduleIdsG
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//删除成功后check 从下周三到下周日课表是否有数据
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekXDay
(
9
)),
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekEndDay
()),
courseId
);
Long
countB
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
.
filter
(
e
->
null
!=
e
.
getString
(
"ruleId"
))
.
filter
(
e
->
e
.
getString
(
"ruleId"
).
equals
(
groupRuldId
)).
count
();
Assert
.
assertTrue
(
countB
==
0
,
"删除当前及后续课次后,课表中后端返回数据有问题,目前还能发现数据"
);
}
}
@AfterTest
(
description
=
"删除此case创建的日程"
)
public
void
delData
()
{
if
(!
StringUtils
.
isEmpty
(
groupRuldId
))
{
//获取到的日程ID不为空时,则逐个删除相关日程
//删除对应日程
groupScheduleTools
.
delGroupRuleSchedule
(
groupRuldId
,
true
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/schedule/group/TestDelCurrentSingleGroupSchedule.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
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.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterTest
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author adu
* data 2024/8/1 10:00
*/
public
class
TestDelCurrentSingleGroupSchedule
extends
UniversalDataScheduling
{
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_delGroupScheduleItem"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"删除当前课次"
)
public
void
testDelCurrentSingleGroupSchedule
()
{
//获取下周四的课次ID(匹配到刚创建的规则ID)
String
scheduleId
=
groupScheduleTools
.
getTableDate
(
10
,
groupRuldId
);
//如果课次ID有值则继续走删除的case
if
(!
StringUtils
.
isEmpty
(
scheduleId
))
{
JSONObject
body1
=
new
JSONObject
();
body1
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body1
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body1
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body1
.
put
(
"applyRestRule"
,
false
);
body1
.
put
(
"scheduleId"
,
scheduleId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body1
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//删除成功后check 下周四课表是否有数据
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekXDay
(
10
)),
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekEndXDay
(
4
)),
courseId
);
Long
countA
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.timetableGroups"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
flatMap
(
e
->
e
.
getJSONArray
(
"timetableList"
).
toJavaList
(
JSONObject
.
class
).
stream
())
.
filter
(
e
->
e
.
getString
(
"scheduleId"
).
equals
(
scheduleId
)).
count
();
Assert
.
assertTrue
(
countA
==
0
,
"删除课次后,课表中后端返回数据有问题,目前还能发现数据"
);
}
}
@AfterTest
(
description
=
"删除此case创建的日程"
)
public
void
delData
()
{
if
(!
StringUtils
.
isEmpty
(
groupRuldId
))
{
//获取到的日程ID不为空时,则逐个删除相关日程
//删除对应日程
groupScheduleTools
.
delGroupRuleSchedule
(
groupRuldId
,
true
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/schedule/group/TestDelGroupScheduleItem.java
deleted
100644 → 0
View file @
6a802225
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
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.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterClass
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
* 删除课次(删除当前课次/删除当前及后续课次)
*
* @author adu
* data 2024/6/30 17:02
*/
public
class
TestDelGroupScheduleItem
extends
UniversalDataScheduling
{
@BeforeClass
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_delGroupScheduleItem"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"删除当前课次"
)
public
void
testDelCurrentSchedule
()
{
//获取下周四的课次ID
Set
<
String
>
scheduleIds
=
groupScheduleTools
.
getTableDate
(
10
);
//如果课次ID有值则继续走删除的case
if
(!
scheduleIds
.
isEmpty
())
{
scheduleIds
.
stream
().
forEach
(
scheduleId
->
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
false
);
body
.
put
(
"scheduleId"
,
scheduleId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
});
//删除成功后check 下周四课表是否有数据
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekXDay
(
10
)),
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekEndXDay
(
4
)));
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
),
"0"
);
}
}
@Test
(
description
=
"删除当前及后续课次"
,
priority
=
1
)
public
void
testDelCurrentAndSubsequentSchedule
()
{
//获取下周三的课次ID
Set
<
String
>
scheduleIds
=
groupScheduleTools
.
getTableDate
(
9
);
//如果课次ID有值则继续走删除的case
if
(!
scheduleIds
.
isEmpty
())
{
scheduleIds
.
stream
().
forEach
(
scheduleId
->
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
true
);
body
.
put
(
"scheduleId"
,
scheduleId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
});
//删除成功后check 从下周三到下周日课表是否有数据
groupScheduleTools
.
getGroupScheduleTable
(
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekXDay
(
9
)),
Long
.
valueOf
(
CommUtil
.
oneKeyGetNextWeekEndDay
()));
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalCount"
),
"0"
);
}
}
@AfterClass
(
description
=
"删除此case创建的日程"
)
public
void
delData
(){
List
<
String
>
ruleIdIds
=
new
ArrayList
<>();
//查询这个case创建的相关日程
JSONArray
result
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
chiefCoachIdS
);
int
count
=
result
.
size
();
if
(
count
>
0
)
{
//如果有数据,则获取对应日程ID
ruleIdIds
=
result
.
stream
().
map
(
obj
->
{
JSONObject
ruldIdInfo
=
(
JSONObject
)
obj
;
return
ruldIdInfo
.
getString
(
"ruleId"
);
}
).
collect
(
Collectors
.
toList
());
}
if
(
ruleIdIds
!=
null
)
{
//获取到的日程ID不为空时,则逐个删除相关日程
ruleIdIds
.
stream
().
forEach
(
ruleId
->
{
//删除对应日程
groupScheduleTools
.
delGroupRuleSchedule
(
ruleId
,
true
);
});
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/schedule/group/TestEditCurrentAndSubsequentGroupSchedule.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONObject
;
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.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterTest
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
java.util.ArrayList
;
import
java.util.Date
;
/**
* @author adu
* data 2024/8/1 11:09
*/
public
class
TestEditCurrentAndSubsequentGroupSchedule
extends
UniversalDataScheduling
{
public
static
Date
now
=
new
Date
();
String
newGroupRuldId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_editGroupSchedule"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"编辑当前及后续课次"
)
public
void
testEditCurrentAndSubsequentGroupSchedule
()
{
//获取下周二的课次ID(匹配到刚创建的规则ID)
String
scheduleId
=
groupScheduleTools
.
getTableDate
(
8
,
groupRuldId
);
//如果课次ID有值则继续走编辑的case
if
(!
StringUtils
.
isEmpty
(
scheduleId
))
{
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
true
);
//改的时日程当前及后续
body
.
put
(
"scheduleId"
,
scheduleId
);
//获取下周二某个时间点的开始时间戳
String
startStamp1
=
CommUtil
.
getWholeHourTimeStamp
(
8
,
"13:00"
);
body
.
put
(
"startTime"
,
startStamp1
);
body
.
put
(
"chiefCoachId"
,
chiefCoachIdS
);
body
.
put
(
"minMemberNum"
,
6
);
//修改开课人数
body
.
put
(
"maxMemberNum"
,
999
);
body
.
put
(
"venueAreaIds"
,
venueAreaIds
);
body
.
put
(
"assistCoachIds"
,
new
ArrayList
<>());
//修改教练
body
.
put
(
"spanMinutes"
,
50
);
body
.
put
(
"force"
,
true
);
//有冲突时忽略冲突
//body.put("retainBooking", true);//保留学员预约,无改动到时间,教练,场地则不需要传此字段
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
try
{
Thread
.
sleep
(
3000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//编辑成功后check对应课次详情修改内容是否同步成功
checkData
(
scheduleId
,
startStamp1
);
//通过课次详情,活动课次对应的ruldId
newGroupRuldId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.ruleId"
);
//查看下周三课次是否同步被修改
String
scheduleIdX
=
groupScheduleTools
.
getTableDate
(
9
,
newGroupRuldId
);
String
startStamp2
=
CommUtil
.
getWholeHourTimeStamp
(
9
,
"13:00"
);
if
(!
StringUtils
.
isEmpty
(
scheduleIdX
))
{
//编辑成功后check同规则中下周三课次详情修改内容是否同步成功
checkData
(
scheduleIdX
,
startStamp2
);
}
}
//获取下周一的课次ID,查看下周一课次是否还是原来的(没被修改,还是原来的规则)
String
scheduleId1
=
groupScheduleTools
.
getTableDate
(
7
,
groupRuldId
);
String
startStamp3
=
CommUtil
.
getWholeHourTimeStamp
(
7
,
"13:00"
);
if
(!
StringUtils
.
isEmpty
(
scheduleId1
))
{
//编辑成功后check同规则中下周一课次详情
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId1
);
String
detailResult1
=
dataApi
.
getApi_response
();
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.chiefCoachId"
),
chiefCoachIdS
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.minMemberNum"
),
"2"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.maxMemberNum"
),
"999"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.startTime"
),
startStamp3
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult1
,
"$.result.assistCoachIds"
).
containsAll
(
assistCoachIdS
),
"助教无修改,但是却变动了"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult1
,
"$.result.venueAreaIds"
).
containsAll
(
venueAreaIds
),
"场地无修改,但是却变动了"
);
}
}
}
/**
* 编辑后通过查看课次详情check数据是否同步被修改
* @param scheduleId
*/
public
void
checkData
(
String
scheduleId
,
String
tiemStamp
){
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
String
detailResult1
=
dataApi
.
getApi_response
();
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.chiefCoachId"
),
chiefCoachIdS
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.minMemberNum"
),
"6"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.maxMemberNum"
),
"999"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.startTime"
),
tiemStamp
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult1
,
"$.result.assistCoachIds"
).
size
()
==
0
,
"助教修改后(置空)没生效"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult1
,
"$.result.venueAreaIds"
).
containsAll
(
venueAreaIds
),
"场地无修改,但是却变动了"
);
}
@AfterTest
(
description
=
"删除此case创建的日程"
)
public
void
delData
()
{
if
(!
StringUtils
.
isEmpty
(
groupRuldId
))
{
//获取到的日程ID不为空时,则逐个删除相关日程
//删除对应原日程
groupScheduleTools
.
delGroupRuleSchedule
(
groupRuldId
,
true
);
}
if
(!
StringUtils
.
isEmpty
(
newGroupRuldId
))
{
//删除编辑当前及后续生成的新规则
groupScheduleTools
.
delGroupRuleSchedule
(
newGroupRuldId
,
true
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/schedule/group/TestEditGroupSchedule.java
→
src/main/java/com/xiaomai/cases/polar/schedule/group/TestEdit
Current
GroupSchedule.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.enums.ApiModule
;
...
...
@@ -9,15 +10,13 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.After
Class
;
import
org.testng.annotations.After
Test
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -26,12 +25,14 @@ import java.util.stream.Collectors;
* data 2024/7/2 10:45
*/
public
class
TestEditGroupSchedule
extends
UniversalDataScheduling
{
public
class
TestEdit
Current
GroupSchedule
extends
UniversalDataScheduling
{
public
static
Date
now
=
new
Date
();
Set
<
String
>
scheduleIdsN
;
String
scheduleIdsN
;
String
newGroupRuldId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_editGroupSchedule"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -39,18 +40,17 @@ public class TestEditGroupSchedule extends UniversalDataScheduling {
}
@Test
(
description
=
"编辑当前课次"
)
public
void
testEditCurrentSchedule
()
{
//获取下周四的课次ID
scheduleIdsN
=
groupScheduleTools
.
getTableDate
(
10
);
public
void
testEditCurrent
Group
Schedule
()
{
//获取下周四的课次ID
(匹配到刚创建的规则ID)
scheduleIdsN
=
groupScheduleTools
.
getTableDate
(
10
,
groupRuldId
);
//如果课次ID有值则继续走删除的case
if
(!
scheduleIdsN
.
isEmpty
())
{
scheduleIdsN
.
stream
().
forEach
(
scheduleId
->
{
if
(!
StringUtils
.
isEmpty
(
scheduleIdsN
))
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
false
);
body
.
put
(
"scheduleId"
,
scheduleId
);
body
.
put
(
"scheduleId"
,
scheduleId
sN
);
//获取下周四某个时间点的开始时间戳
String
startStamp
=
CommUtil
.
getWholeHourTimeStamp
(
10
,
"13:30"
);
body
.
put
(
"startTime"
,
startStamp
);
...
...
@@ -64,14 +64,16 @@ public class TestEditGroupSchedule extends UniversalDataScheduling {
body
.
put
(
"force"
,
true
);
//有冲突时忽略冲突
body
.
put
(
"retainBooking"
,
false
);
//不保留学员预约
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//编辑成功后check对应课次详情修改内容是否同步成功
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
sN
);
String
detailResult
=
dataApi
.
getApi_response
();
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.chiefCoachId"
),
chiefCoachIdS
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.minMemberNum"
),
"1"
);
...
...
@@ -81,135 +83,31 @@ public class TestEditGroupSchedule extends UniversalDataScheduling {
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.venueAreaIds"
).
size
()
==
0
,
"场地修改后(置空)没生效"
);
});
}
}
@Test
(
description
=
"编辑当前及后续课次"
,
priority
=
1
)
public
void
testEditCurrentAndSubsequentSchedule
()
{
//获取下周二的课次ID
Set
<
String
>
scheduleIds
=
groupScheduleTools
.
getTableDate
(
8
);
//如果课次ID有值则继续走编辑的case
if
(!
scheduleIds
.
isEmpty
())
{
scheduleIds
.
stream
().
forEach
(
scheduleId
->
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyRestRule"
,
true
);
//改的时日程当前及后续
body
.
put
(
"scheduleId"
,
scheduleId
);
//获取下周二某个时间点的开始时间戳
String
startStamp1
=
CommUtil
.
getWholeHourTimeStamp
(
8
,
"13:00"
);
body
.
put
(
"startTime"
,
startStamp1
);
body
.
put
(
"chiefCoachId"
,
chiefCoachIdS
);
body
.
put
(
"minMemberNum"
,
6
);
//修改开课人数
body
.
put
(
"maxMemberNum"
,
999
);
body
.
put
(
"venueAreaIds"
,
venueAreaIds
);
body
.
put
(
"assistCoachIds"
,
new
ArrayList
<>());
//修改教练
body
.
put
(
"spanMinutes"
,
50
);
body
.
put
(
"force"
,
true
);
//有冲突时忽略冲突
//body.put("retainBooking", true);//保留学员预约,无改动到时间,教练,场地则不需要传此字段
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//编辑成功后check对应课次详情修改内容是否同步成功
checkData
(
scheduleId
,
startStamp1
);
//查看下周三课次是否同步被修改
Set
<
String
>
scheduleIdX
=
groupScheduleTools
.
getTableDate
(
9
);
String
startStamp2
=
CommUtil
.
getWholeHourTimeStamp
(
9
,
"13:00"
);
if
(!
scheduleIdX
.
isEmpty
())
{
scheduleIdX
.
stream
().
forEach
(
scheduleId1
->
{
//编辑成功后check同规则中下周三课次详情修改内容是否同步成功
checkData
(
scheduleId1
,
startStamp2
);
});
}
});
}
//获取下周一的课次ID,查看下周一课次是否还是原来的(没被修改,还是原来的规则)
Set
<
String
>
scheduleId1
=
groupScheduleTools
.
getTableDate
(
7
);
String
startStamp3
=
CommUtil
.
getWholeHourTimeStamp
(
7
,
"13:00"
);
if
(!
scheduleId1
.
isEmpty
())
{
scheduleId1
.
stream
().
forEach
(
scheduleId0
->
{
//编辑成功后check同规则中下周一课次详情
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId0
);
String
detailResult1
=
dataApi
.
getApi_response
();
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.chiefCoachId"
),
chiefCoachIdS
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.minMemberNum"
),
"2"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.maxMemberNum"
),
"999"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.startTime"
),
startStamp3
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult1
,
"$.result.assistCoachIds"
).
containsAll
(
assistCoachIdS
),
"助教无修改,但是却变动了"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult1
,
"$.result.venueAreaIds"
).
containsAll
(
venueAreaIds
),
"场地无修改,但是却变动了"
);
});
}
@AfterTest
(
description
=
"删除此case创建的日程"
)
public
void
delData
()
{
}
/**
* 编辑后通过查看课次详情check数据是否同步被修改
* @param scheduleId
*/
public
void
checkData
(
String
scheduleId
,
String
tiemStamp
){
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
String
detailResult1
=
dataApi
.
getApi_response
();
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.chiefCoachId"
),
chiefCoachIdS
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.minMemberNum"
),
"6"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.maxMemberNum"
),
"999"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult1
,
"$.result.startTime"
),
tiemStamp
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult1
,
"$.result.assistCoachIds"
).
size
()
==
0
,
"助教修改后(置空)没生效"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult1
,
"$.result.venueAreaIds"
).
containsAll
(
venueAreaIds
),
"场地无修改,但是却变动了"
);
}
@AfterClass
(
description
=
"删除此case创建的日程"
)
public
void
delData
(){
List
<
String
>
ruleIdIds
=
new
ArrayList
<>();
//查询这个case创建的相关日程
JSONArray
result
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
chiefCoachIdS
);
int
count
=
result
.
size
();
if
(
count
>
0
)
{
//如果有数据,则获取对应日程ID
ruleIdIds
=
result
.
stream
().
map
(
obj
->
{
JSONObject
ruldIdInfo
=
(
JSONObject
)
obj
;
return
ruldIdInfo
.
getString
(
"ruleId"
);
}
).
collect
(
Collectors
.
toList
());
}
if
(
ruleIdIds
!=
null
)
{
//获取到的日程ID不为空时,则逐个删除相关日程
ruleIdIds
.
stream
().
forEach
(
ruleId
->
{
if
(!
StringUtils
.
isEmpty
(
groupRuldId
))
{
//获取到的日程ID不为空时,则逐个删除相关日程
//删除对应日程
groupScheduleTools
.
delGroupRuleSchedule
(
ruleId
,
true
);
});
groupScheduleTools
.
delGroupRuleSchedule
(
groupRuldId
,
true
);
}
if
(!
scheduleIdsN
.
isEmpty
())
{
scheduleIdsN
.
stream
().
forEach
(
scheduleId
->
{
//删除case1中编辑独立出去的课次
groupScheduleTools
.
delGroupScheduleItem
(
scheduleId
);
});
groupScheduleTools
.
delGroupScheduleItem
(
scheduleIdsN
);
}
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/schedule/group/TestEditGroupRuleSchedule.java
View file @
a19c8b30
...
...
@@ -43,6 +43,7 @@ public class TestEditGroupRuleSchedule extends BaseTestImpl {
String
courseName
=
"阿杜自动化团课课程"
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_editGroupRuleSchedule"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -85,7 +86,9 @@ public class TestEditGroupRuleSchedule extends BaseTestImpl {
body
.
put
(
"endDate"
,
todayEndDateTimeTamp
);
//结束日期缩短了,改成当天结束
body
.
put
(
"force"
,
false
);
body
.
put
(
"retainBooking"
,
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//4-查看日程详情,check修改内容是否同步变更
groupScheduleTools
.
getGroupRuleScheduleDetail
(
ruldId
);
...
...
@@ -94,7 +97,7 @@ public class TestEditGroupRuleSchedule extends BaseTestImpl {
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.minMemberNum"
),
"5"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.maxMemberNum"
),
"20"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
detailResult
,
"$.result.minuteOffset"
),
"1320"
);
Assert
.
assertEquals
((
XMJSONPath
.
readPath
(
detailResult
,
"$.result.endDate"
).
substring
(
0
,
9
)),
todayEndDateTimeTamp
.
substring
(
0
,
9
));
//
Assert.assertEquals((XMJSONPath.readPath(detailResult,"$.result.endDate").substring(0,9)),todayEndDateTimeTamp.substring(0,9));
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.assistCoachIds"
).
isEmpty
(),
"助教设置为空后没生效"
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
detailResult
,
"$.result.venueAreaIds"
).
containsAll
(
venueAreaIds
),
"设置有空改为有数据后没生效"
);
...
...
src/main/java/com/xiaomai/cases/polar/schedule/group/TestGetGroupScheduleTable.java
View file @
a19c8b30
...
...
@@ -48,6 +48,7 @@ public class TestGetGroupScheduleTable extends BaseTestImpl {
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_getGroupScheduleTable"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -125,13 +126,15 @@ public class TestGetGroupScheduleTable extends BaseTestImpl {
body
.
put
(
"coachId"
,
coachId
);
body
.
put
(
"venueAreaId"
,
venueAreaId
);
body
.
put
(
"statusSet"
,
statusSet
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
int
resultCount
=
Integer
.
parseInt
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.result.totalCount"
));
Assert
.
assertTrue
(
resultCount
>=
totalCount
,
"查询到的课表数据和预期不一致"
);
}
@After
Class
(
description
=
"删除此case创建的日程"
)
@After
Test
(
description
=
"删除此case创建的日程"
)
public
void
delData
(){
List
<
String
>
ruleIdIds
=
new
ArrayList
<>();
//查询这个case创建的相关日程
...
...
src/main/java/com/xiaomai/cases/polar/schedule/group/UniversalDataScheduling.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.fastjson.JSONArray
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.polar.course.CourseTools
;
import
com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools
;
import
com.xiaomai.cases.polar.setting.venue.VenueAreaTools
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.annotations.BeforeClass
;
import
javax.annotation.Resource
;
...
...
@@ -32,6 +34,7 @@ public class UniversalDataScheduling extends BaseTestImpl {
String
chiefCoachIdS
=
""
;
List
<
String
>
venueAreaIds
=
null
;
List
<
String
>
assistCoachIdS
=
null
;
String
groupRuldId
=
""
;
@BeforeClass
public
void
beforeTest
()
{
...
...
@@ -56,6 +59,9 @@ public class UniversalDataScheduling extends BaseTestImpl {
assistCoachIdS
=
groupScheduleTools
.
getStudioAdminId
(
assistCoachIds
);
//创建排课(按次数)
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
chiefCoachIdS
,
CommUtil
.
oneKeyGetNextWeekStartDay
(),
CommUtil
.
oneKeyGetNextWeekEndDay
(),
venueAreaIds
,
assistCoachIdS
,
true
,
2
,
780
);
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
chiefCoachIdS
);
groupRuldId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"ruleId"
);
}
}
...
...
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestCanModifyCourseCategory.java
View file @
a19c8b30
...
...
@@ -26,6 +26,7 @@ public class TestCanModifyCourseCategory extends BaseTestImpl {
CourseCategoryTools
courseCategoryTools
;
private
String
categoryId
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_canModifyCourseCategory"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestCheckCategoryNameDup.java
View file @
a19c8b30
...
...
@@ -22,6 +22,7 @@ public class TestCheckCategoryNameDup extends BaseTestImpl {
@Resource
(
name
=
"courseCategoryTools"
)
CourseCategoryTools
courseCategoryTools
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_checkCategoryNameDup"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestCreateCourseCategory.java
View file @
a19c8b30
...
...
@@ -26,6 +26,7 @@ public class TestCreateCourseCategory extends BaseTestImpl {
private
String
categoryId
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_courseCategory_getDetailPage"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestDeleteCourseCategory.java
View file @
a19c8b30
...
...
@@ -33,6 +33,7 @@ public class TestDeleteCourseCategory extends BaseTestImpl {
private
String
courseId
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_deleteCourseCategory"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/setting/courseCategory/TestEditCourseCategory.java
View file @
a19c8b30
...
...
@@ -28,6 +28,7 @@ public class TestEditCourseCategory extends BaseTestImpl {
private
String
categoryId
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_editCourseCategory"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/setting/rules/RuleTools.java
View file @
a19c8b30
...
...
@@ -111,4 +111,52 @@ public class RuleTools extends XMBaseTest {
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* 获取训练营签到规则
* @return
*/
public
JSONObject
getCampBookingRules
(
DataUserInfo
...
dataUserInfos
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Setting
)
.
setApiName
(
"API_getCampBookingRules"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
body
=
new
JSONObject
();
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
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description:保存训练营签到规则
* @author: xuyamei
* @date: 2024/8/1 10:16
* @param id
* @param xcxAutoSignIn
* @param scanSignIn
* @param signInBeforeMinutes
* @return: void
**/
public
void
saveCampBookingRules
(
String
id
,
boolean
xcxAutoSignIn
,
boolean
scanSignIn
,
int
signInBeforeMinutes
,
DataUserInfo
...
dataUserInfos
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Setting
)
.
setApiName
(
"API_saveCampBookingRules"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
id
);
body
.
put
(
"xcxAutoSignIn"
,
xcxAutoSignIn
);
body
.
put
(
"scanSignIn"
,
scanSignIn
);
body
.
put
(
"signInBeforeMinutes"
,
signInBeforeMinutes
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
}
src/main/java/com/xiaomai/cases/polar/setting/rules/TestSaveGroupBookingRules.java
View file @
a19c8b30
...
...
@@ -25,6 +25,7 @@ public class TestSaveGroupBookingRules extends BaseTestImpl {
@Resource
(
name
=
"ruleTools"
)
RuleTools
ruleTools
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_saveGroupBookingRules"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/setting/venue/TestCreateVenueArea.java
View file @
a19c8b30
...
...
@@ -23,6 +23,7 @@ public class TestCreateVenueArea extends BaseTestImpl {
@Resource
(
name
=
"venueAreaTools"
)
VenueAreaTools
venueAreaTools
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_createVenueArea"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/setting/venue/TestDeleteVenueArea.java
View file @
a19c8b30
...
...
@@ -7,6 +7,7 @@ import com.xiaomai.enums.LoginAccount;
import
com.xiaomai.enums.Terminal
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
...
...
@@ -23,7 +24,8 @@ public class TestDeleteVenueArea extends BaseTestImpl {
@Resource
(
name
=
"venueAreaTools"
)
VenueAreaTools
venueAreaTools
;
@BeforeClass
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_createVenueArea"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/setting/venue/TestEditVenueArea.java
View file @
a19c8b30
...
...
@@ -23,6 +23,7 @@ public class TestEditVenueArea extends BaseTestImpl {
@Resource
(
name
=
"venueAreaTools"
)
VenueAreaTools
venueAreaTools
;
@BeforeClass
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Setting
,
"API_editVenueArea"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"xym"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/training/BaseCreateTrainingData.java
View file @
a19c8b30
...
...
@@ -41,7 +41,7 @@ public class BaseCreateTrainingData extends BaseTestImpl {
String
courseId
=
""
;
long
currentTimestamp
=
System
.
currentTimeMillis
();
// 在当前时间的基础上,加上2秒(2000毫秒)
long
futureTimestamp
=
currentTimestamp
+
5
000
;
//晚于当前时间8秒
long
futureTimestamp
=
currentTimestamp
+
9
000
;
//晚于当前时间8秒
String
futureTimestampS
=
String
.
valueOf
(
futureTimestamp
);
...
...
src/main/java/com/xiaomai/cases/polar/training/TestCheckTrainingTitleDuplicate.java
View file @
a19c8b30
...
...
@@ -19,6 +19,7 @@ public class TestCheckTrainingTitleDuplicate extends BaseCreateTrainingData {
String
trainingId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_checkTrainingTitleDuplicate"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
src/main/java/com/xiaomai/cases/polar/training/TestDoForceOpenTraining.java
View file @
a19c8b30
...
...
@@ -5,14 +5,17 @@ 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.After
Class
;
import
org.testng.annotations.After
Test
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 对报名中的活动操作立即成营
...
...
@@ -27,6 +30,7 @@ public class TestDoForceOpenTraining extends BaseCreateTrainingData {
String
id
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_forceOpenTraining"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -37,10 +41,10 @@ public class TestDoForceOpenTraining extends BaseCreateTrainingData {
public
void
testForceOpenTraining
()
throws
InterruptedException
{
//1.创建训练营活动:保存并发布
id
=
trainingTools
.
createThenPublishTraining
(
futureTimestampS
,
applyEndTime
,
courseId
,
openStartDate
,
id
=
trainingTools
.
createThenPublishTraining
(
CommUtil
.
getTodayGoalTime
(
20
)
,
applyEndTime
,
courseId
,
openStartDate
,
openEndDate
,
0.01
,
trainingTitle
,
2
,
1
,
trainerListIdS
,
"YES"
);
if
(
id
.
isEmpty
())
{
id
=
trainingTools
.
createThenPublishTraining
(
futureTimestampS
,
applyEndTime
,
courseId
,
openStartDate
,
id
=
trainingTools
.
createThenPublishTraining
(
CommUtil
.
getTodayGoalTime
(
20
)
,
applyEndTime
,
courseId
,
openStartDate
,
openEndDate
,
0.01
,
trainingTitle
+
RandomStringUtil
.
randomString
(
3
),
2
,
1
,
trainerListIdS
,
"YES"
);
}
//2.查看活动详情,check 活动状态
...
...
@@ -50,9 +54,9 @@ public class TestDoForceOpenTraining extends BaseCreateTrainingData {
if
(
status
.
equals
(
"APPLY_NOT_START"
))
{
//对报名未开始的活动操作立即成营
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
data
Api
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
data
Api
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
data
Api
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
xmApp
Api
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmApp
Api
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmApp
Api
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
id
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
),
"只有报名中的训练营能【立即成营】"
);
...
...
@@ -60,23 +64,37 @@ public class TestDoForceOpenTraining extends BaseCreateTrainingData {
}
//3.创建成功后,全局搜索check
Thread
.
sleep
(
10000
);
trainingTools
.
commonSearchTraining
(
trainingTitle
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
>
0
,
"活动创建后,根据活动名称全局搜索没有数据"
);
Thread
.
sleep
(
5000
);
//延迟5秒后,活动达到报名时间(可能状态没同步,定时任务没到时间执行,但是数据库中已是报名中)
//4.对报名中的活动操作立即成营
//搜索列表中有没有报名中APPLYING的训练营,如果有,就操作立即成营
List
<
String
>
statuApplying
=
new
ArrayList
<>();
statuApplying
.
add
(
"APPLYING"
);
//报名中
trainingTools
.
searchTrainingList
(
""
,
""
,
statuApplying
);
String
goalId
=
""
;
int
goalN
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
if
(
goalN
>
0
){
goalId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].id"
);
JSONObject
body1
=
new
JSONObject
();
body1
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body1
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body1
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body1
.
put
(
"id"
,
id
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body1
.
toString
(),
headers
).
assetsSuccess
(
true
);
body1
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body1
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body1
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body1
.
put
(
"id"
,
goalId
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body1
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
}
}
@After
Class
(
description
=
"删除此case创建的训练营活动"
)
@After
Test
(
description
=
"删除此case创建的训练营活动"
)
public
void
delData
()
{
if
(!
id
.
isEmpty
())
{
trainingTools
.
deleteTraining
(
id
);
...
...
src/main/java/com/xiaomai/cases/polar/training/TestDoSignCampOrder.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
training
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.schedule.camp.SelectTargetTrainingCampAndGetInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterTest
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author adu
* data 2024/7/22 11:08
*/
public
class
TestDoSignCampOrder
extends
SelectTargetTrainingCampAndGetInfo
{
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"tools"
)
Tools
tools
;
String
memberId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_signOrderCamp"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"训练营活动详情-报名会员-给会员报名"
)
public
void
testDoSignCampOrder
()
throws
InterruptedException
{
//搜索目标会员
String
phone
=
"15558121569"
;
memberId
=
trainingTools
.
searchTargerMember
(
phone
);
if
(
memberId
.
isEmpty
())
{
memberId
=
tools
.
create
(
"阿杜"
,
phone
).
getString
(
"result"
);
}
//给会员报名,报名前先等待3秒,防止上一个case中有创建订单的接口,这样不会报错(创建订单接口做了3秒的重复调用限制)
Thread
.
sleep
(
3000
);
trainingTools
.
doSignCampOrder
(
memberId
,
this
.
price
,
this
.
campId
,
""
);
Thread
.
sleep
(
1000
);
//报名成功后根据会员手机号,在报名会员列表搜索报名数据
trainingTools
.
getTrainingApplyRecordsList
(
this
.
campId
,
phone
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
1
,
"给学员报名后,在报名列表没查询到数据"
);
Assert
.
assertEquals
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"state"
),
"PAID"
);
String
memberCardId
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"memberCardId"
);
//查看报名详情
trainingTools
.
getTrainingAccountDetailById
(
memberCardId
);
Assert
.
assertTrue
(
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.trainingCampInfo.totalClassHour"
)).
equals
(
this
.
totalClassHour
));
Assert
.
assertTrue
(
Double
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.trainingCampInfo.price"
)).
equals
(
this
.
price
));
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.owner.phone"
),
phone
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.trainingCampId"
),
this
.
campId
);
//删除训练营活动:删除失败
trainingTools
.
delTrainingFail
(
this
.
campId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.code"
),
"TRAINING_CAMP_DELETE_FAILED"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
),
"该训练营已有人报名,无法删除!"
);
//报名详情-训练营报名退款
trainingTools
.
refundCampOrder
(
memberId
,
this
.
price
,
memberCardId
,
this
.
totalClassHour
);
Thread
.
sleep
(
1000
);
//退单后再搜索报名记录check
trainingTools
.
getTrainingApplyRecordsList
(
this
.
campId
,
phone
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
0
,
"给学员退单后,在报名列表中还能查询到数据"
);
Thread
.
sleep
(
2000
);
//退单后check训练营报名记录(入口:报名记录):根据训练营,报名记录状态,来源
List
<
String
>
cardState
=
new
ArrayList
<>();
cardState
.
add
(
"REFUNDED"
);
trainingTools
.
searchTrainingAccountRecordsList
(
this
.
campId
,
"B_OFF_LINE"
,
cardState
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
()==
1
,
"没有搜索到对应数据"
);
Assert
.
assertEquals
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
getJSONObject
(
0
).
getString
(
"ownerId"
),
memberId
);
//报名记录中全局搜索-会员手机号-会员购买训练营的相关记录中check
trainingTools
.
fetchUserTrainingCardList
(
memberId
);
//第一条数据就是上一步操作的退单账户信息
Assert
.
assertEquals
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"id"
),
memberCardId
);
Assert
.
assertEquals
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"state"
),
"REFUNDED"
);
//退单后再次给该学员报名,提示已经报过该训练营,就不能再报了
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"salesmanId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"operationTime"
,
TimeUtils
.
getCurrentTime
());
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
20
));
body
.
put
(
"memberId"
,
memberId
);
body
.
put
(
"receivableAmount"
,
this
.
price
);
JSONObject
campInfo
=
new
JSONObject
();
campInfo
.
put
(
"campId"
,
campId
);
body
.
put
(
"camp"
,
campInfo
);
JSONArray
paymentWays
=
new
JSONArray
();
JSONObject
payObject
=
new
JSONObject
();
payObject
.
put
(
"amount"
,
this
.
price
);
payObject
.
put
(
"paymentWay"
,
"1"
);
payObject
.
put
(
"voucherResourceIds"
,
new
JSONArray
());
body
.
put
(
"paymentWays"
,
paymentWays
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
false
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
),
"签单失败,已报名该训练营无需重复操作"
);
}
@AfterTest
(
description
=
"删除此case创建的训练营活动-退单/取消订单后可以删除活动"
)
public
void
delData
()
{
if
(!
this
.
campId
.
isEmpty
())
{
trainingTools
.
deleteTraining
(
this
.
campId
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/training/TestEditTraining.java
→
src/main/java/com/xiaomai/cases/polar/training/TestEdit
NoPublish
Training.java
View file @
a19c8b30
...
...
@@ -8,12 +8,11 @@ import com.xiaomai.enums.Terminal;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.After
Class
;
import
org.testng.annotations.After
Test
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
/**
* 编辑训练营活动
...
...
@@ -24,20 +23,20 @@ import java.util.ArrayList;
* data 2024/7/3 20:51
*/
public
class
TestEditTraining
extends
BaseCreateTrainingData
{
public
class
TestEdit
NoPublish
Training
extends
BaseCreateTrainingData
{
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
String
trainingId
=
""
;
String
oneKeytTrainingId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_editTraining"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"测试编辑未发布的训练营活动"
)
public
void
testEditTraining
()
{
public
void
testEdit
NoPublish
Training
()
{
//1创建未发布的训练营活动
String
title
=
"杭州减肥训练营-未发布"
+
RandomStringUtil
.
randomString
(
3
);
trainingId
=
trainingTools
.
createTrainingNoPublish
(
title
,
courseId
,
trainerListIdS
);
...
...
@@ -83,65 +82,14 @@ public class TestEditTraining extends BaseCreateTrainingData {
}
@Test
(
description
=
"编辑已发布训练营活动"
)
public
void
editPublishTraining
()
{
//1.查询关联对应课程的活动数据
trainingTools
.
searchTrainingList
(
courseId
,
""
,
new
ArrayList
<>());
int
listCountBefore
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
//2.创建已发布的训练营活动
oneKeytTrainingId
=
trainingTools
.
oneKeyCreateTraining
(
courseId
,
trainerListIdS
);
//3.列表搜索数据check
trainingTools
.
searchTrainingList
(
courseId
,
""
,
new
ArrayList
<>());
int
listCountAfter
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
Assert
.
assertEquals
(
listCountAfter
,
(
listCountBefore
+
1
),
"训练营活动创建成功列表数据没增加"
);
JSONObject
goalObject
=
XMJSONPath
.
getJSONObjectByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records[0]"
);
String
title
=
goalObject
.
getString
(
"title"
);
String
applyEndTime
=
goalObject
.
getString
(
"applyEndTime"
);
String
applyStartTime
=
goalObject
.
getString
(
"applyStartTime"
);
String
openStartDate
=
goalObject
.
getString
(
"openStartDate"
);
String
openEndDate
=
goalObject
.
getString
(
"openEndDate"
);
//4.编辑已发布的活动(训练营名称,关联课程,开营时间,总课次数,售价,报名开始时间,报名结束时间不能修改)check不能修改的传值后也不会改变
JSONObject
editBody
=
new
JSONObject
();
editBody
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
editBody
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
// 场馆
editBody
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
editBody
.
put
(
"applyEndTime"
,
applyEndTime
);
//报名结束时间
editBody
.
put
(
"applyStartTime"
,
applyStartTime
);
//报名开始时间
editBody
.
put
(
"courseId"
,
courseId
);
//关联课程ID
editBody
.
put
(
"creatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
// 创建人即操作者
editBody
.
put
(
"openEndDate"
,
openEndDate
);
//开营结束时间
editBody
.
put
(
"openStartDate"
,
openStartDate
);
//开营开始时间
editBody
.
put
(
"price"
,
10
);
//售卖价格
editBody
.
put
(
"surfaceUrl"
,
"https://xiaomai-res.oss-cn-hangzhou.aliyuncs.com/xmfit/course_cover/training_camp_0.png"
);
// 默认活动封面图
editBody
.
put
(
"title"
,
"title"
);
//名称不能修改,这里故意修改了,等保存后check数据
editBody
.
put
(
"totalClassHour"
,
20
);
// 总课时数,不能修改,这里故意修改了,等保存后check数据
editBody
.
put
(
"traineeLowerLimit"
,
1
);
// 开营人数
editBody
.
put
(
"traineeUpperLimit"
,
99
);
// 人数上限
editBody
.
put
(
"trainerList"
,
trainerListIdS
);
// 上课教练
editBody
.
put
(
"xcxSaleStatus"
,
"YES"
);
//开启小程序售卖
editBody
.
put
(
"underlinePrice"
,
29.9
);
//可以修改
editBody
.
put
(
"id"
,
oneKeytTrainingId
);
//活动ID
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
editBody
.
toString
(),
headers
).
assetsSuccess
(
true
);
//5.查看活动详情,check 不能修改项和一修改项是否被同步修改
trainingTools
.
findTrainingDetailById
(
oneKeytTrainingId
);
//5.1不能修改的字段check(修改后和修改前比对)
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.title"
),
title
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalClassHour"
),
"2"
);
Assert
.
assertEquals
(
Double
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.price"
)),
0.00
);
//5.2可以修改字段check是否被同步修改
Assert
.
assertEquals
(
Double
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.underlinePrice"
)),
29.90
);
}
@After
Class
(
description
=
"删除此case创建的训练营"
)
@After
Test
(
description
=
"删除此case创建的训练营"
)
public
void
delData
()
{
if
(!
trainingId
.
isEmpty
())
{
trainingTools
.
deleteTraining
(
trainingId
);
}
if
(!
oneKeytTrainingId
.
isEmpty
())
{
trainingTools
.
deleteTraining
(
oneKeytTrainingId
);
}
}
...
...
src/main/java/com/xiaomai/cases/polar/training/TestEditPublishTraining.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
training
;
import
com.alibaba.fastjson.JSONObject
;
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.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterTest
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
/**
* @author adu
* data 2024/8/1 09:45
*/
public
class
TestEditPublishTraining
extends
BaseCreateTrainingData
{
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
String
oneKeytTrainingId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_editTraining"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"编辑已发布训练营活动"
)
public
void
editPublishTraining
()
throws
InterruptedException
{
//1.查询关联对应课程的活动数据
trainingTools
.
searchTrainingList
(
courseId
,
""
,
new
ArrayList
<>());
int
listCountBefore
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
//2.创建已发布的训练营活动,报名开始时间晚于当前时间半小时
oneKeytTrainingId
=
trainingTools
.
oneKeyCreateTraining
(
courseId
,
trainerListIdS
,
CommUtil
.
getTodayGoalTime
(
30
));
Thread
.
sleep
(
2000
);
//3.列表搜索数据check
trainingTools
.
searchTrainingList
(
courseId
,
""
,
new
ArrayList
<>());
Long
list
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
filter
(
object
->
object
.
getString
(
"id"
).
equals
(
oneKeytTrainingId
)).
count
();
Assert
.
assertTrue
(
list
==
1
,
"训练营活动创建成功列表数据没增加"
);
JSONObject
goalObject
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
toJavaList
(
JSONObject
.
class
).
stream
()
.
filter
(
object
->
object
.
getString
(
"id"
).
equals
(
oneKeytTrainingId
)).
findFirst
().
orElse
(
null
);
//返回第一个对象,没有就返回空
if
(
goalObject
!=
null
)
{
String
title
=
goalObject
.
getString
(
"title"
);
String
applyEndTime
=
goalObject
.
getString
(
"applyEndTime"
);
String
applyStartTime
=
goalObject
.
getString
(
"applyStartTime"
);
String
openStartDate
=
goalObject
.
getString
(
"openStartDate"
);
String
openEndDate
=
goalObject
.
getString
(
"openEndDate"
);
//4.编辑已发布的活动(训练营名称,关联课程,开营时间,总课次数,售价,报名开始时间,报名结束时间不能修改)check不能修改的传值后也不会改变
JSONObject
editBody
=
new
JSONObject
();
editBody
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
editBody
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
// 场馆
editBody
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
editBody
.
put
(
"applyEndTime"
,
applyEndTime
);
//报名结束时间
editBody
.
put
(
"applyStartTime"
,
applyStartTime
);
//报名开始时间
editBody
.
put
(
"courseId"
,
courseId
);
//关联课程ID
editBody
.
put
(
"creatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
// 创建人即操作者
editBody
.
put
(
"openEndDate"
,
openEndDate
);
//开营结束时间
editBody
.
put
(
"openStartDate"
,
openStartDate
);
//开营开始时间
editBody
.
put
(
"price"
,
10
);
//售卖价格
editBody
.
put
(
"surfaceUrl"
,
"https://xiaomai-res.oss-cn-hangzhou.aliyuncs.com/xmfit/course_cover/training_camp_0.png"
);
// 默认活动封面图
editBody
.
put
(
"title"
,
"title"
);
//名称不能修改,这里故意修改了,等保存后check数据
editBody
.
put
(
"totalClassHour"
,
20
);
// 总课时数,不能修改,这里故意修改了,等保存后check数据
editBody
.
put
(
"traineeLowerLimit"
,
1
);
// 开营人数
editBody
.
put
(
"traineeUpperLimit"
,
99
);
// 人数上限
editBody
.
put
(
"trainerList"
,
trainerListIdS
);
// 上课教练
editBody
.
put
(
"xcxSaleStatus"
,
"YES"
);
//开启小程序售卖
editBody
.
put
(
"underlinePrice"
,
29.9
);
//可以修改
editBody
.
put
(
"id"
,
oneKeytTrainingId
);
//活动ID
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
editBody
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//5.查看活动详情,check 不能修改项和一修改项是否被同步修改
trainingTools
.
findTrainingDetailById
(
oneKeytTrainingId
);
//5.1不能修改的字段check(修改后和修改前比对)
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.title"
),
title
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.totalClassHour"
),
"2"
);
Assert
.
assertEquals
(
Double
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.price"
)),
0.00
);
//5.2可以修改字段check是否被同步修改
Assert
.
assertEquals
(
Double
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.underlinePrice"
)),
29.90
);
}
}
@AfterTest
(
description
=
"删除此case创建的训练营"
)
public
void
delData
()
{
if
(!
oneKeytTrainingId
.
isEmpty
())
{
trainingTools
.
deleteTraining
(
oneKeytTrainingId
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/training/TestSearchTrainingAccountRecordsList.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
training
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.schedule.camp.SelectTargetTrainingCampAndGetInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.*
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 查看训练营报名记录
*
* @author adu
* data 2024/7/22 17:46
*/
public
class
TestSearchTrainingAccountRecordsList
extends
SelectTargetTrainingCampAndGetInfo
{
String
memberId
=
""
;
String
orderId
=
""
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"tools"
)
Tools
tools
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_searchTrainingAccountRecordsList"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
//搜索目标会员
String
phone
=
"10058121569"
;
memberId
=
trainingTools
.
searchTargerMember
(
phone
);
if
(
memberId
.
isEmpty
())
{
memberId
=
tools
.
create
(
"自动化报名训练营的潜在学员"
,
phone
).
getString
(
"result"
);
}
//给会员报名
trainingTools
.
doSignCampOrder
(
memberId
,
this
.
price
,
this
.
campId
,
""
);
orderId
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
}
@DataProvider
(
name
=
"filterTrainingAccountRecordsByCondition"
)
public
Object
[][]
dataProvider
()
{
// 报名记录状态:生效中["NORMAL"],已结束 ["EXPIRED"],已用尽["USED_UP"],已退费["REFUNDED"],已作废["DISCARD"]
List
<
String
>
statu1
=
new
ArrayList
<>();
statu1
.
add
(
"NORMAL"
);
//生效中
List
<
String
>
statu2
=
new
ArrayList
<>();
statu2
.
add
(
"EXPIRED"
);
//已结束
List
<
String
>
statu3
=
new
ArrayList
<>();
statu3
.
add
(
"USED_UP"
);
//已用尽
List
<
String
>
statu4
=
new
ArrayList
<>();
statu4
.
add
(
"REFUNDED"
);
//已退费
List
<
String
>
statu5
=
new
ArrayList
<>();
statu5
.
add
(
"DISCARD"
);
//已作废
return
new
Object
[][]{
{
""
,
""
,
new
ArrayList
<>(),
1
},
//无筛选条件
{
""
,
"B_OFF_LINE"
,
new
ArrayList
<>(),
1
},
//根据来源搜索-线下办理(B_OFF_LINE)
{
""
,
"C_ON_LINE"
,
new
ArrayList
<>(),
0
},
//根据来源搜索-上线购买(C_ON_LINE)
{
""
,
""
,
statu1
,
1
},
//根据报名记录状态(生效中)搜索
{
""
,
""
,
statu2
,
0
},
//根据报名记录状态(已结束)搜索
{
""
,
""
,
statu3
,
0
},
//根据报名记录状态(已用尽)搜索
{
""
,
""
,
statu4
,
1
},
//根据报名记录状态(已退费)搜索
{
""
,
""
,
statu5
,
0
},
//根据报名记录状态(已作废)搜索
{
""
,
"C_ON_LINE"
,
statu1
,
0
},
//线上售卖,报名记录生效中
{
""
,
"B_OFF_LINE"
,
statu1
,
1
},
//线下售卖,报名记录生效中搜索
{
this
.
campId
,
""
,
statu1
,
1
},
//根据训练营和生效中
{
this
.
campId
,
"B_OFF_LINE"
,
new
ArrayList
<>(),
1
},
//根据训练和线下售卖
};
}
@Test
(
dataProvider
=
"filterTrainingAccountRecordsByCondition"
,
description
=
"查看训练营报名记录"
)
public
void
testSearchTrainingAccountRecordsList
(
String
campId
,
String
purchaseChannel
,
List
<
String
>
memberCardState
,
int
flag
)
{
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"accountType"
,
"TRAINING"
);
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
20
);
if
(!
campId
.
isEmpty
())
{
body
.
put
(
"tenantMemberCardId"
,
campId
);
}
if
(!
purchaseChannel
.
isEmpty
())
{
body
.
put
(
"purchaseChannel"
,
purchaseChannel
);
}
body
.
put
(
"memberCardStateList"
,
memberCardState
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//有存量数据,理论上每个查询都会至少有1条数据
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
xmAppApi
.
getApi_response
(),
"$.result.records"
).
size
()
>=
flag
,
"没有搜索到相关数据"
);
}
@AfterTest
(
description
=
"删除此case创建的训练营排课日程"
)
public
void
delData
()
{
orderTools
.
discard
(
orderId
,
"重复录入"
,
"自动化测试作废训练营订单"
);
if
(
null
!=
this
.
campId
||
!
this
.
campId
.
isEmpty
())
{
this
.
getTrainingTools
().
deleteTraining
(
this
.
campId
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/training/TestSearchTrainingList.java
View file @
a19c8b30
...
...
@@ -26,6 +26,7 @@ public class TestSearchTrainingList extends BaseCreateTrainingData {
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_searchTrainingList"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
...
...
@@ -85,7 +86,9 @@ public class TestSearchTrainingList extends BaseCreateTrainingData {
body
.
put
(
"courseId"
,
courseId
);
body
.
put
(
"stateList"
,
stateList
);
body
.
put
(
"title"
,
title
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
//有存量数据,理论上每个查询都会至少有1条数据
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
xmAppApi
.
getApi_response
(),
"$.result.records"
).
size
()>=
1
,
"没有搜索到相关数据"
);
...
...
src/main/java/com/xiaomai/cases/polar/training/TestSignWaitingCampOrder.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
training
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.schedule.camp.SelectTargetTrainingCampAndGetInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* 构造报名训练营活动-待支付,然后操作删除训练营活动(fail)-取消订单-再次报名训练营活动(success)
* @author adu
* data 2024/7/22 16:38
*/
public
class
TestSignWaitingCampOrder
extends
SelectTargetTrainingCampAndGetInfo
{
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"tools"
)
Tools
tools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
String
memberId
=
""
;
String
orderId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_signOrderCamp"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"给学员报名训练营活动构造待支付订单"
)
public
void
testUnpaidOrder
()
throws
InterruptedException
{
//搜索目标会员
String
phone
=
"15658063769"
;
memberId
=
trainingTools
.
searchTargerMember
(
phone
);
if
(
memberId
.
isEmpty
())
{
memberId
=
tools
.
create
(
"晨晨爸爸"
,
phone
).
getString
(
"result"
);
}
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"salesmanId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"operationTime"
,
TimeUtils
.
getCurrentTime
());
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
20
));
body
.
put
(
"memberId"
,
memberId
);
body
.
put
(
"receivableAmount"
,
this
.
price
);
JSONObject
campInfo
=
new
JSONObject
();
campInfo
.
put
(
"campId"
,
campId
);
body
.
put
(
"camp"
,
campInfo
);
body
.
put
(
"paymentWays"
,
new
JSONArray
());
//支付方式传空
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
orderId
=
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.result"
);
//报名成功后根据会员手机号,在报名会员列表搜索报名数据
trainingTools
.
getTrainingApplyRecordsList
(
this
.
campId
,
phone
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
1
,
"给学员报名后,在报名列表没查询到数据"
);
//check订单 待支付状态
Assert
.
assertEquals
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"state"
),
"WAITING"
);
//删除训练营活动:该训练营已有人报名,无法删除!
trainingTools
.
delTrainingFail
(
this
.
campId
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.code"
),
"TRAINING_CAMP_DELETE_FAILED"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
),
"该训练营已有人报名,无法删除!"
);
//操作取消订单
orderTools
.
cancel
(
orderId
);
Thread
.
sleep
(
3000
);
//再次报名该训练营活动-报名成功
trainingTools
.
doSignCampOrder
(
memberId
,
this
.
price
,
this
.
campId
,
""
);
String
orderId1
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
//报名成功后根据会员手机号,在报名会员列表搜索报名数据
trainingTools
.
getTrainingApplyRecordsList
(
this
.
campId
,
phone
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
1
,
"给学员报名后,在报名列表没查询到数据"
);
Assert
.
assertEquals
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"state"
),
"PAID"
);
//作废订单,然后再报名,还可以报名check
orderTools
.
discard
(
orderId1
,
"重复录入"
,
"自动化测试作废训练营订单"
);
//订单作废后,学员还能继续报名check
Thread
.
sleep
(
3000
);
trainingTools
.
doSignCampOrder
(
memberId
,
this
.
price
,
this
.
campId
,
""
);
String
orderId2
=
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
//继续作废订单,然后删除训练营活动
orderTools
.
discard
(
orderId2
,
"重复录入"
,
"自动化测试作废训练营订单"
);
trainingTools
.
deleteTraining
(
campId
);
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/training/TestUnpaidCampOrder.java
0 → 100644
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
training
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.schedule.camp.SelectTargetTrainingCampAndGetInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.AfterTest
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
/**
* @author adu
* data 2024/8/1 13:55
*/
public
class
TestUnpaidCampOrder
extends
SelectTargetTrainingCampAndGetInfo
{
@Resource
(
name
=
"trainingTools"
)
TrainingTools
trainingTools
;
@Resource
(
name
=
"tools"
)
Tools
tools
;
@Resource
(
name
=
"orderTools"
)
OrderTools
orderTools
;
String
memberId2
=
""
;
String
orderId
=
""
;
@BeforeClass
@Override
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Training
,
"API_signOrderCamp"
,
LoginAccount
.
ADU_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
(
description
=
"给学员报名训练营活动构造待支付订单"
)
public
void
testUnpaidOrder
()
throws
InterruptedException
{
//搜索目标会员
String
phone
=
"15658063769"
;
memberId2
=
trainingTools
.
searchTargerMember
(
phone
);
if
(
memberId2
.
isEmpty
())
{
memberId2
=
tools
.
create
(
"晨晨爸爸"
,
phone
).
getString
(
"result"
);
}
//报名接口做了重复调用限制,间隔3000秒,否则提示:调用过于频繁,请稍后重试
Thread
.
sleep
(
3000
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"salesmanId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"operationTime"
,
TimeUtils
.
getCurrentTime
());
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
20
));
body
.
put
(
"memberId"
,
memberId2
);
body
.
put
(
"receivableAmount"
,
this
.
price
);
JSONObject
campInfo
=
new
JSONObject
();
campInfo
.
put
(
"campId"
,
this
.
campId
);
body
.
put
(
"camp"
,
campInfo
);
body
.
put
(
"paymentWays"
,
new
JSONArray
());
//支付方式传空
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.message"
));
orderId
=
XMJSONPath
.
readPath
(
xmAppApi
.
getApi_response
(),
"$.result"
);
//报名成功后根据会员手机号,在报名会员列表搜索报名数据
trainingTools
.
getTrainingApplyRecordsList
(
this
.
campId
,
phone
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
1
,
"给学员报名后,在报名列表没查询到数据"
);
//check订单 待支付状态
Assert
.
assertEquals
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
getJSONObject
(
0
).
getString
(
"state"
),
"WAITING"
);
//操作取消订单
orderTools
.
cancel
(
orderId
);
trainingTools
.
getTrainingApplyRecordsList
(
this
.
campId
,
phone
);
Assert
.
assertTrue
(
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
).
size
()
==
0
,
"取消学员订单后,在报名列表中还能查询到数据"
);
}
@AfterTest
(
description
=
"删除此case创建的训练营活动-退单/取消订单后可以删除活动"
)
public
void
delData
()
{
if
(!
this
.
campId
.
isEmpty
())
{
trainingTools
.
deleteTraining
(
this
.
campId
);
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/cases/polar/training/TrainingTools.java
View file @
a19c8b30
package
com
.
xiaomai
.
cases
.
polar
.
training
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.client.DataUserInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.XMBaseTest
;
import
com.xiaomai.utils.XMJSONPath
;
import
com.xiaomai.utils.*
;
import
org.springframework.stereotype.Component
;
import
org.testng.Assert
;
import
org.testng.Reporter
;
import
java.util.List
;
...
...
@@ -28,11 +27,10 @@ public class TrainingTools extends XMBaseTest {
String
openEndDate0
=
CommUtil
.
getNDayEndTimeTamp
(
2
);
//后天23:59:59
long
currentTimestamp
=
System
.
currentTimeMillis
();
// 在当前时间的基础上,加上
5秒(5000毫秒
)
long
futureTimestamp
=
currentTimestamp
+
5
000
;
// 在当前时间的基础上,加上
10分钟(1000毫秒*60*10
)
long
futureTimestamp
=
currentTimestamp
+
600
000
;
String
futureTimestampS
=
String
.
valueOf
(
futureTimestamp
);
/**
* 同一个ApiModule下的登录信息封装出一个类,减少代码冗余
*
...
...
@@ -90,20 +88,20 @@ public class TrainingTools extends XMBaseTest {
if
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
).
equals
(
"训练营名称不能重复"
))
{
return
""
;
}
Assert
.
assert
Equals
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
),
"true"
);
Assert
.
assert
True
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
)
);
return
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
}
/**
* 引用时可以继承 BaseCreateTrainingData 这个类,然后直接传值就可以
* 价格0元,一键创建已发布且报名中的训练营活动
*
* @param applyStartTime 报名开始时间,要早于第二天的0点,最好是晚于当前时间半个小时
* @param courseId 需要传入课程ID
* @param trainerList 需要传入教练
* @return 活动ID
*/
public
String
oneKeyCreateTraining
(
String
courseId
,
List
<
String
>
trainerList
)
{
public
String
oneKeyCreateTraining
(
String
courseId
,
List
<
String
>
trainerList
,
String
applyStartTime
)
{
setUP
(
"API_createThenPublishTraining"
);
String
courseName
=
"训练营课程-感统课"
;
String
trainingTitle
=
"三期36天训练营感统课"
+
RandomStringUtil
.
randomString
(
5
);
...
...
@@ -112,7 +110,7 @@ public class TrainingTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
// 场馆
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"applyEndTime"
,
applyEndTime1
);
//报名结束时间
body
.
put
(
"applyStartTime"
,
futureTimestampS
);
//报名开始时间,晚于当前时间5秒
body
.
put
(
"applyStartTime"
,
applyStartTime
);
//报名开始时间
body
.
put
(
"courseId"
,
courseId
);
//关联课程ID
body
.
put
(
"creatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
// 创建人即操作者
body
.
put
(
"openEndDate"
,
openEndDate0
);
//开营结束时间
...
...
@@ -127,12 +125,14 @@ public class TrainingTools extends XMBaseTest {
body
.
put
(
"xcxSaleStatus"
,
"YES"
);
//开启小程序售卖
body
.
put
(
"underlinePrice"
,
19.9
);
//划线价
//图文介绍不设置,所以回归时check下 图文介绍
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
return
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
}
/**
* 提供训练营活动名称,课程ID和教练ID 快速创建未发布的活动
*
...
...
@@ -167,7 +167,8 @@ public class TrainingTools extends XMBaseTest {
body
.
put
(
"xcxSaleStatus"
,
"YES"
);
//开启小程序售卖
body
.
put
(
"underlinePrice"
,
99999.99
);
//划线价
//图文介绍不设置,所以回归时check下 图文介绍
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
return
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
);
}
...
...
@@ -183,7 +184,24 @@ public class TrainingTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
id
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 训练营活动有报名订单时操作删除时会删除失败,就用这个方法
*
* @param id
*/
public
void
delTrainingFail
(
String
id
)
{
setUP
(
"API_deleteTraining"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
id
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
false
);
}
/**
...
...
@@ -198,7 +216,9 @@ public class TrainingTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"title"
,
title
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
...
...
@@ -222,14 +242,16 @@ public class TrainingTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
2
0
);
body
.
put
(
"size"
,
50
0
);
body
.
put
(
"courseId"
,
courseId
);
body
.
put
(
"stateList"
,
stateList
);
if
(!
trainingName
.
isEmpty
())
{
body
.
put
(
"title"
,
trainingName
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
...
...
@@ -245,7 +267,8 @@ public class TrainingTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"title"
,
title
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
return
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result"
));
}
...
...
@@ -261,7 +284,207 @@ public class TrainingTools extends XMBaseTest {
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
id
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 训练营详情:查看 报名会员
*
* @param trainingCampId 训练营ID
* @param content 根据手机号/会员姓名搜索
*/
public
void
getTrainingApplyRecordsList
(
String
trainingCampId
,
String
content
)
{
setUP
(
"API_getTrainingApplyRecordsList"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"trainingCampId"
,
trainingCampId
);
if
(
null
!=
content
||
!
content
.
isEmpty
())
{
body
.
put
(
"content"
,
content
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* B 端操作:在训练营活动详情-报名学员-给学员报名
*
* @param memberId 会员ID
* @param receivableAmount 支付金额
* @param campId 训练营活动ID
* @param userCouponId 已发放给学员的优惠券记录ID
*/
public
void
doSignCampOrder
(
String
memberId
,
Double
receivableAmount
,
String
campId
,
String
userCouponId
)
{
setUP
(
"API_signOrderCamp"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
if
(
userCouponId
!=
null
||
!
userCouponId
.
isEmpty
())
{
body
.
put
(
"userCouponId"
,
userCouponId
);
}
body
.
put
(
"salesmanId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"operationTime"
,
TimeUtils
.
getCurrentTime
());
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
20
));
body
.
put
(
"memberId"
,
memberId
);
body
.
put
(
"receivableAmount"
,
receivableAmount
);
JSONObject
campInfo
=
new
JSONObject
();
campInfo
.
put
(
"campId"
,
campId
);
body
.
put
(
"camp"
,
campInfo
);
JSONArray
paymentWays
=
new
JSONArray
();
JSONObject
payObject
=
new
JSONObject
();
payObject
.
put
(
"amount"
,
receivableAmount
);
payObject
.
put
(
"paymentWay"
,
"1"
);
payObject
.
put
(
"voucherResourceIds"
,
new
JSONArray
());
paymentWays
.
add
(
payObject
);
body
.
put
(
"paymentWays"
,
paymentWays
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Reporter
.
log
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 查看训练营活动-报名会员-报名详情
*
* @param trainingAccountId 即memberCardId,从查看报名会员列表返回数据中获取对应学员的报名数据(memberCardId)
*/
public
void
getTrainingAccountDetailById
(
String
trainingAccountId
)
{
setUP
(
"API_getTrainingAccountDetailById"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"id"
,
trainingAccountId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 退单训练营活动报名详情-退款
*
* @param memberId 会员ID
* @param refundAmount 退出金额
* @param memberCampId 会员的训练营账户ID
* @param quantity 退出购买数量
*/
public
void
refundCampOrder
(
String
memberId
,
Double
refundAmount
,
String
memberCampId
,
int
quantity
)
{
setUP
(
"API_refundCampOrder"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operationTime"
,
TimeUtils
.
getCurrentTime
());
body
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
20
));
body
.
put
(
"memberId"
,
memberId
);
body
.
put
(
"receivableAmount"
,
refundAmount
);
//退单内容
JSONObject
campInfo
=
new
JSONObject
();
campInfo
.
put
(
"memberCampId"
,
memberCampId
);
campInfo
.
put
(
"giftQuantity"
,
0
);
campInfo
.
put
(
"quantity"
,
quantity
);
campInfo
.
put
(
"refundAmount"
,
refundAmount
);
body
.
put
(
"camp"
,
campInfo
);
//结算方式
JSONArray
paymentWays
=
new
JSONArray
();
JSONObject
payObject
=
new
JSONObject
();
payObject
.
put
(
"amount"
,
refundAmount
);
payObject
.
put
(
"paymentWay"
,
"1"
);
payObject
.
put
(
"voucherResourceIds"
,
new
JSONArray
());
paymentWays
.
add
(
payObject
);
body
.
put
(
"paymentWays"
,
paymentWays
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 根据会员姓名/手机号搜索会员
*
* @param content 手机号/姓名
* @return 返回搜索的的目标数据第一条的会员ID
*/
public
String
searchTargerMember
(
String
content
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Clue
)
.
setApiName
(
"API_searchMember"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"content"
,
content
);
body
.
put
(
"searchType"
,
"COMMON"
);
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
20
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
int
tatal
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
size
();
if
(
tatal
>
0
)
{
return
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
return
""
;
}
/**
* 查看训练营报名记录
*
* @param tenantMemberCardId 训练营对应ID
* @param purchaseChannel 来源即购买渠道 :线下办理(B_OFF_LINE) 和 上线购买(C_ON_LINE),线上购买的case要等小程序买了之后check
* @param memberCardStateList 报名记录状态:生效中["NORMAL"],已结束 ["EXPIRED"],已用尽["USED_UP"],已退费["REFUNDED"],已作废["DISCARD"]
*/
public
void
searchTrainingAccountRecordsList
(
String
tenantMemberCardId
,
String
purchaseChannel
,
List
<
String
>
memberCardStateList
)
{
setUP
(
"API_searchTrainingAccountRecordsList"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"accountType"
,
"TRAINING"
);
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
20
);
if
(!
tenantMemberCardId
.
isEmpty
())
{
body
.
put
(
"tenantMemberCardId"
,
tenantMemberCardId
);
}
if
(!
purchaseChannel
.
isEmpty
())
{
body
.
put
(
"purchaseChannel"
,
purchaseChannel
);
}
body
.
put
(
"memberCardStateList"
,
memberCardStateList
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
/**
* 训练营报名记录页面中 -全局搜索(根据学员手机号/姓名)-点击目标学员-进入学员购买的训练营相关记录
*
* @param memberId 会员ID
*/
public
void
fetchUserTrainingCardList
(
String
memberId
)
{
setUP
(
"API_getMemberTrainingCardRecords"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"accountType"
,
"TRAINING"
);
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
20
);
body
.
put
(
"memberId"
,
memberId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
);
Assert
.
assertTrue
(
Boolean
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.success"
))
==
true
,
"调用接口返回结果:"
+
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.message"
));
}
...
...
src/main/java/com/xiaomai/client/ExtentTestNGIReporterListener.java
View file @
a19c8b30
...
...
@@ -23,7 +23,7 @@ public class ExtentTestNGIReporterListener implements IReporter {
// static String minute = String.format("%tM", date);
// static String second = String.format("%tS", date);
//生成的路径以及文件名
private
static
final
String
OUTPUT_FOLDER
=
"
TestGetAdmin
-output/"
;
private
static
final
String
OUTPUT_FOLDER
=
"
test
-output/"
;
private
static
String
BUILD_TIMESTAMP
=
null
!=
System
.
getenv
(
"BUILD_TIMESTAMP"
)
?
"_"
+
System
.
getenv
(
"BUILD_TIMESTAMP"
)
:
""
;
private
static
String
FILE_NAME
=
"report"
+
BUILD_TIMESTAMP
+
".html"
;
private
ExtentReports
extent
;
...
...
src/main/java/com/xiaomai/enums/ApiModule.java
View file @
a19c8b30
...
...
@@ -23,8 +23,9 @@ public class ApiModule {
public
static
String
Polar_Schedule
=
"polar_schedule"
;
//课程排期
public
static
String
Polar_Card
=
"polar_card"
;
//会员卡
public
static
String
Polar_Training
=
"polar_training"
;
//训练营活动
public
static
String
Polar_EleContract
=
"polar_eleContract"
;
//训练营活动
public
static
String
Polar_Coupon
=
"polar_coupon"
;
//优惠券
public
static
String
Polar_Reserve
=
"polar_reserve"
;
//预约
public
static
String
Lunar_Reserve
=
"lunar_reserve"
;
//预约
...
...
@@ -33,6 +34,7 @@ public class ApiModule {
public
static
String
Polar_Data
=
"polar_data"
;
//数据中心
public
static
String
Lunar_Order
=
"lunar_order"
;
//C端订单
public
static
String
Lunar_Training
=
"lunar_training"
;
//C端订单
...
...
src/main/java/com/xiaomai/enums/LoginAccount.java
View file @
a19c8b30
...
...
@@ -18,6 +18,7 @@ public class LoginAccount {
public
static
String
XYM_MINIAPPC
=
"xym_miniAppC"
;
public
static
String
GYM_MINIAPPC
=
"gym_miniAppC"
;
public
static
String
XYY_PROD
=
"xyy_prod"
;
public
static
String
DZHT_PROD
=
"dzht_prod"
;
// 电子合同账户
}
src/main/java/com/xiaomai/utils/CommUtil.java
View file @
a19c8b30
...
...
@@ -279,7 +279,7 @@ public class CommUtil {
}
/**
*
*
获取指定时间的整点
* @param n 整数
* @param time 整点时间 比如13:00
* @return
...
...
@@ -346,9 +346,20 @@ public class CommUtil {
return
getStringTimestamp
(
getNextXWeekEndXDayDataS
,
"yyyy-MM-dd HH:mm:ss"
);
}
/**
* 晚于当前时间 多少分钟
* @param minutes 分钟
* @return
*/
public
static
String
getTodayGoalTime
(
int
minutes
){
Date
getNextXWeekStartDayData
=
new
DateTime
(
now
).
plusMinutes
(
minutes
).
toDate
();
String
getNextXWeekStartXDayDataS
=
getFormatTimeStr
(
getNextXWeekStartDayData
,
"yyyy-MM-dd HH:mm:ss"
);
//时间格式转化为string
return
getStringTimestamp
(
getNextXWeekStartXDayDataS
,
"yyyy-MM-dd HH:mm:ss"
);
}
public
static
void
main
(
String
[]
args
)
{
getWholeHourTimestamp
();
/*
getWholeHourTimestamp();
Date getWeekStartDayData = getStartOfDateWeek(now);//获取本周的第一天
Date getNextWeekXDayData=addNDays(getWeekStartDayData,9);
String getNextWeekXDayDataS = new SimpleDateFormat("yyyy-MM-dd").format(getNextWeekXDayData.getTime());
...
...
@@ -372,7 +383,11 @@ public class CommUtil {
LocalDateTime future = now.plusSeconds(2);
System.out.println("未来2秒时间: " + future);
System
.
out
.
println
(
"%%%%%"
+
getXEndOfDateNextXWeek
(-
1
,
2
));
System.out.println("%%%%%"+getXEndOfDateNextXWeek(-1,2));*/
Date
getNextXWeekStartDayData
=
new
DateTime
(
now
).
plusMinutes
(
30
).
toDate
();
String
getNextXWeekStartXDayDataS
=
getFormatTimeStr
(
getNextXWeekStartDayData
,
"yyyy-MM-dd HH:mm:ss"
);
//时间格式转化为string
System
.
out
.
println
(
"((((((("
+
getStringTimestamp
(
getNextXWeekStartXDayDataS
,
"yyyy-MM-dd HH:mm:ss"
));
...
...
src/main/resources/dingding.json
View file @
a19c8b30
src/main/resources/jdbc.properties
View file @
a19c8b30
# 数据库配置
#jdbc.name=TestGetAdmin
#jdbc.url=jdbc:mysql://10.158.0.123:3306/xm_
data
?characterEncoding=UTF-8
#jdbc.url=jdbc:mysql://10.158.0.123:3306/xm_
sports
?characterEncoding=UTF-8
jdbc.username
=
qaman
jdbc.password
=
qaman
jdbc.url
=
jdbc:mysql://120.27.248.253:3306/xm_sports?characterEncoding=UTF-8
...
...
testng.xml
View file @
a19c8b30
...
...
@@ -17,6 +17,7 @@
<suite-files
>
<suite-file
path=
"module/polar/整个模块.xml"
></suite-file>
<suite-file
path=
"module/lunar/整个模块.xml"
></suite-file>
</suite-files>
</suite>
\ No newline at end of file
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