Files
zulip/zerver/webhooks/slack/tests.py
wizsid11 95789eb879 Add Slack webhook.
Adds a new webhook integration for Slack to receive messages
from one's Slack team's public channels.
Contains negative tests for broken, missing or invalid data.

Allows two different option for integration:
1. Receive notification on a single stream with different topics
for each of Slack's public channels.
2. Receive notification on different streams for each of Slack's
public channels.

Steps to choose between the two options is described in the documentation.

Fixes #3569.
2017-03-23 23:32:38 -07:00

65 lines
2.6 KiB
Python

# -*- coding: utf-8 -*-
from zerver.lib.test_classes import WebhookTestCase
from six import text_type
class SlackWebhookTests(WebhookTestCase):
STREAM_NAME = 'slack'
URL_TEMPLATE = "/api/v1/external/slack?stream={stream}&api_key={api_key}"
FIXTURE_DIR_NAME = 'slack'
def test_slack_channel_to_topic(self):
# type: () -> None
expected_subject = u"channel: general"
expected_message = u"**slack_user**: `test\n`"
self.send_and_test_stream_message('message_info', expected_subject, expected_message,
content_type="application/x-www-form-urlencoded")
def test_slack_channel_to_stream(self):
# type: () -> None
self.STREAM_NAME = 'general'
self.url = "{}{}".format(self.url, "&channels_map_to_topics=0")
expected_subject = u"Message from Slack"
expected_message = u"**slack_user**: `test\n`"
self.send_and_test_stream_message('message_info', expected_subject, expected_message,
content_type="application/x-www-form-urlencoded")
def test_missing_data_user_name(self):
# type: () -> None
payload = self.get_body('message_info_missing_user_name')
url = self.build_webhook_url()
result = self.client_post(url, payload, content_type="application/x-www-form-urlencoded")
self.assert_json_error(result, "Missing 'user_name' argument")
def test_missing_data_channel_name(self):
# type: () -> None
payload = self.get_body('message_info_missing_channel_name')
url = self.build_webhook_url()
result = self.client_post(url, payload, content_type="application/x-www-form-urlencoded")
self.assert_json_error(result, "Missing 'channel_name' argument")
def test_missing_data_text(self):
# type: () -> None
payload = self.get_body('message_info_missing_text')
url = self.build_webhook_url()
result = self.client_post(url, payload, content_type="application/x-www-form-urlencoded")
self.assert_json_error(result, "Missing 'text' argument")
def test_invalid_channels_map_to_topics(self):
# type: () -> None
payload = self.get_body('message_info')
url = "{}{}".format(self.url, "&channels_map_to_topics=abc")
result = self.client_post(url, payload, content_type="application/x-www-form-urlencoded")
self.assert_json_error(result, 'Error: channels_map_to_topics parameter other than 0 or 1')
def get_body(self, fixture_name):
# type: (text_type) -> text_type
return self.fixture_data("slack", fixture_name, file_type="txt")