Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Xiaowu Zhang
erp5
Commits
7cebcfeb
Commit
7cebcfeb
authored
Sep 03, 2020
by
Arnaud Fontaine
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ZODB Components: erp5_ui_test: Migrate Unit Tests.
parent
a0d19fdd
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
689 additions
and
248 deletions
+689
-248
bt5/erp5_performance_test/TestTemplateItem/portal_components/test.erp5.testWorkflowPerformance.py
...em/portal_components/test.erp5.testWorkflowPerformance.py
+1
-1
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testGUIwithSecurity.py
...teItem/portal_components/test.erp5.testGUIwithSecurity.py
+2
-2
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testGUIwithSecurity.xml
...eItem/portal_components/test.erp5.testGUIwithSecurity.xml
+110
-0
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testListBox.py
...stTemplateItem/portal_components/test.erp5.testListBox.py
+7
-7
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testListBox.xml
...tTemplateItem/portal_components/test.erp5.testListBox.xml
+110
-0
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testPerformance.py
...mplateItem/portal_components/test.erp5.testPerformance.py
+227
-233
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testPerformance.xml
...plateItem/portal_components/test.erp5.testPerformance.xml
+110
-0
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testPlanningBox.py
...mplateItem/portal_components/test.erp5.testPlanningBox.py
+5
-5
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testPlanningBox.xml
...plateItem/portal_components/test.erp5.testPlanningBox.xml
+110
-0
bt5/erp5_ui_test/bt/template_test_id_list
bt5/erp5_ui_test/bt/template_test_id_list
+4
-0
bt5/erp5_ui_test/bt/test_dependency_list
bt5/erp5_ui_test/bt/test_dependency_list
+3
-0
No files found.
bt5/erp5_performance_test/TestTemplateItem/portal_components/test.erp5.testWorkflowPerformance.py
View file @
7cebcfeb
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
from
test
import
pystone
from
test
import
pystone
from
time
import
time
from
time
import
time
pystone
.
clock
=
time
pystone
.
clock
=
time
from
Products.ERP5Type.tests
.testPerformance
import
TestPerformanceMixin
from
erp5.component.test
.testPerformance
import
TestPerformanceMixin
from
Products.DCWorkflow.DCWorkflow
import
ValidationFailed
from
Products.DCWorkflow.DCWorkflow
import
ValidationFailed
from
Testing
import
ZopeTestCase
from
Testing
import
ZopeTestCase
...
...
product/ERP5Form/tests/
testGUIwithSecurity.py
→
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.
testGUIwithSecurity.py
View file @
7cebcfeb
...
@@ -43,9 +43,9 @@ class TestGUISecurity(ERP5TypeTestCase):
...
@@ -43,9 +43,9 @@ class TestGUISecurity(ERP5TypeTestCase):
def
getTitle
(
self
):
def
getTitle
(
self
):
return
"Security Issues in GUI"
return
"Security Issues in GUI"
def
loginAs
(
self
,
id
=
'user'
):
def
loginAs
(
self
,
username
=
'user'
):
uf
=
self
.
getPortal
().
acl_users
uf
=
self
.
getPortal
().
acl_users
user
=
uf
.
getUser
(
id
).
__of__
(
uf
)
user
=
uf
.
getUser
(
username
).
__of__
(
uf
)
newSecurityManager
(
None
,
user
)
newSecurityManager
(
None
,
user
)
def
stepCreateObjects
(
self
,
sequence
=
None
,
sequence_list
=
None
,
**
kw
):
def
stepCreateObjects
(
self
,
sequence
=
None
,
sequence_list
=
None
,
**
kw
):
...
...
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testGUIwithSecurity.xml
0 → 100644
View file @
7cebcfeb
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"Test Component"
module=
"erp5.portal_type"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
default_reference
</string>
</key>
<value>
<string>
testGUIwithSecurity
</string>
</value>
</item>
<item>
<key>
<string>
default_source_reference
</string>
</key>
<value>
<string>
Products.ERP5Form.tests.testGUIwithSecurity
</string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
test.erp5.testGUIwithSecurity
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
<value>
<string>
Test Component
</string>
</value>
</item>
<item>
<key>
<string>
sid
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
text_content_error_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
text_content_warning_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
version
</string>
</key>
<value>
<string>
erp5
</string>
</value>
</item>
<item>
<key>
<string>
workflow_history
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"2"
aka=
"AAAAAAAAAAI="
>
<pickle>
<global
name=
"PersistentMapping"
module=
"Persistence.mapping"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
data
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
component_validation_workflow
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAM=
</string>
</persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"3"
aka=
"AAAAAAAAAAM="
>
<pickle>
<global
name=
"WorkflowHistoryList"
module=
"Products.ERP5Type.Workflow"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_log
</string>
</key>
<value>
<list>
<dictionary>
<item>
<key>
<string>
action
</string>
</key>
<value>
<string>
validate
</string>
</value>
</item>
<item>
<key>
<string>
validation_state
</string>
</key>
<value>
<string>
validated
</string>
</value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
product/ERP5Form/tests/
testListBox.py
→
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.
testListBox.py
View file @
7cebcfeb
...
@@ -72,7 +72,7 @@ class TestListBox(ERP5TypeTestCase):
...
@@ -72,7 +72,7 @@ class TestListBox(ERP5TypeTestCase):
def
afterSetUp
(
self
):
def
afterSetUp
(
self
):
self
.
login
()
self
.
login
()
def
login
(
self
):
def
login
(
self
,
*
args
,
**
kw
):
uf
=
self
.
getPortal
().
acl_users
uf
=
self
.
getPortal
().
acl_users
uf
.
_doAddUser
(
'seb'
,
''
,
[
'Manager'
],
[])
uf
.
_doAddUser
(
'seb'
,
''
,
[
'Manager'
],
[])
user
=
uf
.
getUserById
(
'seb'
).
__of__
(
uf
)
user
=
uf
.
getUserById
(
'seb'
).
__of__
(
uf
)
...
@@ -296,13 +296,13 @@ class TestListBox(ERP5TypeTestCase):
...
@@ -296,13 +296,13 @@ class TestListBox(ERP5TypeTestCase):
],)
],)
foo_module
=
portal
.
foo_module
foo_module
=
portal
.
foo_module
o
=
foo_module
.
newContent
(
title
=
u'
\
xe9
lisa'
)
foo_module
.
newContent
(
title
=
u'
\
xe9
lisa'
)
self
.
tic
()
self
.
tic
()
request
=
get_request
()
request
=
get_request
()
request
[
'here'
]
=
portal
.
foo_module
request
[
'here'
]
=
portal
.
foo_module
try
:
try
:
rendered
=
listbox
.
get_value
(
'default'
,
render_format
=
'list'
,
REQUEST
=
request
)
listbox
.
get_value
(
'default'
,
render_format
=
'list'
,
REQUEST
=
request
)
except
UnicodeError
,
e
:
except
UnicodeError
,
e
:
self
.
fail
(
'Rendering failed: %s'
%
e
)
self
.
fail
(
'Rendering failed: %s'
%
e
)
self
.
assertIn
(
u"http://example.com/?
\
xe9
lisa"
,
listbox
.
render
(
REQUEST
=
request
))
self
.
assertIn
(
u"http://example.com/?
\
xe9
lisa"
,
listbox
.
render
(
REQUEST
=
request
))
...
@@ -330,13 +330,13 @@ class TestListBox(ERP5TypeTestCase):
...
@@ -330,13 +330,13 @@ class TestListBox(ERP5TypeTestCase):
],)
],)
foo_module
=
portal
.
foo_module
foo_module
=
portal
.
foo_module
o
=
foo_module
.
newContent
(
title
=
u'
\
xe9
lisa'
)
foo_module
.
newContent
(
title
=
u'
\
xe9
lisa'
)
self
.
tic
()
self
.
tic
()
request
=
get_request
()
request
=
get_request
()
request
[
'here'
]
=
portal
.
foo_module
request
[
'here'
]
=
portal
.
foo_module
try
:
try
:
rendered
=
listbox
.
get_value
(
'default'
,
render_format
=
'list'
,
REQUEST
=
request
)
listbox
.
get_value
(
'default'
,
render_format
=
'list'
,
REQUEST
=
request
)
except
UnicodeError
,
e
:
except
UnicodeError
,
e
:
self
.
fail
(
'Rendering failed: %s'
%
e
)
self
.
fail
(
'Rendering failed: %s'
%
e
)
self
.
assertIn
(
u"http://example.com/?
\
xe9
lisa"
,
listbox
.
render
(
REQUEST
=
request
))
self
.
assertIn
(
u"http://example.com/?
\
xe9
lisa"
,
listbox
.
render
(
REQUEST
=
request
))
...
@@ -481,7 +481,7 @@ class TestListBox(ERP5TypeTestCase):
...
@@ -481,7 +481,7 @@ class TestListBox(ERP5TypeTestCase):
# Create an new empty object with a list property
# Create an new empty object with a list property
foo_module
=
portal
.
foo_module
foo_module
=
portal
.
foo_module
o
=
foo_module
.
newContent
()
foo_module
.
newContent
()
# Reindex
# Reindex
self
.
tic
()
self
.
tic
()
...
@@ -566,7 +566,7 @@ class TestListBox(ERP5TypeTestCase):
...
@@ -566,7 +566,7 @@ class TestListBox(ERP5TypeTestCase):
# Create an new empty object with a list property
# Create an new empty object with a list property
foo_module
=
portal
.
foo_module
foo_module
=
portal
.
foo_module
o
=
foo_module
.
newContent
()
foo_module
.
newContent
()
# Reindex
# Reindex
self
.
tic
()
self
.
tic
()
...
...
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testListBox.xml
0 → 100644
View file @
7cebcfeb
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"Test Component"
module=
"erp5.portal_type"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
default_reference
</string>
</key>
<value>
<string>
testListBox
</string>
</value>
</item>
<item>
<key>
<string>
default_source_reference
</string>
</key>
<value>
<string>
Products.ERP5Form.tests.testListBox
</string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
test.erp5.testListBox
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
<value>
<string>
Test Component
</string>
</value>
</item>
<item>
<key>
<string>
sid
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
text_content_error_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
text_content_warning_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
version
</string>
</key>
<value>
<string>
erp5
</string>
</value>
</item>
<item>
<key>
<string>
workflow_history
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"2"
aka=
"AAAAAAAAAAI="
>
<pickle>
<global
name=
"PersistentMapping"
module=
"Persistence.mapping"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
data
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
component_validation_workflow
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAM=
</string>
</persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"3"
aka=
"AAAAAAAAAAM="
>
<pickle>
<global
name=
"WorkflowHistoryList"
module=
"Products.ERP5Type.Workflow"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_log
</string>
</key>
<value>
<list>
<dictionary>
<item>
<key>
<string>
action
</string>
</key>
<value>
<string>
validate
</string>
</value>
</item>
<item>
<key>
<string>
validation_state
</string>
</key>
<value>
<string>
validated
</string>
</value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
product/ERP5Type/tests/
testPerformance.py
→
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.
testPerformance.py
View file @
7cebcfeb
This diff is collapsed.
Click to expand it.
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testPerformance.xml
0 → 100644
View file @
7cebcfeb
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"Test Component"
module=
"erp5.portal_type"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
default_reference
</string>
</key>
<value>
<string>
testPerformance
</string>
</value>
</item>
<item>
<key>
<string>
default_source_reference
</string>
</key>
<value>
<string>
Products.ERP5Type.tests.testPerformance
</string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
test.erp5.testPerformance
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
<value>
<string>
Test Component
</string>
</value>
</item>
<item>
<key>
<string>
sid
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
text_content_error_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
text_content_warning_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
version
</string>
</key>
<value>
<string>
erp5
</string>
</value>
</item>
<item>
<key>
<string>
workflow_history
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"2"
aka=
"AAAAAAAAAAI="
>
<pickle>
<global
name=
"PersistentMapping"
module=
"Persistence.mapping"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
data
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
component_validation_workflow
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAM=
</string>
</persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"3"
aka=
"AAAAAAAAAAM="
>
<pickle>
<global
name=
"WorkflowHistoryList"
module=
"Products.ERP5Type.Workflow"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_log
</string>
</key>
<value>
<list>
<dictionary>
<item>
<key>
<string>
action
</string>
</key>
<value>
<string>
validate
</string>
</value>
</item>
<item>
<key>
<string>
validation_state
</string>
</key>
<value>
<string>
validated
</string>
</value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
product/ERP5Form/tests/
testPlanningBox.py
→
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.
testPlanningBox.py
View file @
7cebcfeb
...
@@ -52,15 +52,15 @@ class TestPlanningBox(ERP5TypeTestCase):
...
@@ -52,15 +52,15 @@ class TestPlanningBox(ERP5TypeTestCase):
def
getBusinessTemplateList
(
self
):
def
getBusinessTemplateList
(
self
):
# Use the same framework as the functional testing for convenience.
# Use the same framework as the functional testing for convenience.
# This adds some specific portal types and skins.
# This adds some specific portal types and skins.
return
(
'erp5_ui_test'
,)
return
(
'erp5_ui_test'
,)
def
getTitle
(
self
):
def
getTitle
(
self
):
return
"PlanningBox"
return
"PlanningBox"
def
afterSetUp
(
self
):
def
afterSetUp
(
self
):
self
.
login
()
self
.
login
()
def
login
(
self
):
def
login
(
self
,
*
args
,
**
kw
):
uf
=
self
.
getPortal
().
acl_users
uf
=
self
.
getPortal
().
acl_users
uf
.
_doAddUser
(
'seb'
,
''
,
[
'Manager'
],
[])
uf
.
_doAddUser
(
'seb'
,
''
,
[
'Manager'
],
[])
user
=
uf
.
getUserById
(
'seb'
).
__of__
(
uf
)
user
=
uf
.
getUserById
(
'seb'
).
__of__
(
uf
)
...
@@ -125,7 +125,7 @@ class TestPlanningBox(ERP5TypeTestCase):
...
@@ -125,7 +125,7 @@ class TestPlanningBox(ERP5TypeTestCase):
self
.
assertEqual
(
sec_axis_info
[
'bound_start'
],
today
)
self
.
assertEqual
(
sec_axis_info
[
'bound_start'
],
today
)
self
.
assertEqual
(
sec_axis_info
[
'bound_stop'
],
today
+
1
)
self
.
assertEqual
(
sec_axis_info
[
'bound_stop'
],
today
+
1
)
for
tree_list
,
activity_list
,
stat
in
basic
.
report_group_list
:
for
_
,
activity_list
,
_
in
basic
.
report_group_list
:
self
.
assertEqual
(
len
(
activity_list
),
1
)
self
.
assertEqual
(
len
(
activity_list
),
1
)
...
...
bt5/erp5_ui_test/TestTemplateItem/portal_components/test.erp5.testPlanningBox.xml
0 → 100644
View file @
7cebcfeb
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"Test Component"
module=
"erp5.portal_type"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
default_reference
</string>
</key>
<value>
<string>
testPlanningBox
</string>
</value>
</item>
<item>
<key>
<string>
default_source_reference
</string>
</key>
<value>
<string>
Products.ERP5Form.tests.testPlanningBox
</string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
test.erp5.testPlanningBox
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
<value>
<string>
Test Component
</string>
</value>
</item>
<item>
<key>
<string>
sid
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
text_content_error_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
text_content_warning_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
version
</string>
</key>
<value>
<string>
erp5
</string>
</value>
</item>
<item>
<key>
<string>
workflow_history
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"2"
aka=
"AAAAAAAAAAI="
>
<pickle>
<global
name=
"PersistentMapping"
module=
"Persistence.mapping"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
data
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
component_validation_workflow
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAM=
</string>
</persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"3"
aka=
"AAAAAAAAAAM="
>
<pickle>
<global
name=
"WorkflowHistoryList"
module=
"Products.ERP5Type.Workflow"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_log
</string>
</key>
<value>
<list>
<dictionary>
<item>
<key>
<string>
action
</string>
</key>
<value>
<string>
validate
</string>
</value>
</item>
<item>
<key>
<string>
validation_state
</string>
</key>
<value>
<string>
validated
</string>
</value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_ui_test/bt/template_test_id_list
View file @
7cebcfeb
test.erp5.testGUIwithSecurity
test.erp5.testListBox
test.erp5.testPerformance
test.erp5.testPlanningBox
test.erp5.testRelationField
test.erp5.testRelationField
\ No newline at end of file
bt5/erp5_ui_test/bt/test_dependency_list
0 → 100644
View file @
7cebcfeb
erp5_full_text_mroonga_catalog
erp5_core_proxy_field_legacy
erp5_base
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment