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
Labels
Merge Requests
7
Merge Requests
7
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
Jérome Perrin
erp5
Commits
9c8624b1
Commit
9c8624b1
authored
Apr 24, 2024
by
Carlos Ramos Carreño
Browse files
Options
Browse Files
Download
Plain Diff
Fix erp5 interface post in Python 2
See merge request
nexedi/erp5!1925
parents
a7991cfa
2348985c
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
8 deletions
+45
-8
bt5/erp5_interface_post/TestTemplateItem/portal_components/test.erp5.testInterfacePost.py
...lateItem/portal_components/test.erp5.testInterfacePost.py
+45
-8
No files found.
bt5/erp5_interface_post/TestTemplateItem/portal_components/test.erp5.testInterfacePost.py
View file @
9c8624b1
...
@@ -34,12 +34,49 @@ if six.PY3:
...
@@ -34,12 +34,49 @@ if six.PY3:
else
:
else
:
from
email
import
message_from_string
as
message_from_bytes
from
email
import
message_from_string
as
message_from_bytes
# pylint:enable=no-name-in-module
# pylint:enable=no-name-in-module
from
email.generator
import
Generator
from
Products.ERP5Type.tests.ERP5TypeLiveTestCase
import
ERP5TypeTestCase
from
Products.ERP5Type.tests.ERP5TypeLiveTestCase
import
ERP5TypeTestCase
from
Products.ERP5Type.tests.Sequence
import
SequenceList
from
Products.ERP5Type.tests.Sequence
import
SequenceList
from
Products.ERP5Type.Utils
import
bytes2str
,
str2bytes
from
Products.ZSQLCatalog.SQLCatalog
import
SimpleQuery
from
Products.ZSQLCatalog.SQLCatalog
import
SimpleQuery
from
DateTime
import
DateTime
from
DateTime
import
DateTime
from
six
import
StringIO
import
re
def
normalize_email_bytes
(
email_bytes
):
# type: (bytes) -> str
"""
Normalizes the representation of email text, so that it can be compared.
The fields of the message are written in a predefined order, with
the `unixfrom` field removed and no line wrapping.
The code is intended to be compatible with both Python 2 and Python 3.
Args:
email_bytes: Content of the email, including headers.
Returns:
Normalized string representation of the e-mail contents.
"""
# Unfolding removes newlines followed by whitespace, as per RFC5322.
# This SHOULD be done by Python itself, but seemingly no-one cared
# enough.
email_bytes_unfolded
=
re
.
sub
(
br"\r?\n(?P<space>\
s)
",
br"
\
g
<
space
>
",
email_bytes,
)
msg = message_from_bytes(email_bytes_unfolded)
fp = StringIO()
g = Generator(fp, mangle_from_=False, maxheaderlen=0)
g.flatten(msg)
return fp.getvalue()
class TestInterfacePost(ERP5TypeTestCase):
class TestInterfacePost(ERP5TypeTestCase):
"""
"""
...
@@ -238,7 +275,7 @@ class TestInterfacePost(ERP5TypeTestCase):
...
@@ -238,7 +275,7 @@ class TestInterfacePost(ERP5TypeTestCase):
for internet_message_post in internet_message_post_list:
for internet_message_post in internet_message_post_list:
self.assertEqual(internet_message_post.getSimulationState(), 'exported')
self.assertEqual(internet_message_post.getSimulationState(), 'exported')
mail_object
=
email
.
message_from_string
(
internet_message_post
.
getData
().
decode
(
))
mail_object = email.message_from_string(
bytes2str(internet_message_post.getData()
))
self.assertEqual(
self.assertEqual(
internet_message_post.getReference(), mail_object['message-id'].strip('<>')
internet_message_post.getReference(), mail_object['message-id'].strip('<>')
)
)
...
@@ -255,8 +292,8 @@ class TestInterfacePost(ERP5TypeTestCase):
...
@@ -255,8 +292,8 @@ class TestInterfacePost(ERP5TypeTestCase):
self.assertNotEqual((), last_message)
self.assertNotEqual((), last_message)
_, _, message_text = last_message
_, _, message_text = last_message
self.assertEqual(
self.assertEqual(
bytes
(
message_from_bytes
(
message_text
)
),
normalize_email_bytes(message_text
),
bytes
(
message_from_bytes
(
sequence
[
'internet_message_post'
].
getData
()
)),
normalize_email_bytes(sequence['internet_message_post'].getData(
)),
)
)
def _getMailHostMessageForRecipient(self, recipient_email_address):
def _getMailHostMessageForRecipient(self, recipient_email_address):
...
@@ -273,14 +310,14 @@ class TestInterfacePost(ERP5TypeTestCase):
...
@@ -273,14 +310,14 @@ class TestInterfacePost(ERP5TypeTestCase):
message_list = self.portal.MailHost._message_list
message_list = self.portal.MailHost._message_list
self.assertEqual(len(message_list), len(self.recipient_list))
self.assertEqual(len(message_list), len(self.recipient_list))
for post in sequence['internet_message_post_list']:
for post in sequence['internet_message_post_list']:
post_recipient
=
email
.
message_from_string
(
post
.
getData
().
decode
(
))[
'to'
]
post_recipient = email.message_from_string(
bytes2str(post.getData()
))['to']
message_list = self._getMailHostMessageForRecipient(post_recipient)
message_list = self._getMailHostMessageForRecipient(post_recipient)
self.assertEqual(len(message_list), 1)
self.assertEqual(len(message_list), 1)
message = message_list[0]
message = message_list[0]
_, _, message_text = message
_, _, message_text = message
self.assertEqual(
self.assertEqual(
bytes
(
message_from_bytes
(
message_text
)
),
normalize_email_bytes(message_text
),
bytes
(
message_from_bytes
(
post
.
getData
()
)),
normalize_email_bytes(post.getData(
)),
)
)
def stepCheckMailMessagePreviewDisplaysLatestInternetMessagePostData(self, sequence=None, sequence_list=None):
def stepCheckMailMessagePreviewDisplaysLatestInternetMessagePostData(self, sequence=None, sequence_list=None):
...
@@ -295,7 +332,7 @@ class TestInterfacePost(ERP5TypeTestCase):
...
@@ -295,7 +332,7 @@ class TestInterfacePost(ERP5TypeTestCase):
post = sequence['internet_message_post']
post = sequence['internet_message_post']
# Create a response mail object
# Create a response mail object
mail_object
=
email
.
message_from_string
(
post
.
getData
().
decode
(
))
mail_object = email.message_from_string(
bytes2str(post.getData()
))
sender = mail_object['from']
sender = mail_object['from']
recipient = mail_object['to']
recipient = mail_object['to']
...
@@ -310,7 +347,7 @@ class TestInterfacePost(ERP5TypeTestCase):
...
@@ -310,7 +347,7 @@ class TestInterfacePost(ERP5TypeTestCase):
# Ingest it
# Ingest it
response_post = self.portal.internet_message_post_module.newContent(
response_post = self.portal.internet_message_post_module.newContent(
portal_type='Internet Message Post',
portal_type='Internet Message Post',
data
=
mail_object
.
as_string
().
encode
(
),
data=
str2bytes(mail_object.as_string()
),
)
)
response_post.prepareImport()
response_post.prepareImport()
sequence['internet_message_post_response'] = response_post
sequence['internet_message_post_response'] = response_post
...
...
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