mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
Since FIXTURE_DIR_NAME is the name of the folder that contains the view and tests modules of the webhook and another folder called "fixtures" that store the fixtures, it is more appropriate to call it WEBHOOK_DIR_NAME, especially when we want to refer to the view module using this variable.
223 lines
7.1 KiB
Python
223 lines
7.1 KiB
Python
import orjson
|
|
|
|
from zerver.lib.test_classes import WebhookTestCase
|
|
|
|
|
|
class FrontHookTests(WebhookTestCase):
|
|
STREAM_NAME = "front"
|
|
URL_TEMPLATE = "/api/v1/external/front?&api_key={api_key}&stream={stream}"
|
|
WEBHOOK_DIR_NAME = "front"
|
|
|
|
# Scenario 1: Conversation starts from an outbound message.
|
|
|
|
# Conversation automatically assigned to a teammate who started it.
|
|
def test_conversation_assigned_outbound(self) -> None:
|
|
expected_topic = "cnv_keo696"
|
|
expected_message = "**Leela Turanga** assigned themselves."
|
|
|
|
self.check_webhook(
|
|
"conversation_assigned_outbound",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_outbound_message(self) -> None:
|
|
expected_topic = "cnv_keo696"
|
|
expected_message = (
|
|
"[Outbound message](https://app.frontapp.com/open/msg_1176ie2) "
|
|
"from **support@planet-express.com** "
|
|
"to **calculon@momsbot.com**:\n"
|
|
"```quote\n*Subject*: Your next delivery is on Epsilon 96Z\n```"
|
|
)
|
|
|
|
self.check_webhook(
|
|
"outbound_message",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_conversation_archived(self) -> None:
|
|
expected_topic = "cnv_keo696"
|
|
expected_message = "Archived by **Leela Turanga**."
|
|
|
|
self.check_webhook(
|
|
"conversation_archived",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_conversation_reopened(self) -> None:
|
|
expected_topic = "cnv_keo696"
|
|
expected_message = "Reopened by **Leela Turanga**."
|
|
|
|
self.check_webhook(
|
|
"conversation_reopened",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_conversation_deleted(self) -> None:
|
|
expected_topic = "cnv_keo696"
|
|
expected_message = "Deleted by **Leela Turanga**."
|
|
|
|
self.check_webhook(
|
|
"conversation_deleted",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_conversation_restored(self) -> None:
|
|
expected_topic = "cnv_keo696"
|
|
expected_message = "Restored by **Leela Turanga**."
|
|
|
|
self.check_webhook(
|
|
"conversation_restored",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_conversation_unassigned(self) -> None:
|
|
expected_topic = "cnv_keo696"
|
|
expected_message = "Unassigned by **Leela Turanga**."
|
|
|
|
self.check_webhook(
|
|
"conversation_unassigned",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_mention_all(self) -> None:
|
|
expected_topic = "cnv_keo696"
|
|
expected_message = (
|
|
"**Leela Turanga** left a comment:\n"
|
|
"```quote\n@all Could someone else take this?\n```"
|
|
)
|
|
|
|
self.check_webhook(
|
|
"mention_all",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
# Scenario 2: Conversation starts from an inbound message.
|
|
|
|
def test_inbound_message(self) -> None:
|
|
expected_topic = "cnv_keocka"
|
|
expected_message = (
|
|
"[Inbound message](https://app.frontapp.com/open/msg_1176r8y) "
|
|
"from **calculon@momsbot.com** "
|
|
"to **support@planet-express.com**:\n"
|
|
"```quote\n*Subject*: Being a robot is great, but...\n```"
|
|
)
|
|
|
|
self.check_webhook(
|
|
"inbound_message",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_conversation_tagged(self) -> None:
|
|
expected_topic = "cnv_keocka"
|
|
expected_message = "**Leela Turanga** added tag **Urgent**."
|
|
|
|
self.check_webhook(
|
|
"conversation_tagged",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
# Conversation automatically assigned to a teammate who replied to it.
|
|
def test_conversation_assigned_reply(self) -> None:
|
|
expected_topic = "cnv_keocka"
|
|
expected_message = "**Leela Turanga** assigned themselves."
|
|
|
|
self.check_webhook(
|
|
"conversation_assigned_reply",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_outbound_reply(self) -> None:
|
|
expected_topic = "cnv_keocka"
|
|
expected_message = (
|
|
"[Outbound reply](https://app.frontapp.com/open/msg_1176ryy) "
|
|
"from **support@planet-express.com** "
|
|
"to **calculon@momsbot.com**."
|
|
)
|
|
|
|
self.check_webhook(
|
|
"outbound_reply",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_conversation_untagged(self) -> None:
|
|
expected_topic = "cnv_keocka"
|
|
expected_message = "**Leela Turanga** removed tag **Urgent**."
|
|
|
|
self.check_webhook(
|
|
"conversation_untagged",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_mention(self) -> None:
|
|
expected_topic = "cnv_keocka"
|
|
expected_message = (
|
|
"**Leela Turanga** left a comment:\n"
|
|
"```quote\n@bender Could you take it from here?\n```"
|
|
)
|
|
|
|
self.check_webhook(
|
|
"mention",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_comment(self) -> None:
|
|
expected_topic = "cnv_keocka"
|
|
expected_message = "**Bender Rodriguez** left a comment:\n```quote\nSure.\n```"
|
|
|
|
self.check_webhook(
|
|
"comment",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
# Conversation manually assigned to another teammate.
|
|
def test_conversation_assigned(self) -> None:
|
|
expected_topic = "cnv_keocka"
|
|
expected_message = "**Leela Turanga** assigned **Bender Rodriguez**."
|
|
|
|
self.check_webhook(
|
|
"conversation_assigned",
|
|
expected_topic,
|
|
expected_message,
|
|
content_type="application/x-www-form-urlencoded",
|
|
)
|
|
|
|
def test_unknown_webhook_request(self) -> None:
|
|
payload = self.get_body("conversation_assigned")
|
|
payload_json = orjson.loads(payload)
|
|
payload_json["type"] = "qwerty"
|
|
result = self.client_post(
|
|
self.url, orjson.dumps(payload_json), content_type="application/x-www-form-urlencoded"
|
|
)
|
|
|
|
self.assert_json_error(result, "Unknown webhook request")
|