mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Intercom sends a HEAD request to validate the webhook URL on their side, which was not expected in the previous implementation. This fixes the problem that we send out a confusing error message for it. Fixes #23912. Signed-off-by: Zixuan James Li <p359101898@gmail.com>
		
			
				
	
	
		
			272 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from unittest.mock import MagicMock, patch
 | 
						|
 | 
						|
from zerver.lib.test_classes import WebhookTestCase
 | 
						|
 | 
						|
 | 
						|
class IntercomWebHookTests(WebhookTestCase):
 | 
						|
    STREAM_NAME = "test"
 | 
						|
    URL_TEMPLATE = "/api/v1/external/intercom?&api_key={api_key}&stream={stream}"
 | 
						|
    WEBHOOK_DIR_NAME = "intercom"
 | 
						|
 | 
						|
    @patch("zerver.webhooks.intercom.view.check_send_webhook_message")
 | 
						|
    def test_ping_ignore(self, check_send_webhook_message_mock: MagicMock) -> None:
 | 
						|
        self.url = self.build_webhook_url()
 | 
						|
        payload = self.get_body("ping")
 | 
						|
        result = self.client_post(self.url, payload, content_type="application/json")
 | 
						|
        self.assertFalse(check_send_webhook_message_mock.called)
 | 
						|
        self.assert_json_success(result)
 | 
						|
 | 
						|
    def test_company_created(self) -> None:
 | 
						|
        expected_topic = "Companies"
 | 
						|
        expected_message = """
 | 
						|
New company **Kandra Labs** created:
 | 
						|
* **User count**: 1
 | 
						|
* **Monthly spending**: 0
 | 
						|
""".strip()
 | 
						|
        self.check_webhook(
 | 
						|
            "company_created",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_contact_added_email(self) -> None:
 | 
						|
        expected_topic = "Contact: Azure Bus from St. John's"
 | 
						|
        expected_message = "New email jerryguitarist@gmail.com added to contact."
 | 
						|
        self.check_webhook(
 | 
						|
            "contact_added_email",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_contact_created(self) -> None:
 | 
						|
        expected_topic = "Contact: Azure Bus from St. John's"
 | 
						|
        expected_message = """
 | 
						|
New contact created:
 | 
						|
* **Name (or pseudonym)**: Azure Bus from St. John's
 | 
						|
* **Email**: aaron@zulip.com
 | 
						|
* **Location**: St. John's, Newfoundland and Labrador, Canada
 | 
						|
""".strip()
 | 
						|
        self.check_webhook(
 | 
						|
            "contact_created",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_contact_signed_up(self) -> None:
 | 
						|
        expected_topic = "User: Lilac Raindrop from St. John's"
 | 
						|
        expected_message = """
 | 
						|
Contact signed up:
 | 
						|
* **Email**: iago@zulip.com
 | 
						|
* **Location**: St. John's, Newfoundland and Labrador, Canada
 | 
						|
""".strip()
 | 
						|
        self.check_webhook(
 | 
						|
            "contact_signed_up",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_contact_tag_created(self) -> None:
 | 
						|
        expected_topic = "Contact: Eeshan Garg"
 | 
						|
        expected_message = "Contact tagged with the `developer` tag."
 | 
						|
        self.check_webhook(
 | 
						|
            "contact_tag_created",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_contact_tag_deleted(self) -> None:
 | 
						|
        expected_topic = "Contact: Eeshan Garg"
 | 
						|
        expected_message = "The tag `developer` was removed from the contact."
 | 
						|
        self.check_webhook(
 | 
						|
            "contact_tag_deleted",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_admin_assigned(self) -> None:
 | 
						|
        expected_topic = "Lead: Eeshan Garg"
 | 
						|
        expected_message = "Tim Abbott assigned to conversation."
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_admin_assigned",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_admin_opened(self) -> None:
 | 
						|
        expected_topic = "Lead: Cordelia, Lear's daughter"
 | 
						|
        expected_message = "Eeshan Garg opened the conversation."
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_admin_opened",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_admin_closed(self) -> None:
 | 
						|
        expected_topic = "Lead: Eeshan Garg"
 | 
						|
        expected_message = "Cordelia, Lear's daughter closed the conversation."
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_admin_closed",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_admin_snoozed(self) -> None:
 | 
						|
        expected_topic = "Lead: Eeshan Garg"
 | 
						|
        expected_message = "Cordelia, Lear's daughter snoozed the conversation."
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_admin_snoozed",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_admin_unsnoozed(self) -> None:
 | 
						|
        expected_topic = "Lead: Eeshan Garg"
 | 
						|
        expected_message = "Cordelia, Lear's daughter unsnoozed the conversation."
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_admin_unsnoozed",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_admin_replied(self) -> None:
 | 
						|
        expected_topic = "Lead: Eeshan Garg"
 | 
						|
        expected_message = """
 | 
						|
Cordelia, Lear's daughter replied to the conversation:
 | 
						|
 | 
						|
``` quote
 | 
						|
Hey Eeshan! How can I help?
 | 
						|
```
 | 
						|
""".strip()
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_admin_replied",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_admin_noted(self) -> None:
 | 
						|
        expected_topic = "Lead: Eeshan Garg"
 | 
						|
        expected_message = """
 | 
						|
Cordelia, Lear's daughter added a note to the conversation:
 | 
						|
 | 
						|
``` quote
 | 
						|
Talk to Tim about this user's query.
 | 
						|
```
 | 
						|
""".strip()
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_admin_noted",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_admin_single_created(self) -> None:
 | 
						|
        expected_topic = "Lead: Eeshan Garg"
 | 
						|
        expected_message = """
 | 
						|
Cordelia, Lear's daughter initiated a conversation:
 | 
						|
 | 
						|
``` quote
 | 
						|
Hi Eeshan, What's up
 | 
						|
```
 | 
						|
""".strip()
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_admin_single_created",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_user_created(self) -> None:
 | 
						|
        expected_topic = "Lead: Rose Poodle from St. John's"
 | 
						|
        expected_message = """
 | 
						|
Rose Poodle from St. John's initiated a conversation:
 | 
						|
 | 
						|
``` quote
 | 
						|
Hello everyone!
 | 
						|
```
 | 
						|
""".strip()
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_user_created",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_conversation_user_replied(self) -> None:
 | 
						|
        expected_topic = "Lead: Eeshan Garg"
 | 
						|
        expected_message = """
 | 
						|
Eeshan Garg replied to the conversation:
 | 
						|
 | 
						|
``` quote
 | 
						|
Well, I need some help getting access to a developer account.
 | 
						|
```
 | 
						|
""".strip()
 | 
						|
        self.check_webhook(
 | 
						|
            "conversation_user_replied",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_event_created(self) -> None:
 | 
						|
        expected_topic = "Events"
 | 
						|
        expected_message = "New event **invited-friend** created."
 | 
						|
        self.check_webhook(
 | 
						|
            "event_created",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_user_created(self) -> None:
 | 
						|
        expected_topic = "User: Aaron Smith"
 | 
						|
        expected_message = """
 | 
						|
New user created:
 | 
						|
* **Name**: Aaron Smith
 | 
						|
* **Email**: aaron@zulip.com
 | 
						|
""".strip()
 | 
						|
 | 
						|
        self.check_webhook(
 | 
						|
            "user_created",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_user_deleted(self) -> None:
 | 
						|
        self.check_webhook(
 | 
						|
            "user_deleted",
 | 
						|
            "User: jerryguitarist@gmail.com",
 | 
						|
            "User deleted.",
 | 
						|
        )
 | 
						|
 | 
						|
    def test_user_email_updated(self) -> None:
 | 
						|
        self.check_webhook(
 | 
						|
            "user_email_updated",
 | 
						|
            "Contact: Azure Bus from St. John's",
 | 
						|
            "User's email was updated to aaron@zulip.com.",
 | 
						|
        )
 | 
						|
 | 
						|
    def test_user_tag_created(self) -> None:
 | 
						|
        self.check_webhook(
 | 
						|
            "user_tag_created",
 | 
						|
            "User: eeshangarg",
 | 
						|
            "The tag `developer` was added to the user.",
 | 
						|
        )
 | 
						|
 | 
						|
    def test_user_tag_deleted(self) -> None:
 | 
						|
        expected_topic = "User: eeshangarg"
 | 
						|
        expected_message = (
 | 
						|
            "The tag `CSV Import - 2019-03-26 22:46:04 UTC` was removed from the user."
 | 
						|
        )
 | 
						|
 | 
						|
        self.check_webhook(
 | 
						|
            "user_tag_deleted",
 | 
						|
            expected_topic,
 | 
						|
            expected_message,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_user_unsubscribed(self) -> None:
 | 
						|
        self.check_webhook(
 | 
						|
            "user_unsubscribed",
 | 
						|
            "Contact: Eeshan Garg",
 | 
						|
            "User unsubscribed from emails.",
 | 
						|
        )
 | 
						|
 | 
						|
    def test_success_on_http_head(self) -> None:
 | 
						|
        result = self.client_head(self.url)
 | 
						|
        self.assertEqual(result.status_code, 200)
 |