Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5-Boxiang
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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Hamza
erp5-Boxiang
Commits
6d73416e
Commit
6d73416e
authored
May 20, 2016
by
Tristan Cavelier
Committed by
Sven Franck
Jun 02, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
testERP5WebWithDms: add export as single file tests
parent
e7fee233
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
452 additions
and
0 deletions
+452
-0
product/ERP5/tests/testERP5WebWithDms.py
product/ERP5/tests/testERP5WebWithDms.py
+452
-0
No files found.
product/ERP5/tests/testERP5WebWithDms.py
View file @
6d73416e
...
...
@@ -29,9 +29,14 @@
import
unittest
import
os
import
quopri
import
functools
from
StringIO
import
StringIO
from
lxml
import
etree
from
base64
import
b64decode
,
b64encode
from
email.parser
import
Parser
as
EmailParser
import
transaction
from
AccessControl
import
Unauthorized
from
AccessControl.SecurityManagement
import
newSecurityManager
from
Testing
import
ZopeTestCase
...
...
@@ -45,6 +50,23 @@ from PIL import Image
LANGUAGE_LIST
=
(
'en'
,
'fr'
,
'de'
,
'bg'
,)
IMAGE_COMPARE_TOLERANCE
=
850
XSMALL_SVG_IMAGE_ICON_DATA
=
'''<svg width="30" height="35" xmlns="http://www.w3.org/2000/svg">
<path d="m5,5l15,0l0,5l5,0l0,20l-20,0z" stroke-width="1.5" stroke="gray" fill="skyblue"/>
<path d="m6,29l8,-8l5,5l2,-2l3,3l0,2z" stroke-width="0" fill="green"/>
<path d="m25,10l0,-1l-4,-4l-1,0l0,5z" stroke-width="1.5" stroke="gray" fill="white"/>
<path d="m8,15c5,-8 10,-2 10,0z" stroke-width="0" fill="white"/>
</svg>'''
XSMALL_PNG_IMAGE_ICON_DATA
=
b64decode
(
'''
iVBORw0KGgoAAAANSUhEUgAAAB4AAAAjCAIAAAAMti2GAAABkElEQVRIiWP8//8/A20AE43MHbJG
syBzduzY8fLlSyJ1vnv3joGBQUtLy93dnbDRL168ePj0OSO/CDFG///8meH//xMnTvz48cPf35+A
0QwMDIz8ImzWgcQY/XPbbHlpSQEBgQsXLjAwMGCajm40qSAgIICBgQGr6ZQajWw6Ozu7h4cHdYx+
+fLlwoUL4dxr165Rx2hGLr4f3z49ePIMxmdEU0DAaHZmRlNRThMxTg5mxo+//p1+9f3M6+8QKTaH
cGSVv46uF+JhJdZodmbGKFV+cU6oGn42JhcZbnEulq0PPxPwEQMDA57ciGYuHOgKsZuIclJktIsM
D6a5EGAqRpTROANk68PPRHocFxiaJd+o0WQaffbR8jUX8kgymqgyBNncEINJRBpN2NXI5pLkdgJG
Y5pFvE34AgSXzrOPljMwMCgKWeIPJZxG43fR2UfLIRbAbfJjcERTgz1ASE0PcGsIGE1GOsMK0APk
/6e3ek9E9ERmk2rQv49vGHgkcBotISHBQDbglkDTzjjaCKab0QBziJyFukqO6AAAAABJRU5ErkJg
gg=='''
)
def
makeFilePath
(
name
):
return
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'test_data'
,
name
)
...
...
@@ -68,6 +90,26 @@ def compare_image(image_data_1, image_data_2):
data2
=
process_image
(
image_data_2
)
return
abs
(
sum
([
data1
[
x
]
-
data2
[
x
]
for
x
in
range
(
len
(
data1
))]))
def
customScript
(
script_id
,
script_param
,
script_code
):
def
wrapper
(
func
):
@
functools
.
wraps
(
func
)
def
wrapped
(
self
,
*
args
,
**
kwargs
):
if
script_id
in
self
.
portal
.
portal_skins
.
custom
.
objectIds
():
raise
ValueError
(
'Precondition failed: %s exists in custom'
%
script_id
)
createZODBPythonScript
(
self
.
portal
.
portal_skins
.
custom
,
script_id
,
script_param
,
script_code
,
)
try
:
func
(
self
,
*
args
,
**
kwargs
)
finally
:
if
script_id
in
self
.
portal
.
portal_skins
.
custom
.
objectIds
():
self
.
portal
.
portal_skins
.
custom
.
manage_delObjects
(
script_id
)
transaction
.
commit
()
return
wrapped
return
wrapper
class
TestERP5WebWithDms
(
ERP5TypeTestCase
,
ZopeTestCase
.
Functional
):
"""Test for erp5_web business template.
...
...
@@ -1081,6 +1123,416 @@ return True
"""
self
.
_testImageConversionFromSVGToPNG_http_url
(
"Web Page"
)
def
test_WebPageAsEmbeddedHtml_simplePage
(
self
):
"""Test convert one simple html page to embedded html file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
html_data
=
"<p>World</p>"
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
text_content
=
html_data
)
# Test part
ehtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"embedded_html"
)
self
.
assertEqual
(
ehtml_data
,
html_data
)
def
test_WebPageAsMhtml_simplePage
(
self
):
"""Test convert one simple html page to mhtml file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
title
=
"Hello"
html_data
=
"<p>World</p>"
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
title
=
title
,
text_content
=
html_data
)
# Test part
mhtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"mhtml"
)
message
=
EmailParser
().
parsestr
(
mhtml_data
)
self
.
assertEqual
(
message
.
get_params
(),
[
(
"multipart/related"
,
""
),
(
"type"
,
"text/html"
),
(
"boundary"
,
message
.
get_boundary
()),
])
self
.
assertEqual
(
message
.
get
(
"Subject"
),
title
)
htmlmessage
,
=
message
.
get_payload
()
self
.
assertEqual
(
# should have only one content transfer encoding header
len
([
h
for
h
in
htmlmessage
.
keys
()
if
h
==
"Content-Transfer-Encoding"
]),
1
,
)
self
.
assertEqual
(
htmlmessage
.
get
(
"Content-Transfer-Encoding"
),
"quoted-printable"
,
)
self
.
assertEqual
(
htmlmessage
.
get
(
"Content-Location"
),
page
.
absolute_url
())
self
.
assertEqual
(
quopri
.
decodestring
(
htmlmessage
.
get_payload
()),
html_data
)
def
test_WebPageAsEmbeddedHtml_pageWithScript
(
self
):
"""Test convert one html page with script to embedded html file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
html_data
=
"<script>alert('Hello');</script><p>World</p>"
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
text_content
=
html_data
)
# Test part
ehtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"embedded_html"
)
self
.
assertEqual
(
ehtml_data
,
"<p>World</p>"
)
def
test_WebPageAsMhtml_pageWithScript
(
self
):
"""Test convert one html page with script to mhtml file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
title
=
"Hello"
html_data
=
"<script>alert('Hello');</script><p>World</p>"
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
title
=
title
,
text_content
=
html_data
)
# Test part
mhtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"mhtml"
)
message
=
EmailParser
().
parsestr
(
mhtml_data
)
htmlmessage
,
=
message
.
get_payload
()
self
.
assertEqual
(
# should have only one content transfer encoding header
len
([
h
for
h
in
htmlmessage
.
keys
()
if
h
==
"Content-Transfer-Encoding"
]),
1
,
)
self
.
assertEqual
(
htmlmessage
.
get
(
"Content-Transfer-Encoding"
),
"quoted-printable"
,
)
self
.
assertEqual
(
htmlmessage
.
get
(
"Content-Location"
),
page
.
absolute_url
())
self
.
assertEqual
(
quopri
.
decodestring
(
htmlmessage
.
get_payload
()),
"<p>World</p>"
)
def
test_WebPageAsEmbeddedHtml_pageWithMoreThanOneImage
(
self
):
"""Test convert one html page with images to embedded html file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
image_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Image"
)
svg
=
image_module
.
newContent
(
portal_type
=
"Image"
)
svg
.
edit
(
content_type
=
"image/svg+xml"
,
data
=
XSMALL_SVG_IMAGE_ICON_DATA
)
svg
.
publish
()
png
=
image_module
.
newContent
(
portal_type
=
"Image"
)
png
.
edit
(
content_type
=
"image/png"
,
data
=
XSMALL_PNG_IMAGE_ICON_DATA
)
png
.
publish
()
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
text_content
=
""
.
join
([
"<p>Hello</p>"
,
'<img src="/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="/%s?format=" />'
%
png
.
getRelativeUrl
(),
'<img src="/%s?format=png" />'
%
svg
.
getRelativeUrl
(),
]))
# Test part
ehtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"embedded_html"
)
self
.
assertTrue
(
ehtml_data
.
startswith
(
""
.
join
([
"<p>Hello</p>"
,
'<img src="data:image/svg+xml;base64,%s" />'
%
b64encode
(
XSMALL_SVG_IMAGE_ICON_DATA
),
'<img src="data:image/png;base64,%s" />'
%
b64encode
(
XSMALL_PNG_IMAGE_ICON_DATA
),
'<img src="data:image/png;base64,'
])))
def
test_WebPageAsMhtml_pageWithMoreThanOneImage
(
self
):
"""Test convert one html page with images to mhtml file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
image_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Image"
)
svg
=
image_module
.
newContent
(
portal_type
=
"Image"
)
svg
.
edit
(
content_type
=
"image/svg+xml"
,
data
=
XSMALL_SVG_IMAGE_ICON_DATA
)
svg
.
publish
()
png
=
image_module
.
newContent
(
portal_type
=
"Image"
)
png
.
edit
(
content_type
=
"image/png"
,
data
=
XSMALL_PNG_IMAGE_ICON_DATA
)
png
.
publish
()
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
text_content
=
""
.
join
([
"<p>Hello</p>"
,
'<img src="/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="/%s?format=" />'
%
png
.
getRelativeUrl
(),
'<img src="/%s?format=png" />'
%
svg
.
getRelativeUrl
(),
]))
# Test part
mhtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"mhtml"
)
message
=
EmailParser
().
parsestr
(
mhtml_data
)
htmlmessage
,
svgmessage
,
pngmessage
,
svgtopngmessage
=
message
.
get_payload
()
self
.
assertEqual
(
quopri
.
decodestring
(
htmlmessage
.
get_payload
()),
""
.
join
([
"<p>Hello</p>"
,
'<img src="%s?format=" />'
%
svg
.
absolute_url
(),
'<img src="%s?format=" />'
%
png
.
absolute_url
(),
'<img src="%s?format=png" />'
%
svg
.
absolute_url
(),
]),
)
for
content_type
,
ext
,
message
,
obj
,
data
in
[
(
"image/svg+xml"
,
""
,
svgmessage
,
svg
,
XSMALL_SVG_IMAGE_ICON_DATA
),
(
"image/png"
,
""
,
pngmessage
,
png
,
XSMALL_PNG_IMAGE_ICON_DATA
),
(
"image/png"
,
"png"
,
svgtopngmessage
,
svg
,
None
),
]:
__traceback_info__
=
(
content_type
,
"?format="
+
ext
)
self
.
assertEqual
(
message
.
get
(
"Content-Location"
),
obj
.
absolute_url
()
+
"?format="
+
ext
,
)
self
.
assertEqual
(
# should have only one content transfer encoding header
len
([
h
for
h
in
message
.
keys
()
if
h
==
"Content-Transfer-Encoding"
]),
1
,
)
self
.
assertEqual
(
message
.
get
(
"Content-Type"
),
content_type
)
encoding
=
message
.
get
(
"Content-Transfer-Encoding"
)
self
.
assertIn
(
encoding
,
(
"base64"
,
"quoted-printable"
))
# quoted printable encoding is accepted for svg images
if
data
:
if
encoding
==
"base64"
:
self
.
assertEqual
(
b64decode
(
message
.
get_payload
()),
data
,
)
elif
encoding
==
"quoted-printable"
:
self
.
assertEqual
(
quopri
.
decodestring
(
message
.
get_payload
()),
data
,
)
else
:
raise
ValueError
(
"unhandled encoding %r"
%
encoding
)
else
:
self
.
assertTrue
(
len
(
message
.
get_payload
())
>
0
)
@
customScript
(
"ERP5Site_getWebSiteDomainDict"
,
""
,
'return {"test.portal.erp": context.getPortalObject()}'
)
def
test_WebPageAsEmbeddedHtml_pageWithDifferentHref
(
self
):
"""Test convert one html page with images to embedded html file"""
# Test init part
# XXX use web site domain properties instead of @customScript
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
image_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Image"
)
svg
=
image_module
.
newContent
(
portal_type
=
"Image"
)
svg
.
edit
(
content_type
=
"image/svg+xml"
,
data
=
XSMALL_SVG_IMAGE_ICON_DATA
)
svg
.
publish
()
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
text_content
=
""
.
join
([
"<p>Hello</p>"
,
'<img src="%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="//test.portal.erp/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="http://test.portal.erp/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="https://test.portal.erp/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="//example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="http://example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="https://example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="data:image/svg+xml,<svg></svg>" />'
,
'<img src="tel:1234567890" />'
,
'<img src="mailto:me" />'
,
]))
protocol
=
page
.
absolute_url
().
split
(
":"
,
1
)[
0
]
+
":"
# Test part
ehtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"embedded_html"
)
self
.
assertEqual
(
ehtml_data
,
""
.
join
([
"<p>Hello</p>"
,
]
+
([
'<img src="data:image/svg+xml;base64,%s" />'
%
b64encode
(
XSMALL_SVG_IMAGE_ICON_DATA
),
]
*
5
)
+
[
'<img src="%s//example.com/%s?format=" />'
%
(
protocol
,
svg
.
getRelativeUrl
()),
'<img src="http://example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="https://example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="data:image/svg+xml,<svg></svg>" />'
,
'<img src="tel:1234567890" />'
,
'<img src="mailto:me" />'
,
]))
@
customScript
(
"ERP5Site_getWebSiteDomainDict"
,
""
,
'return {"test.portal.erp": context.getPortalObject()}'
)
def
test_WebPageAsMhtml_pageWithDifferentHref
(
self
):
"""Test convert one html page with images to mhtml file"""
# Test init part
# XXX use web site domain properties instead of @customScript
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
image_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Image"
)
svg
=
image_module
.
newContent
(
portal_type
=
"Image"
)
svg
.
edit
(
content_type
=
"image/svg+xml"
,
data
=
XSMALL_SVG_IMAGE_ICON_DATA
)
svg
.
publish
()
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
text_content
=
""
.
join
([
"<p>Hello</p>"
,
'<img src="%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="//test.portal.erp/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="http://test.portal.erp/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="https://test.portal.erp/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="//example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="http://example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="https://example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="data:image/svg+xml,<svg></svg>" />'
,
'<img src="tel:1234567890" />'
,
'<img src="mailto:me" />'
,
]))
protocol
=
page
.
absolute_url
().
split
(
":"
,
1
)[
0
]
+
":"
# Test part
mhtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"mhtml"
)
message
=
EmailParser
().
parsestr
(
mhtml_data
)
self
.
assertEqual
(
len
(
message
.
get_payload
()),
6
)
htmlmessage
=
message
.
get_payload
()[
0
]
self
.
assertEqual
(
quopri
.
decodestring
(
htmlmessage
.
get_payload
()),
""
.
join
([
"<p>Hello</p>"
,
'<img src="%s/%s?format=" />'
%
(
page
.
absolute_url
(),
svg
.
getRelativeUrl
()),
'<img src="%s?format=" />'
%
svg
.
absolute_url
(),
'<img src="%s//test.portal.erp/%s?format=" />'
%
(
protocol
,
svg
.
getRelativeUrl
()),
'<img src="http://test.portal.erp/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="https://test.portal.erp/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="%s//example.com/%s?format=" />'
%
(
protocol
,
svg
.
getRelativeUrl
()),
'<img src="http://example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="https://example.com/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="data:image/svg+xml,<svg></svg>" />'
,
'<img src="tel:1234567890" />'
,
'<img src="mailto:me" />'
,
]),
)
for
message
,
location
in
[
(
message
.
get_payload
()[
1
],
"%s/%s?format="
%
(
page
.
absolute_url
(),
svg
.
getRelativeUrl
())),
(
message
.
get_payload
()[
2
],
"%s?format="
%
svg
.
absolute_url
()),
(
message
.
get_payload
()[
3
],
"%s//test.portal.erp/%s?format="
%
(
protocol
,
svg
.
getRelativeUrl
())),
(
message
.
get_payload
()[
4
],
"http://test.portal.erp/%s?format="
%
svg
.
getRelativeUrl
()),
(
message
.
get_payload
()[
5
],
"https://test.portal.erp/%s?format="
%
svg
.
getRelativeUrl
()),
]:
self
.
assertEqual
(
message
.
get
(
"Content-Location"
),
location
,
)
self
.
assertEqual
(
# should have only one content transfer encoding header
len
([
h
for
h
in
message
.
keys
()
if
h
==
"Content-Transfer-Encoding"
]),
1
,
)
encoding
=
message
.
get
(
"Content-Transfer-Encoding"
)
self
.
assertIn
(
encoding
,
(
"base64"
,
"quoted-printable"
))
# quoted printable encoding is accepted for svg images
if
encoding
==
"base64"
:
self
.
assertEqual
(
b64decode
(
message
.
get_payload
()),
XSMALL_SVG_IMAGE_ICON_DATA
,
)
elif
encoding
==
"quoted-printable"
:
self
.
assertEqual
(
quopri
.
decodestring
(
message
.
get_payload
()),
XSMALL_SVG_IMAGE_ICON_DATA
,
)
else
:
raise
ValueError
(
"unhandled encoding %r"
%
encoding
)
def
test_WebPageAsEmbeddedHtml_pageWith1000Image
(
self
):
"""Test convert one html page with 1000 images to embedded html file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
image_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Image"
)
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
text_content_list
=
[
"<p>Hello</p>"
]
for
i
in
range
(
0
,
1000
,
5
):
svg
=
image_module
.
newContent
(
portal_type
=
"Image"
)
svg
.
edit
(
content_type
=
"image/svg+xml"
,
data
=
XSMALL_SVG_IMAGE_ICON_DATA
)
svg
.
publish
()
png
=
image_module
.
newContent
(
portal_type
=
"Image"
)
png
.
edit
(
content_type
=
"image/png"
,
data
=
XSMALL_PNG_IMAGE_ICON_DATA
)
png
.
publish
()
text_content_list
+=
[
'<img src="/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="/%s?format=" />'
%
png
.
getRelativeUrl
(),
'<img src="/%s?format=png" />'
%
svg
.
getRelativeUrl
(),
'<img src="/%s?format=jpg" />'
%
png
.
getRelativeUrl
(),
'<img src="/%s?format=jpg" />'
%
svg
.
getRelativeUrl
(),
]
page
.
edit
(
text_content
=
""
.
join
(
text_content_list
))
# Test part
ehtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"embedded_html"
)
self
.
assertEqual
(
ehtml_data
.
count
(
"<img"
),
1000
)
def
test_WebPageAsMhtml_pageWith1000Image
(
self
):
"""Test convert one html page with 1000 images to mhtml file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
image_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Image"
)
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
text_content_list
=
[
"<p>Hello</p>"
]
for
i
in
range
(
0
,
1000
,
5
):
svg
=
image_module
.
newContent
(
portal_type
=
"Image"
)
svg
.
edit
(
content_type
=
"image/svg+xml"
,
data
=
XSMALL_SVG_IMAGE_ICON_DATA
)
svg
.
publish
()
png
=
image_module
.
newContent
(
portal_type
=
"Image"
)
png
.
edit
(
content_type
=
"image/png"
,
data
=
XSMALL_PNG_IMAGE_ICON_DATA
)
png
.
publish
()
text_content_list
+=
[
'<img src="/%s?format=" />'
%
svg
.
getRelativeUrl
(),
'<img src="/%s?format=" />'
%
png
.
getRelativeUrl
(),
'<img src="/%s?format=png" />'
%
svg
.
getRelativeUrl
(),
'<img src="/%s?format=jpg" />'
%
png
.
getRelativeUrl
(),
'<img src="/%s?format=jpg" />'
%
svg
.
getRelativeUrl
(),
]
page
.
edit
(
text_content
=
""
.
join
(
text_content_list
))
# Test part
mhtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"mhtml"
)
message
=
EmailParser
().
parsestr
(
mhtml_data
)
self
.
assertEqual
(
len
(
message
.
get_payload
()),
1001
)
def
test_WebPageAsEmbeddedHtml_pageWithStyle
(
self
):
"""Test convert one html page with style tag to embedded html file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
image_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Image"
)
img
=
image_module
.
newContent
(
portal_type
=
"Image"
)
img
.
edit
(
content_type
=
"image/svg+xml"
,
data
=
XSMALL_SVG_IMAGE_ICON_DATA
)
img
.
publish
()
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
text_content
=
"<style>%s</style><p>Hello</p>"
%
(
'body { background-image: url( "/%s?format=" ); }'
%
(
img
.
getRelativeUrl
())),
)
# Test part
ehtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"embedded_html"
)
self
.
assertEqual
(
ehtml_data
,
"<style>%s</style><p>Hello</p>"
%
(
'body { background-image: url(data:image/svg+xml;base64,%s); }'
%
(
b64encode
(
XSMALL_SVG_IMAGE_ICON_DATA
))),
)
def
test_WebPageAsMhtml_pageWithStyle
(
self
):
"""Test convert one html page with style tag to mhtml file"""
# Test init part
web_page_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Web Page"
)
image_module
=
self
.
portal
.
getDefaultModule
(
portal_type
=
"Image"
)
img
=
image_module
.
newContent
(
portal_type
=
"Image"
)
img
.
edit
(
content_type
=
"image/svg+xml"
,
data
=
XSMALL_SVG_IMAGE_ICON_DATA
)
img
.
publish
()
page
=
web_page_module
.
newContent
(
portal_type
=
"Web Page"
)
page
.
edit
(
text_content
=
"<style>%s</style><p>Hello</p>"
%
(
'body { background-image: url( "/%s?format=" ); }'
%
(
img
.
getRelativeUrl
())),
)
# Test part
mhtml_data
=
page
.
WebPage_exportAsSingleFile
(
format
=
"mhtml"
)
message
=
EmailParser
().
parsestr
(
mhtml_data
)
htmlmessage
,
imagemessage
=
message
.
get_payload
()
self
.
assertEqual
(
quopri
.
decodestring
(
htmlmessage
.
get_payload
()),
"<style>%s</style><p>Hello</p>"
%
(
"body { background-image: url(%s?format=); }"
%
(
img
.
absolute_url
())),
)
self
.
assertEqual
(
imagemessage
.
get
(
"Content-Location"
),
img
.
absolute_url
()
+
"?format="
,
)
self
.
assertEqual
(
# should have only one content transfer encoding header
len
([
h
for
h
in
imagemessage
.
keys
()
if
h
==
"Content-Transfer-Encoding"
]),
1
,
)
encoding
=
imagemessage
.
get
(
"Content-Transfer-Encoding"
)
self
.
assertIn
(
encoding
,
(
"base64"
,
"quoted-printable"
))
# quoted printable encoding is accepted for svg images
if
encoding
==
"base64"
:
self
.
assertEqual
(
b64decode
(
imagemessage
.
get_payload
()),
XSMALL_SVG_IMAGE_ICON_DATA
,
)
elif
encoding
==
"quoted-printable"
:
self
.
assertEqual
(
quopri
.
decodestring
(
imagemessage
.
get_payload
()),
XSMALL_SVG_IMAGE_ICON_DATA
,
)
else
:
raise
ValueError
(
"unhandled encoding %r"
%
encoding
)
def
test_suite
():
suite
=
unittest
.
TestSuite
()
suite
.
addTest
(
unittest
.
makeSuite
(
TestERP5WebWithDms
))
...
...
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