Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
oto
Project
Project
Details
Activity
Releases
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
龚小红
oto
Commits
54c1f83c
Commit
54c1f83c
authored
Mar 21, 2023
by
龚小红
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'Feature/formSubmit' into 'master'
Feature/form submit See merge request
!83
parents
48e512d3
23fd6cd7
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
40 additions
and
34 deletions
+40
-34
CheckTask.java
src/test/java/com/oto/cases/otoseller/CheckTask.java
+3
-3
Depts.java
src/test/java/com/oto/cases/otoseller/Depts.java
+5
-5
Invite.java
src/test/java/com/oto/cases/otoseller/Invite.java
+1
-1
Phone.java
src/test/java/com/oto/cases/otoseller/Phone.java
+15
-20
Work.java
src/test/java/com/oto/cases/otoseller/Work.java
+11
-2
BasicConfig.java
src/test/java/com/oto/config/BasicConfig.java
+5
-3
No files found.
src/test/java/com/oto/cases/otoseller/CheckTask.java
View file @
54c1f83c
...
...
@@ -56,14 +56,14 @@ public class CheckTask implements Authorization {
sellerOeExpertList
(
"带看"
,
false
,
2
);
//查询销售-【仅查询当前部门及子部门】
sellerOeExpertList
(
"专家"
,
true
,
2
);
//查询专家-【仅查询当前部门及子部门】
sellerOeExpertList
(
"自动化"
,
false
,
2
);
//查询销售-【仅查询对应角色】
sellerOeExpertList
(
"自动化"
,
true
,
3
);
//查询专家-【仅查询对应角色】
sellerOeExpertList
(
"自动化"
,
true
,
2
);
//查询专家-【仅查询对应角色】
}
@Test
(
description
=
"查看可筛选标签列表"
,
priority
=
4
)
public
void
查看可筛选标签列表
(){
Response
response
=
network
.
getResponse
(
BasicConfig
.
WORK_customerTagList
);
int
size
=
response
.
jsonPath
().
getInt
(
"data.size()"
);
Assert
.
assertEquals
(
size
,
3
,
network
.
message
(
BasicConfig
.
WORK_customerTagList
,
"查看可筛选标签数量正确"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
size
,
2
,
network
.
message
(
BasicConfig
.
WORK_customerTagList
,
"查看可筛选标签数量正确"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"标记和取消促单"
,
priority
=
5
)
...
...
@@ -118,7 +118,7 @@ public class CheckTask implements Authorization {
otoManagerAuth
();
Response
response
=
network
.
getResponse
(
BasicConfig
.
WORK_apolloSeller
);
int
size
=
response
.
jsonPath
().
getInt
(
"data.size()"
);
Assert
.
assertTrue
(
size
>
1
,
network
.
message
(
BasicConfig
.
WORK_apolloSeller
,
"
查看销售在在库客户
为空"
,
response
.
body
().
asString
()));
Assert
.
assertTrue
(
size
>
1
,
network
.
message
(
BasicConfig
.
WORK_apolloSeller
,
"
特定销售可见团队
为空"
,
response
.
body
().
asString
()));
}
...
...
src/test/java/com/oto/cases/otoseller/Depts.java
View file @
54c1f83c
...
...
@@ -361,8 +361,8 @@ public class Depts implements Authorization {
Assert
.
assertTrue
(
size
>
0
,
network
.
message
(
BasicConfig
.
WORK_MNG_listForType
,
"查看导入文件上传记录为空"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"分页查看
销售
列表"
,
priority
=
24
)
public
void
分页查看
销售
列表
(){
@Test
(
description
=
"分页查看
成员
列表"
,
priority
=
24
)
public
void
分页查看
成员
列表
(){
otoLeaderAuth
();
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"pageIndex"
,
1
);
...
...
@@ -373,7 +373,7 @@ public class Depts implements Authorization {
int
assignNewCustPermission
=
response
.
jsonPath
().
getInt
(
"data.list.find{it.id == "
+
INVITE_ID
+
"}.assignNewCustPermission"
);
int
assignRecycleCustPermission
=
response
.
jsonPath
().
getInt
(
"data.list.find{it.id == "
+
INVITE_ID
+
"}.assignRecycleCustPermission"
);
int
callPermission
=
response
.
jsonPath
().
getInt
(
"data.list.find{it.id == "
+
INVITE_ID
+
"}.callPermission"
);
Assert
.
assertEquals
(
size
,
11
,
network
.
message
(
params
,
BasicConfig
.
WORK_MNG_sellerList
,
"
工作状态
错误"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
size
,
11
,
network
.
message
(
params
,
BasicConfig
.
WORK_MNG_sellerList
,
"
销数成员
错误"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
workStatus
,
1
,
network
.
message
(
params
,
BasicConfig
.
WORK_MNG_sellerList
,
"工作状态错误"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
assignNewCustPermission
,
1
,
network
.
message
(
params
,
BasicConfig
.
WORK_MNG_sellerList
,
"认领新客户及强制分配权限错误"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
assignRecycleCustPermission
,
1
,
network
.
message
(
params
,
BasicConfig
.
WORK_MNG_sellerList
,
"认领回收客户权限错误"
,
response
.
body
().
asString
()));
...
...
@@ -665,7 +665,7 @@ public class Depts implements Authorization {
params
.
put
(
"pageSize"
,
20
);
Response
response
=
network
.
postResponse
(
params
,
BasicConfig
.
WORK_wxList
);;
int
size
=
response
.
jsonPath
().
getInt
(
"data.list.size()"
);
Assert
.
assertEquals
(
size
,
0
,
network
.
message
(
params
,
BasicConfig
.
WORK_wxList
,
"
问题详情
为空"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
size
,
0
,
network
.
message
(
params
,
BasicConfig
.
WORK_wxList
,
"
企微会话不
为空"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"查询微信会话管理"
,
priority
=
46
)
...
...
@@ -677,7 +677,7 @@ public class Depts implements Authorization {
params
.
put
(
"pageSize"
,
20
);
Response
response
=
network
.
postResponse
(
params
,
BasicConfig
.
WORK_ykList
);;
int
size
=
response
.
jsonPath
().
getInt
(
"data.list.size()"
);
Assert
.
assertEquals
(
size
,
0
,
network
.
message
(
params
,
BasicConfig
.
WORK_ykList
,
"
问题详情
为空"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
size
,
0
,
network
.
message
(
params
,
BasicConfig
.
WORK_ykList
,
"
微信会话不
为空"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"我的审批搜索成员"
,
priority
=
47
)
...
...
src/test/java/com/oto/cases/otoseller/Invite.java
View file @
54c1f83c
...
...
@@ -253,7 +253,7 @@ public class Invite implements Authorization {
params
.
put
(
"expertFlag"
,
true
);
Response
response
=
network
.
getResponse
(
params
,
BasicConfig
.
WORK_calendar_workMenu
);
int
size
=
response
.
jsonPath
().
getInt
(
"data.size()"
);
Assert
.
assertEquals
(
size
,
3
,
network
.
message
(
BasicConfig
.
WORK_calendar_workMenu
,
"查看产品列表不为空"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
size
,
2
,
network
.
message
(
BasicConfig
.
WORK_calendar_workMenu
,
"查看产品列表不为空"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"CRM查询场景带看人列表"
,
priority
=
22
)
...
...
src/test/java/com/oto/cases/otoseller/Phone.java
View file @
54c1f83c
...
...
@@ -252,13 +252,9 @@ public class Phone implements Authorization {
Response
response
=
network
.
getResponse
(
params
,
BasicConfig
.
PHONE_custExtDetail
);
String
followWeight
=
response
.
jsonPath
().
getString
(
"data.followWeight"
);
String
interviewAddress
=
response
.
jsonPath
().
getString
(
"data.interviewAddress"
);
int
commitPlanFlag
=
response
.
jsonPath
().
getInt
(
"data.commitPlanFlag"
);
String
giveProspectusFlag
=
response
.
jsonPath
().
getString
(
"data.giveProspectusFlag"
);
String
expertName
=
response
.
jsonPath
().
getString
(
"data.expertName"
);
Assert
.
assertNull
(
followWeight
,
network
.
message
(
params
,
BasicConfig
.
PHONE_custExtDetail
,
"客户权重回显不为1"
,
response
.
body
().
asString
()));
Assert
.
assertNotNull
(
interviewAddress
,
network
.
message
(
params
,
BasicConfig
.
PHONE_custExtDetail
,
"客户地址回显为空"
,
response
.
body
().
asString
()));
Assert
.
assertNull
(
giveProspectusFlag
,
network
.
message
(
params
,
BasicConfig
.
PHONE_custExtDetail
,
"是否可送计划书回显不为空"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
commitPlanFlag
,
0
,
network
.
message
(
params
,
BasicConfig
.
PHONE_custExtDetail
,
"是否已送计划书回显不为否"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
expertName
,
"勿动-自动化测试专家"
,
network
.
message
(
params
,
BasicConfig
.
PHONE_custExtDetail
,
"专家回显不为空"
,
response
.
body
().
asString
()));
}
...
...
@@ -274,7 +270,6 @@ public class Phone implements Authorization {
params
.
put
(
"birthdayTime"
,
"1960-01-03"
);
params
.
put
(
"custAddress"
,
"杭州市文新地铁站"
);
params
.
put
(
"followWeight"
,
3
);
params
.
put
(
"expertId"
,
IdMakeUtil
.
encodingId
(
43L
));
params
.
put
(
"commitPlanFlag"
,
1
);
params
.
put
(
"prospectusAmount"
,
"计划书金额20W"
);
params
.
put
(
"prospectusDesc"
,
"计划书确认情况良好"
);
...
...
@@ -467,7 +462,7 @@ public class Phone implements Authorization {
otoTakerTku
();
Response
response
=
network
.
getResponse
(
BasicConfig
.
PHONE_expertList
);
int
size
=
response
.
jsonPath
().
getInt
(
"data.size()"
);
Assert
.
assertEquals
(
size
,
3
,
network
.
message
(
BasicConfig
.
PHONE_expertList
,
"专家回显不为空"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
size
,
2
,
network
.
message
(
BasicConfig
.
PHONE_expertList
,
"专家回显不为空"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"查看我的面访状态更新为已完成"
,
priority
=
33
)
...
...
@@ -483,7 +478,7 @@ public class Phone implements Authorization {
@Test
(
description
=
"创建送计划书面访"
,
priority
=
34
)
public
void
创建送计划书面访
(){
oto
Taker
Tku
();
oto
Epert
Tku
();
interviewIds
.
add
(
saveInterview
(
customer_id
,
2
));
}
...
...
@@ -498,7 +493,7 @@ public class Phone implements Authorization {
@Test
(
description
=
"查询异常通过面访客户回填信息"
,
priority
=
36
)
public
void
查询异常通过面访客户回填信息
(){
oto
Taker
Tku
();
oto
Epert
Tku
();
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"id"
,
interviewIds
.
get
(
2
));
Response
response
=
network
.
getResponse
(
params
,
BasicConfig
.
PHONE_custExtDetail
);
...
...
@@ -510,7 +505,6 @@ public class Phone implements Authorization {
@Test
(
description
=
"二次正常扫码面访异常类型为空"
,
priority
=
37
)
public
void
二次正常扫码面访异常类型为空
(){
otoTakerTku
();
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"id"
,
interviewIds
.
get
(
2
));
Response
response
=
network
.
getResponse
(
params
,
BasicConfig
.
PHONE_getUnusualTypes
);
...
...
@@ -539,7 +533,7 @@ public class Phone implements Authorization {
@Test
(
description
=
"产品下架后公司产品列表不显示"
,
priority
=
40
)
public
void
产品下架后公司产品列表不显示
()
{
oto
Taker
Tku
();
oto
Epert
Tku
();
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"custId"
,
customer_id
);
...
...
@@ -583,7 +577,9 @@ public class Phone implements Authorization {
@Test
(
description
=
"查看面访详情"
,
priority
=
53
)
public
void
查看面访详情
(){
interviewdetail
(
interviewIds
.
get
(
0
),
3
,
2
,
"手机号不一致且非面对面扫码的情况说明"
,
1
,
1
,
"勿动-自动化测试总监"
);
otoTakerTku
();
interviewdetail
(
interviewIds
.
get
(
0
),
3
,
2
,
"手机号不一致且非面对面扫码的情况说明"
,
1
,
1
,
null
);
otoEpertTku
();
interviewdetail
(
interviewIds
.
get
(
1
),
2
,
1
,
"手机号不一致的情况说明"
,
1
,
1
,
"勿动-自动化测试专家"
);
interviewdetail
(
interviewIds
.
get
(
2
),
1
,
0
,
""
,
0
,
0
,
null
);
}
...
...
@@ -617,14 +613,14 @@ public class Phone implements Authorization {
params
.
put
(
"pageSize"
,
"20"
);
Response
response
=
network
.
getResponse
(
params
,
BasicConfig
.
PHONE_interviewList
);
int
size
=
response
.
jsonPath
().
getInt
(
"data.customerInterviewVos.size()"
);
Assert
.
assertEquals
(
size
,
1
,
network
.
message
(
params
,
BasicConfig
.
PHONE_interviewList
,
"专家面访列表为空"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
size
,
2
,
network
.
message
(
params
,
BasicConfig
.
PHONE_interviewList
,
"专家面访列表为空"
,
response
.
body
().
asString
()));
params
.
clear
();
params
.
put
(
"custName"
,
"自动化激活用户"
);
params
.
put
(
"pageSize"
,
"20"
);
response
=
network
.
getResponse
(
params
,
BasicConfig
.
PHONE_customerList
);
int
interviewNum
=
response
.
jsonPath
().
getInt
(
"data.myCustomerVos[0].interviewNum"
);
Assert
.
assertEquals
(
interviewNum
,
1
,
network
.
message
(
params
,
BasicConfig
.
PHONE_customerList
,
"专家线下拜访次数不包含关联面访"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
interviewNum
,
2
,
network
.
message
(
params
,
BasicConfig
.
PHONE_customerList
,
"专家线下拜访次数不包含关联面访"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"上传面访后完成见面计划"
,
priority
=
58
)
...
...
@@ -642,7 +638,8 @@ public class Phone implements Authorization {
@Test
(
description
=
"邀约销售查看见面次数"
,
priority
=
59
)
public
void
邀约销售查看见面次数
(){
otoInviterTku
();
//邀约统计客户已上传的总面访次数
otoInviterAuth
();
//邀约统计客户已上传的总面访次数
sleep
(
2000
);
HashMap
<
String
,
Object
>
params1
=
new
HashMap
<>();
params1
.
put
(
"custId"
,
cust_id
);
params1
.
put
(
"type"
,
1
);
...
...
@@ -661,20 +658,20 @@ public class Phone implements Authorization {
otoTakerAuth
();
//销售统计当前与客户之间创建的已上传面访次数
response
=
network
.
getResponse
(
params1
,
BasicConfig
.
WORK_detail_v2
);
meetTimeSize
=
response
.
jsonPath
().
getInt
(
"data.otoCustInfo4Manage.meetTimeSize"
);
Assert
.
assertEquals
(
meetTimeSize
,
3
,
network
.
message
(
params1
,
BasicConfig
.
WORK_detail_v2
,
"客户的见面次数非3"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
meetTimeSize
,
2
,
network
.
message
(
params1
,
BasicConfig
.
WORK_detail_v2
,
"客户的见面次数非3"
,
response
.
body
().
asString
()));
response
=
network
.
postResponse
(
params2
,
BasicConfig
.
WORK_SellerCustList
);
finishInterviewNum
=
response
.
jsonPath
().
getInt
(
"data.list[0].meetTimes"
);
Assert
.
assertEquals
(
finishInterviewNum
,
3
,
network
.
message
(
params2
,
BasicConfig
.
WORK_SellerCustList
,
"客户的见面次数非3"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
finishInterviewNum
,
2
,
network
.
message
(
params2
,
BasicConfig
.
WORK_SellerCustList
,
"客户的见面次数非3"
,
response
.
body
().
asString
()));
otoExpertAuth
();
//专家统计当前与客户之间创建或关联的已上传面访次数
response
=
network
.
getResponse
(
params1
,
BasicConfig
.
WORK_detail_v2
);
meetTimeSize
=
response
.
jsonPath
().
getInt
(
"data.otoCustInfo4Manage.meetTimeSize"
);
Assert
.
assertEquals
(
meetTimeSize
,
1
,
network
.
message
(
params1
,
BasicConfig
.
WORK_detail_v2
,
"客户的见面次数非3"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
meetTimeSize
,
2
,
network
.
message
(
params1
,
BasicConfig
.
WORK_detail_v2
,
"客户的见面次数非3"
,
response
.
body
().
asString
()));
response
=
network
.
postResponse
(
params2
,
BasicConfig
.
WORK_SellerCustList
);
finishInterviewNum
=
response
.
jsonPath
().
getInt
(
"data.list[0].meetTimes"
);
Assert
.
assertEquals
(
finishInterviewNum
,
1
,
network
.
message
(
params2
,
BasicConfig
.
WORK_SellerCustList
,
"客户的见面次数非3"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
finishInterviewNum
,
2
,
network
.
message
(
params2
,
BasicConfig
.
WORK_SellerCustList
,
"客户的见面次数非3"
,
response
.
body
().
asString
()));
}
...
...
@@ -724,8 +721,6 @@ public class Phone implements Authorization {
getSchemeNum
(
4
,
2
,
2
,
false
);
getSchemeList
(
3
,
2
,
0
);
}
@Test
(
description
=
"查看我的日报为未提交"
,
priority
=
75
)
public
void
查看我的日报为未提交
(){
...
...
src/test/java/com/oto/cases/otoseller/Work.java
View file @
54c1f83c
...
...
@@ -84,7 +84,6 @@ public class Work implements Authorization {
otoLeaderAuth
();
tags
.
put
(
tagId
,
"勿动-自动化更新标签"
);
tags
.
put
(
832
,
"自动化专家标签"
);
tagList
(
tags
);
otoExpertAuth
();
...
...
@@ -880,7 +879,7 @@ public class Work implements Authorization {
params
.
put
(
"name"
,
"自动化"
);
Response
response
=
network
.
postResponse
(
params
,
BasicConfig
.
WORK_sellerList
);
int
size
=
response
.
jsonPath
().
getInt
(
"data.size()"
);
Assert
.
assertEquals
(
size
,
7
,
network
.
message
(
params
,
BasicConfig
.
WORK_sellerList
,
"当前跟进人模糊搜索数量错误"
,
response
.
body
().
asString
()));
Assert
.
assertEquals
(
size
,
6
,
network
.
message
(
params
,
BasicConfig
.
WORK_sellerList
,
"当前跟进人模糊搜索数量错误"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"放弃客户进入回收池"
,
priority
=
65
)
...
...
@@ -951,6 +950,16 @@ public class Work implements Authorization {
Assert
.
assertEquals
(
size
,
0
,
network
.
message
(
params
,
BasicConfig
.
WORK_liveDynamic
,
"直播动态错误"
,
response
.
body
().
asString
()));
}
@Test
(
description
=
"总监查看团队客户列表"
,
priority
=
70
)
public
void
总监查看团队客户列表
(){
otoLeaderAuth
();
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"pageIndex"
,
1
);
params
.
put
(
"pageSize"
,
50
);
Response
response
=
network
.
postResponse
(
params
,
BasicConfig
.
WORK_SellerCustList
);
int
size
=
response
.
jsonPath
().
getInt
(
"data.list.size()"
);
Assert
.
assertTrue
(
size
>
0
,
network
.
message
(
params
,
BasicConfig
.
WORK_SellerCustList
,
"总监的团队客户为空"
,
response
.
body
().
asString
()));
}
...
...
src/test/java/com/oto/config/BasicConfig.java
View file @
54c1f83c
...
...
@@ -222,14 +222,16 @@ public class BasicConfig {
public
static
final
String
WORK_planFileUpload
=
WORK_HOST
+
"/kjy/oto/manager/customer/planFile/update"
;
public
static
final
String
WORK_kycUpload
=
WORK_HOST
+
"/kjy/oto/manager/customer/kyc/update"
;
public
static
final
String
WORK_strategyMove
=
WORK_HOST
+
"/kjy/oto/check/strategy/sort/move"
;
public
static
final
String
WORK_obtainCustBySellerId
=
WORK_HOST
+
"/kjy/oto/manager/customer/obtainCustBySellerId"
;
public
static
final
String
WORK_saveSelfPlan
=
WORK_HOST
+
"/kjy/oto/manager/customer/planList/save"
;
public
static
final
String
WORK_apolloSeller
=
WORK_HOST
+
"/kjy/oto/manager/customer/apollo/seller"
;
public
static
final
String
WORK_assignSeller
=
WORK_HOST
+
"/kjy/oto/manager/customer/assignSeller"
;
public
static
final
String
WORK_liveDynamic
=
WORK_HOST
+
"/kjy/oto/manager/customer/liveDynamic"
;
public
static
final
String
WORK_minimumDept
=
WORK_HOST
+
"/kjy/oto/manager/customer/minimum/dept/list"
;
public
static
final
String
WORK_updateInfo
=
WORK_HOST
+
"/kjy/oto/manager/customer/info/update"
;
//*************************工作计划*****************************
public
static
final
String
WORK_minimumDept
=
WORK_HOST
+
"/kjy/oto/manager/customer/minimum/dept/list"
;
public
static
final
String
WORK_obtainCustBySellerId
=
WORK_HOST
+
"/kjy/oto/manager/customer/obtainCustBySellerId"
;
public
static
final
String
WORK_saveSelfPlan
=
WORK_HOST
+
"/kjy/oto/manager/customer/planList/save"
;
//*************************我的审批****************************
public
static
final
String
WORK_findMySellerByFuzzyName
=
WORK_HOST
+
"/kjy/oto/manager/audit/findMySellerByFuzzyName"
;
public
static
final
String
WORK_interviewAuditList
=
WORK_HOST
+
"/kjy/oto/manager/audit/getInterviewAuditList"
;
...
...
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