Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xm-sportstest
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xiamai-test
xm-sportstest
Commits
28c3e28a
Commit
28c3e28a
authored
Aug 16, 2024
by
xyy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增C端储值卡case
parent
def973fc
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
273 additions
and
43 deletions
+273
-43
src/main/java/com/xiaomai/cases/lunar/minMemberCard/MinCardTools.java
+85
-0
src/main/java/com/xiaomai/cases/lunar/minmembercard/MinCardTools.java
+0
-37
src/main/java/com/xiaomai/cases/lunar/order/OrderCTools.java
+2
-1
src/main/java/com/xiaomai/cases/lunar/order/TestMiNiPay.java
+1
-1
src/main/java/com/xiaomai/cases/lunar/order/TestPurchaseCard.java
+1
-2
src/main/java/com/xiaomai/cases/lunar/order/TestPurchaseDeposit.java
+104
-0
src/main/java/com/xiaomai/cases/polar/memberCard/CardTools.java
+79
-1
src/main/java/com/xiaomai/cases/polar/memberCard/TestTenantMemberCard_update.java
+1
-1
No files found.
src/main/java/com/xiaomai/cases/lunar/minMemberCard/MinCardTools.java
0 → 100644
View file @
28c3e28a
package
com
.
xiaomai
.
cases
.
lunar
.
minMemberCard
;
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
;
@Component
(
"minCardTools"
)
public
class
MinCardTools
extends
XMBaseTest
{
public
void
setUP
(
String
apiName
,
DataUserInfo
...
userInfo
)
{
dataApi
.
setApiModule
(
ApiModule
.
Lunar_Card
)
.
setApiName
(
apiName
)
.
setTerminal
(
Terminal
.
minApp
);
super
.
beforeDataRequest
(
userInfo
);
}
/**
* @param
* @description:小程序查看在售会员卡
* @author: yangjian
**/
public
JSONObject
fetchOnSaleMemberCard
(
String
title
,
DataUserInfo
...
userInfo
)
{
setUP
(
"API_fetchOnSaleMemberCard"
,
userInfo
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"title"
,
title
);
//卡名称
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
();
}
/**
* @param
* @description:小程序查看在售体验卡/储值卡
* @author: xyy
**/
public
JSONObject
fetchOnSaleMemberCard
(
String
title
,
String
commodityCardType
,
DataUserInfo
...
userInfo
)
{
setUP
(
"API_fetchOnSaleMemberCard"
,
userInfo
);
JSONObject
jsonObject
=
new
JSONObject
();
//jsonObject.put("memberCardIds","");
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"title"
,
title
);
//卡名称
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"commodityCardType"
,
commodityCardType
);
//枚举:"EXPERIENCE_CARD","DEPOSIT_CARD"
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
();
}
/**
* @param
* @description:小程序卡包数量
* @author: xyy
**/
public
int
countMyUsableCard
(
String
memberId
,
DataUserInfo
...
userInfo
)
{
setUP
(
"API_countMyUsableCard"
,
userInfo
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"memberId"
,
memberId
);
jsonObject
.
put
(
"usable"
,
true
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
Integer
.
parseInt
(
dataApi
.
getBodyInJSON
().
getString
(
"result"
));
}
/**
* @param
* @description:小程序我的会员卡/体验卡/储值卡
* @author: xyy
**/
public
JSONObject
getMyMemberCardList
(
Boolean
usable
,
String
memberId
,
String
accountType
,
DataUserInfo
...
userInfo
)
{
setUP
(
"API_listMyMemberCard"
,
userInfo
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"usable"
,
usable
);
//可用卡true、失效卡false
jsonObject
.
put
(
"memberId"
,
memberId
);
jsonObject
.
put
(
"accountType"
,
accountType
);
//卡类型:会员卡"MEMBER"、储值卡"DEPOSIT"、体验卡"EXPERIENCE"
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
();
}
}
src/main/java/com/xiaomai/cases/lunar/minmembercard/MinCardTools.java
deleted
100644 → 0
View file @
def973fc
package
com
.
xiaomai
.
cases
.
lunar
.
minmembercard
;
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
;
public
class
MinCardTools
extends
XMBaseTest
{
/**
* @param
* @description:小程序查看在售会员卡
* @author: yangjian
**/
public
JSONObject
fetchOnSaleMemberCard
(
String
title
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Lunar_Card
)
.
setApiName
(
"API_fetchOnSaleMemberCard"
)
.
setTerminal
(
Terminal
.
minApp
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
jsonObject
=
new
JSONObject
();
//jsonObject.put("memberCardIds","");
jsonObject
.
put
(
"current"
,
0
);
jsonObject
.
put
(
"size"
,
20
);
jsonObject
.
put
(
"title"
,
title
);
jsonObject
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
}
src/main/java/com/xiaomai/cases/lunar/order/OrderCTools.java
View file @
28c3e28a
...
...
@@ -7,9 +7,10 @@ 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
;
import
java.math.BigDecimal
;
@Component
(
"orderCTools"
)
public
class
OrderCTools
extends
XMBaseTest
{
/**
...
...
src/main/java/com/xiaomai/cases/lunar/order/TestMiNiPay.java
View file @
28c3e28a
...
...
@@ -3,7 +3,7 @@ package com.xiaomai.cases.lunar.order;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.lunar.min
memberc
ard.MinCardTools
;
import
com.xiaomai.cases.lunar.min
MemberC
ard.MinCardTools
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.client.DataUserInfo
;
...
...
src/main/java/com/xiaomai/cases/lunar/order/TestPurchaseCard.java
View file @
28c3e28a
...
...
@@ -3,7 +3,7 @@ package com.xiaomai.cases.lunar.order;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.lunar.min
memberc
ard.MinCardTools
;
import
com.xiaomai.cases.lunar.min
MemberC
ard.MinCardTools
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.memberCard.CardTools
;
...
...
@@ -14,7 +14,6 @@ import com.xiaomai.enums.RequestType;
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
;
...
...
src/main/java/com/xiaomai/cases/lunar/order/TestPurchaseDeposit.java
0 → 100644
View file @
28c3e28a
package
com
.
xiaomai
.
cases
.
lunar
.
order
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.cases.lunar.minMemberCard.MinCardTools
;
import
com.xiaomai.cases.lunar.user.UserTools
;
import
com.xiaomai.cases.polar.memberCard.CardTools
;
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
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
TestPurchaseDeposit
extends
XMBaseTest
{
@Resource
(
name
=
"userTools"
)
UserTools
userTools
;
@Resource
(
name
=
"minCardTools"
)
MinCardTools
minCardTools
;
@Resource
(
name
=
"cardTools"
)
CardTools
cardTools
;
@Resource
(
name
=
"orderCTools"
)
OrderCTools
orderCTools
;
DataUserInfo
info
=
new
DataUserInfo
();
public
String
memberId
;
public
String
cardId
;
public
String
cardName
;
public
String
orderId
;
@BeforeMethod
public
void
beforeTest
(){
xmAppApi
.
setApiModule
(
ApiModule
.
Lunar_Order
)
.
setApiName
(
"API_purchaseDeposit"
)
.
setLoginUser
(
LoginAccount
.
GYM_MINIAPPC
)
.
setTerminal
(
Terminal
.
minApp
);
dal
.
setCase_owner
(
"xyy"
)
.
setCase_name
(
Thread
.
currentThread
().
getStackTrace
()[
1
].
getFileName
().
split
(
"\\."
)[
0
]);
super
.
beforeTest
();
}
@Test
(
description
=
"C端购买储值卡"
)
public
void
testPurchaseDeposit
()
throws
InterruptedException
{
info
.
setTerminal
(
Terminal
.
B
);
info
.
setLoginUser
(
LoginAccount
.
GYM_PROD
);
//搜索0元储值卡
int
num
=
XMJSONPath
.
getJSONArrayByReadPath
(
cardTools
.
tenantMemberCardCommonSearch
(
"DEPOSIT_CARD"
,
"0元储值卡"
,
info
),
"$.result"
).
size
();
//如果没有0元储值卡创建1张
if
(
num
==
0
){
cardTools
.
depositCardCreate
(
"0元储值卡"
+
RandomStringUtil
.
randomString
(
4
),
"0"
,
"10"
,
info
);
}
//获取会员信息
memberId
=
userTools
.
getMemberInfo
().
getString
(
"memberId"
);
//查询会员名下的卡包数量
int
cardNum
=
minCardTools
.
countMyUsableCard
(
memberId
);
//查询会员名下的订单数量
int
orderNum
=
XMJSONPath
.
getJSONArrayByReadPath
(
orderCTools
.
pageOrder
(
memberId
),
"$.result.records"
).
size
();
//获取1张0元储值卡id
cardId
=
minCardTools
.
fetchOnSaleMemberCard
(
"0元储值卡"
,
"DEPOSIT_CARD"
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"id"
);
cardName
=
minCardTools
.
fetchOnSaleMemberCard
(
"0元储值卡"
,
"DEPOSIT_CARD"
).
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"title"
);
//确认订单页
orderCTools
.
findTenantCardDetailById
(
cardId
,
null
);
//构建提交订单的参数
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"activatePattern"
,
"PURCHASE"
);
jsonObject
.
put
(
"cardId"
,
cardId
);
jsonObject
.
put
(
"cardSnapshotId"
,
cardId
);
jsonObject
.
put
(
"memberId"
,
memberId
);
jsonObject
.
put
(
"memo"
,
"自动化C端购买储值卡"
);
jsonObject
.
put
(
"receivableAmount"
,
0
);
jsonObject
.
put
(
"commodityCardType"
,
"DEPOSIT_CARD"
);
jsonObject
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"objectId"
,
RandomStringUtil
.
randomString
(
16
));
//调用详情
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
jsonObject
.
toJSONString
(),
headers
).
assetsSuccess
(
true
);
//获取返回值里的订单id
orderId
=
XMJSONPath
.
readPath
(
xmAppApi
.
getBodyInJSON
(),
"$.result"
);
//check该订单的状态及名称
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
orderCTools
.
getDetail
(
orderId
),
"$.result.state"
),
"PAID"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
orderCTools
.
getDetail
(
orderId
),
"$.result.voucherItems[0].purchaseDepositSkuAttr.skuName"
),
cardName
);
String
skuId
=
XMJSONPath
.
readPath
(
orderCTools
.
getDetail
(
orderId
),
"$.result.voucherItems[0].skuId"
);
Thread
.
sleep
(
1000
);
//check我的订单列表数据+1
// Assert.assertTrue(Integer.parseInt(XMJSONPath.readPath(orderCTools.pageOrder(memberId),"$.result.total") )== orderNum + 1);
//check我的卡包数据+1
Thread
.
sleep
(
1000
);
Assert
.
assertTrue
(
minCardTools
.
countMyUsableCard
(
memberId
)
==
cardNum
+
1
);
//check我的卡包里有该生效中的卡
Thread
.
sleep
(
1000
);
JSONObject
object
=
minCardTools
.
getMyMemberCardList
(
true
,
memberId
,
"DEPOSIT"
);
Assert
.
assertEquals
(
XMJSONPath
.
readPath
(
object
,
"$.result[0].tenantMemberCardId"
),
skuId
);
}
}
src/main/java/com/xiaomai/cases/polar/memberCard/CardTools.java
View file @
28c3e28a
...
...
@@ -39,7 +39,7 @@ public class CardTools extends XMBaseTest {
//List itemList = new ArrayList();
//itemList.add("");
JSONObject
Object
=
new
JSONObject
();
Object
.
put
(
"identifier"
,
dataApi
.
getLoginInfo
().
getUser
(
));
Object
.
put
(
"identifier"
,
RandomStringUtil
.
randomString
(
20
));
Object
.
put
(
"benefitType"
,
"BALANCE"
);
Object
.
put
(
"targetScope"
,
"GROUP_CLASS_AND_PERSONAL_COURSE"
);
Object
.
put
(
"balance"
,
"30"
);
...
...
@@ -76,6 +76,60 @@ public class CardTools extends XMBaseTest {
return
dataApi
.
getBodyInJSON
();
}
/**
* @param
* @description:创建储值卡
* @author: xyy
**/
public
JSONObject
depositCardCreate
(
String
title
,
String
price
,
String
balance
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_tenantMemberCard_create"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONArray
activatePatternList
=
new
JSONArray
();
activatePatternList
.
add
(
"PURCHASE"
);
JSONArray
paymentScenarioList
=
new
JSONArray
();
paymentScenarioList
.
add
(
"ALL"
);
JSONArray
benefitList
=
new
JSONArray
();
JSONObject
benefitObject
=
new
JSONObject
();
benefitObject
.
put
(
"identifier"
,
RandomStringUtil
.
randomString
(
20
));
benefitObject
.
put
(
"balance"
,
balance
);
//赠送金额
benefitObject
.
put
(
"benefitType"
,
"STORED_VALUE"
);
benefitObject
.
put
(
"price"
,
price
);
//实充金额
benefitObject
.
put
(
"targetType"
,
"PAYMENT"
);
benefitObject
.
put
(
"targetScope"
,
"PAYMENT_SPECIFIC_SCENARIO"
);
benefitObject
.
put
(
"paymentScenarioList"
,
paymentScenarioList
);
benefitObject
.
put
(
"accountType"
,
"DEPOSIT"
);
benefitList
.
add
(
benefitObject
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"surfaceUrl"
,
"https://image.xiaomaiketang.com/xm/internal/BHabA5WaNF.png"
);
//会员卡封面图片
jsonObject
.
put
(
"surfaceCornerMark"
,
"自动化标签"
);
jsonObject
.
put
(
"title"
,
title
);
//卡名称 不能重复要加东西 "次卡-自动化会员卡"+RandomStringUtil.randomString(3)
jsonObject
.
put
(
"validPeriod"
,
"10"
);
//有效期-10天
jsonObject
.
put
(
"sharePeopleLimit"
,
"10"
);
//共享人数
jsonObject
.
put
(
"price"
,
price
);
//价格
jsonObject
.
put
(
"purchaseNumberLimit"
,
"-1"
);
//购买数量限制
jsonObject
.
put
(
"xcxSaleStatus"
,
"YES"
);
//小程序是否售卖
jsonObject
.
put
(
"creatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"shelfState"
,
"YES"
);
//卡启用状态
jsonObject
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"description"
,
"{\"items\":[{\"content\":\"自动化创建的卡\",\"aspect\":\"\",\"type\":\"TEXT\"}]}"
);
jsonObject
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
jsonObject
.
put
(
"benefitList"
,
benefitList
);
//使用权益
jsonObject
.
put
(
"commodityCardType"
,
"DEPOSIT_CARD"
);
jsonObject
.
put
(
"activatePatternList"
,
activatePatternList
);
//三种生效方式
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
();
}
/**
* 快速创建会员卡次卡-存量数据: 嘟嘟创建的会员卡-次卡
...
...
@@ -205,6 +259,30 @@ public class CardTools extends XMBaseTest {
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
();
}
/**
* 通过搜索栏查询会员卡名称获取卡
* @param commodityCardType
* @param title
* @param dataUserInfos
* @return
*/
public
JSONObject
tenantMemberCardCommonSearch
(
String
commodityCardType
,
String
title
,
DataUserInfo
...
dataUserInfos
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Card
)
.
setApiName
(
"API_tenantMemberCard_commonSearch"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
jsonObject
.
put
(
"commodityCardType"
,
commodityCardType
);
jsonObject
.
put
(
"title"
,
title
);
//搜索的卡名
jsonObject
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
();
}
/**
* @param
* @description:会员卡售卖记录
...
...
src/main/java/com/xiaomai/cases/polar/memberCard/TestTenantMemberCard_update.java
View file @
28c3e28a
...
...
@@ -56,7 +56,7 @@ public class TestTenantMemberCard_update extends XMBaseTest {
//List itemList = new ArrayList();
//itemList.add("");
JSONObject
Object
=
new
JSONObject
();
Object
.
put
(
"identifier"
,
xmAppApi
.
getLoginInfo
().
getUser
(
));
Object
.
put
(
"identifier"
,
RandomStringUtil
.
randomString
(
20
));
Object
.
put
(
"benefitType"
,
"BALANCE"
);
Object
.
put
(
"targetScope"
,
"GROUP_CLASS_AND_PERSONAL_COURSE"
);
Object
.
put
(
"balance"
,
"30"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment