aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--_pytest/test_unwrap_attachments.py150
-rw-r--r--wee_slack.py13
2 files changed, 157 insertions, 6 deletions
diff --git a/_pytest/test_unwrap_attachments.py b/_pytest/test_unwrap_attachments.py
new file mode 100644
index 0000000..ee5bd8b
--- /dev/null
+++ b/_pytest/test_unwrap_attachments.py
@@ -0,0 +1,150 @@
+import wee_slack
+import pytest
+
+
+@pytest.mark.parametrize('case', (
+ {
+ 'input_message': {'attachments': [{
+ 'title': 'Title',
+ }]},
+ 'input_text_before': "Text before",
+ 'output': "\n".join([
+ "",
+ "Title",
+ ]),
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'title': 'Title',
+ 'text': 'Attachment text',
+ 'title_link': 'http://title.link',
+ 'from_url': 'http://from.url',
+ 'fallback': 'Fallback',
+ }]},
+ 'input_text_before': "",
+ 'output': "\n".join([
+ "Title (http://title.link)",
+ "http://from.url",
+ "Attachment text",
+ ]),
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'title': 'Title',
+ 'text': 'Attachment text',
+ 'title_link': 'http://link?a=1&b=2',
+ 'from_url': 'http://link?a=1&b=2',
+ }]},
+ 'input_text_before': "http://link?a=1&b=2",
+ 'output': "\n".join([
+ "",
+ "Title",
+ "Attachment text",
+ ]),
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'title': 'Title',
+ 'text': 'Attachment text',
+ 'title_link': 'http://link',
+ 'from_url': 'http://link',
+ }]},
+ 'input_text_before': "",
+ 'output': "\n".join([
+ "Title (http://link)",
+ "Attachment text",
+ ]),
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'title': 'Title',
+ 'text': 'Attachment text\n\n\nWith multiple lines',
+ }]},
+ 'input_text_before': "",
+ 'output': "\n".join([
+ "Title",
+ "Attachment text\nWith multiple lines",
+ ]),
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'title': 'Title',
+ 'author_name': 'Author',
+ 'pretext': 'Pretext',
+ 'text': 'Attachment text',
+ 'title_link': 'http://title.link',
+ 'from_url': 'http://from.url',
+ }]},
+ 'input_text_before': "",
+ 'output': "\n".join([
+ "Pretext",
+ "Author: Title (http://title.link)",
+ "http://from.url",
+ "Attachment text",
+ ]),
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'author_name': 'Author',
+ 'text': 'Attachment text',
+ 'title_link': 'http://title.link',
+ 'from_url': 'http://from.url',
+ }]},
+ 'input_text_before': "",
+ 'output': "\n".join([
+ "http://from.url",
+ "Author: Attachment text",
+ ]),
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'fallback': 'Fallback',
+ }]},
+ 'input_text_before': "",
+ 'output': "Fallback",
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'title': 'Title',
+ 'fields': [{
+ 'title': 'First field title',
+ 'value': 'First field value',
+ }, {
+ 'title': '',
+ 'value': 'Second field value',
+ }],
+ }]},
+ 'input_text_before': "",
+ 'output': "\n".join([
+ "Title",
+ "First field title First field value",
+ "Second field value",
+ ]),
+ },
+ {
+ 'input_message': {'attachments': [{
+ 'title': 'First attachment title',
+ 'text': 'First attachment text',
+ 'title_link': 'http://title.link.1',
+ 'from_url': 'http://from.url.1',
+ }, {
+ 'title': 'Second attachment title',
+ 'text': 'Second attachment text',
+ 'title_link': 'http://title.link.2',
+ 'from_url': 'http://from.url.2',
+ }]},
+ 'input_text_before': "",
+ 'output': "\n".join([
+ "First attachment title (http://title.link.1)",
+ "http://from.url.1",
+ "First attachment text",
+ "Second attachment title (http://title.link.2)",
+ "http://from.url.2",
+ "Second attachment text",
+ ]),
+ },
+))
+def test_unwrap_attachments(case):
+ result = wee_slack.unwrap_attachments(
+ case['input_message'], case['input_text_before'])
+ assert result == case['output']
diff --git a/wee_slack.py b/wee_slack.py
index 0948031..8854e18 100644
--- a/wee_slack.py
+++ b/wee_slack.py
@@ -2667,11 +2667,12 @@ def unhtmlescape(text):
def unwrap_attachments(message_json, text_before):
- attachment_text = ''
+ text_before_unescaped = unhtmlescape(text_before)
+ attachment_texts = []
a = message_json.get("attachments", None)
if a:
if text_before:
- attachment_text = '\n'
+ attachment_texts.append('')
for attachment in a:
# Attachments should be rendered roughly like:
#
@@ -2687,7 +2688,7 @@ def unwrap_attachments(message_json, text_before):
t.append(attachment['pretext'])
title = attachment.get('title', None)
title_link = attachment.get('title_link', '')
- if title_link in text_before:
+ if title_link in text_before_unescaped:
title_link = ''
if title and title_link:
t.append('%s%s (%s)' % (prepend_title_text, title, title_link,))
@@ -2696,7 +2697,7 @@ def unwrap_attachments(message_json, text_before):
t.append('%s%s' % (prepend_title_text, title,))
prepend_title_text = ''
from_url = attachment.get('from_url', '')
- if from_url not in text_before:
+ if from_url not in text_before_unescaped and from_url != title_link:
t.append(from_url)
atext = attachment.get("text", None)
@@ -2714,8 +2715,8 @@ def unwrap_attachments(message_json, text_before):
fallback = attachment.get("fallback", None)
if t == [] and fallback:
t.append(fallback)
- attachment_text += "\n".join([x.strip() for x in t if x])
- return attachment_text
+ attachment_texts.append("\n".join([x.strip() for x in t if x]))
+ return "\n".join(attachment_texts)
def resolve_ref(ref):