Commit a19c8b30 by yangfangfang

Merge remote-tracking branch 'origin/master'

parents 6a802225 81748936
<?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
<?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>
......
......@@ -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.BeforeClass;
import org.testng.annotations.BeforeMethod;
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();
......
......@@ -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();
......
......@@ -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();
......
......@@ -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 getReserveDetailById(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");
}
}
......@@ -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.assertEquals(message,"预约失败,无需重复添加");
Assert.assertTrue(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(), false, 1,minuteOffset[random.nextInt(20)],dataUserInfo);
groupScheduleTools.createGroupRuleSchedule(courseId, dataApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), true, 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.getReserveDetailById(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]);
......
......@@ -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(), false, 1,minuteOffset[random.nextInt(20)],dataUserInfo);
groupScheduleTools.createGroupRuleSchedule(courseId, dataApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), true, 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.getReserveDetailById(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]);
......
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;
}
}
}
}
......@@ -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();
......
......@@ -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();
......
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);
}
}
......@@ -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.getReserveDetailById(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]);
......
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条存量的训练营课次数据");
}
}
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);
}
}
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端对比内容不一致");
}
}
}
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");
}
}
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");
}
}
......@@ -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(10000);
Thread.sleep(15000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
......@@ -105,7 +107,7 @@ public class TestAddStudioAdmin extends BaseTestImpl {
}
try {
Thread.sleep(10000);
Thread.sleep(15000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
......
......@@ -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();
......
......@@ -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;
@BeforeClass
@BeforeMethod
@Override
public void beforeTest() {
setTestInfo(ApiModule.Polar_Admin,"API_checkExistInStudio", LoginAccount.GYM_PROD, Terminal.B,"xym");
......
......@@ -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();
......
......@@ -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" +
......
......@@ -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();
......
......@@ -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;
@BeforeClass
@BeforeMethod
@Override
public void beforeTest() {
setTestInfo(ApiModule.Polar_Admin,"API_departStudioAdmin", LoginAccount.GYM_PROD2, Terminal.B,"xym");
......
......@@ -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();
......
......@@ -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();
......
......@@ -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(4000);
Thread.sleep(15000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
......
......@@ -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();
......
......@@ -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();
......
......@@ -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");
}
}
......@@ -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();
......
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
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
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
......@@ -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);
}
}
......@@ -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();
......
......@@ -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++) {
......
......@@ -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
......
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);
}
}
......@@ -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++) {
......
......@@ -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++) {
......
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");
}
}
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]));
}
}
}
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");
}
}
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","获取实名认证证书失败");
}
}
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");
}
}
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");
}
}
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","获取企业签章失败");
}
}
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");
}
}
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,"获取模版管理列表数据失败");
}
}
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);
}
}
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]);
}
}
}
}
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);
}
}
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");
}
}
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]),"获取租户有效余额记录与充值记录列表内容对比");
}
}
}
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]);
}
}
}
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,"锁定额度与合同列表中待签署合同数量不一致");
}
}
......@@ -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);
......
......@@ -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 {
......
......@@ -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", xmAppApi.getLoginInfo().getUser());
Object.put("identifier", dataApi.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", xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("creatorId", dataApi.getLoginInfo().getAdminId());
jsonObject.put("shelfState", "YES");//卡启用状态
jsonObject.put("brandId", xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("studioId", xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
jsonObject.put("studioId", dataApi.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", xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("current", 0);
jsonObject.put("size", 20);
jsonObject.put("studioId", dataApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
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;
}
}
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", xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("courseId", courseId);
jsonObject.put("current", 0);
jsonObject.put("size", 20);
jsonObject.put("studioId", dataApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
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.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",xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("studioId",xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("title",title);//搜索的卡名
jsonObject.put("operatorId",xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
jsonObject.put("studioId", dataApi.getLoginInfo().getStudioId());
jsonObject.put("title", title);//搜索的卡名
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
* @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", xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("current", 0);
jsonObject.put("size", 20);
jsonObject.put("studioId", dataApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
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
......@@ -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_Clue)
dataApi.setApiModule(ApiModule.Polar_Card)
.setApiName("API_commonSearch")
.setTerminal(Terminal.B);
super.beforeDataRequest(dataUserInfos);
JSONObject jsonObject = new JSONObject();
jsonObject.put("content",content);
jsonObject.put("studioId", xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("content", content);
jsonObject.put("studioId", dataApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
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;
}
......@@ -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", xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("id", id);
jsonObject.put("studioId", dataApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
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;
}
......@@ -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", xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("studioId", dataApi.getLoginInfo().getStudioId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
jsonObject.put("operatorId", dataApi.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", xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("brandId", xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("studioId", xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("operatorId", dataApi.getLoginInfo().getAdminId());
jsonObject.put("brandId", dataApi.getLoginInfo().getBrandId());
jsonObject.put("studioId", dataApi.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",xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("studioId",xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("operatorId",xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("current", 0);
jsonObject.put("size", 20);
jsonObject.put("benefitId", benefitId);
jsonObject.put("memberCardId", memberCardId);
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);
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",xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("studioId",xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("operatorId",xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("memo", "自动化修改会员卡有效期");
jsonObject.put("benefitId", benefitId);
jsonObject.put("memberCardId", memberCardId);
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);
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",xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("studioId",xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("operatorId",xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("memo", "自动化停卡");
jsonObject.put("benefitId", benefitId);
jsonObject.put("memberCardId", memberCardId);
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);
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",xmAppApi.getLoginInfo().getBrandId());
jsonObject.put("studioId",xmAppApi.getLoginInfo().getStudioId());
jsonObject.put("operatorId",xmAppApi.getLoginInfo().getAdminId());
jsonObject.put("memberCardId", memberCardId);
jsonObject.put("current", 0);
jsonObject.put("size", 20);
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);
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);
}
}
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
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
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",title);//这里需要搜索新创建的会员卡
jsonObject.put("title",memberCardName);//这里需要搜索新创建的会员卡
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),"精确搜索后发现会员卡名称不匹配");
}
}
......@@ -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");
}
}
}
......@@ -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);
}
......
......@@ -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",20);
body.put("size",500);
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);
}
}
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(), false, 1,minuteOffset[random.nextInt(20)]);
groupScheduleTools.createGroupRuleSchedule(courseId, xmAppApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), true, 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(2500);
Thread.sleep(3000);
} 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.assertEquals(message,"预约失败,无需重复添加");
Assert.assertTrue(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(),memberId,"GROUP_CLASS");
JSONArray getPageByMember = reserveTools.getPageByMember(courseId,"RESERVE_CANCEL","","", startTime,TimeUtils.getTodayEndTime(),memberInfo1.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(),memberId,"GROUP_CLASS");
JSONArray getPageByStudio = reserveTools.getPageByStudio(courseId,"RESERVE_CANCEL","","",startTime,TimeUtils.getTodayEndTime(),memberInfo1.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]);
}
}
}
......
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 message1 ,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(), false, 1,minuteOffset[random.nextInt(20)]);
groupScheduleTools.createGroupRuleSchedule(courseId, xmAppApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), true, 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)){
......
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;
}
......
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,"清空数据后还能查询到数据");
}
}
}
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,"删除特殊日期后,特殊日期列表不为空");
}
}
}
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(),"每周重复的周请求结果与实际结果不一样");
}
}
}
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,"删除特殊日期后,特殊日期列表不为空");
}
}
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,"删除特殊日期后,特殊日期列表不为空");
}
}
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);
}
}
}
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);
}
}
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");
}
}
}
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");
}
}
}
......@@ -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 "";
}
......
......@@ -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);
......
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.AfterClass;
import org.testng.annotations.AfterTest;
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");
}
@AfterClass(description = "删除此case创建的训练营排课日程和训练营活动")
@AfterTest(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
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.AfterClass;
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;
import java.util.Set;
/**
* 删除训练营课次(单个/当前及后续)
* @author adu
* data 2024/7/12 17:05
* data 2024/8/1 11:16
*/
public class TestDelCampScheduleItem extends SelectTargetTrainingCampAndGetInfo{
public class TestDelCurrentAndSubsequentCampSchedule 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));
}
}
@AfterClass(description = "删除此case创建的训练营排课日程")
@AfterTest(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);
}
......
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
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.AfterClass;
import org.testng.annotations.AfterTest;
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,"作废学员订单后,训练营课次中对应的预约记录没有被删除哈");
}
@AfterClass(description = "删除此case创建的训练营排课日程")
@AfterTest(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);
}
}
}
......
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.AfterClass;
import org.testng.annotations.AfterTest;
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 TestEditCampScheduleItem extends SelectTargetTrainingCampAndGetInfo {
public class TestEditCurrentAndSubsequentCampSchedule 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请检查");
}
}
}
......
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
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.AfterClass;
import org.testng.annotations.AfterTest;
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的日课表,期望值无数据
Set<String> scheduleIds5 = campScheduleTools.getCampTableDate(11);
Assert.assertTrue(scheduleIds5.size() == 0 || scheduleIds5 == null, "周五没排课,但是检查出有课次");
String 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, "学员退单后,没有从课次中移除");
}
@AfterClass(description = "删除此case创建的训练营排课日程")
@AfterTest(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);
}
......
......@@ -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, "查询到的课表数据和预期不一致");
}
@AfterClass(description = "删除此case创建的训练营排课日程,只操作删除对应的训练营活动即可")
@AfterTest(description = "删除此case创建的训练营排课日程,只操作删除对应的训练营活动即可")
public void delData() {
if (null!=campId||!campId.isEmpty()) {
this.getTrainingTools().deleteTraining(campId);
......
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]);
}
}
}
......@@ -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 "";
}
}
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);
}
}
......
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
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
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
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
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.AfterClass;
import org.testng.annotations.AfterTest;
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 TestEditCurrentGroupSchedule 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 testEditCurrentGroupSchedule() {
//获取下周四的课次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", scheduleIdsN);
//获取下周四某个时间点的开始时间戳
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(scheduleIdsN);
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
......@@ -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),"设置有空改为有数据后没生效");
......
......@@ -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,"查询到的课表数据和预期不一致");
}
@AfterClass(description = "删除此case创建的日程")
@AfterTest(description = "删除此case创建的日程")
public void delData(){
List<String> ruleIdIds = new ArrayList<>();
//查询这个case创建的相关日程
......
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");
}
}
......
......@@ -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();
......
......@@ -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();
......
......@@ -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();
......
......@@ -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();
......
......@@ -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();
......
......@@ -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);
}
}
......@@ -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();
......
......@@ -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();
......
......@@ -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();
......
......@@ -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();
......
......@@ -41,7 +41,7 @@ public class BaseCreateTrainingData extends BaseTestImpl {
String courseId = "";
long currentTimestamp = System.currentTimeMillis();
// 在当前时间的基础上,加上2秒(2000毫秒)
long futureTimestamp = currentTimestamp + 5000;//晚于当前时间8秒
long futureTimestamp = currentTimestamp + 9000;//晚于当前时间8秒
String futureTimestampS=String.valueOf(futureTimestamp);
......
......@@ -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();
......
......@@ -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.AfterClass;
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;
/**
* 对报名中的活动操作立即成营
......@@ -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", dataApi.getLoginInfo().getAdminId());
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
body.put("studioId", xmAppApi.getLoginInfo().getStudioId());
body.put("brandId", xmAppApi.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"));
}
}
@AfterClass(description = "删除此case创建的训练营活动")
@AfterTest(description = "删除此case创建的训练营活动")
public void delData() {
if (!id.isEmpty()) {
trainingTools.deleteTraining(id);
......
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
......@@ -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.AfterClass;
import org.testng.annotations.AfterTest;
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 TestEditNoPublishTraining 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 testEditNoPublishTraining() {
//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);
}
@AfterClass(description = "删除此case创建的训练营")
@AfterTest(description = "删除此case创建的训练营")
public void delData() {
if (!trainingId.isEmpty()) {
trainingTools.deleteTraining(trainingId);
}
if (!oneKeytTrainingId.isEmpty()) {
trainingTools.deleteTraining(oneKeytTrainingId);
}
}
......
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
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
......@@ -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,"没有搜索到相关数据");
......
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
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
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 + 5000;
// 在当前时间的基础上,加上10分钟(1000毫秒*60*10
long futureTimestamp = currentTimestamp + 600000;
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.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.success"), "true");
Assert.assertTrue(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", 20);
body.put("size", 500);
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"));
}
......
......@@ -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;
......
......@@ -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端订单
......
......@@ -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"; // 电子合同账户
}
......@@ -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"));
......
# 数据库配置
#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
......
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment