mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 12:03:46 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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}"
 | |
|     FIXTURE_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")
 |