mirror of
https://github.com/PostHog/posthog.git
synced 2024-11-28 09:16:49 +01:00
99 lines
3.9 KiB
Python
99 lines
3.9 KiB
Python
from typing import List
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from freezegun import freeze_time
|
|
|
|
from ee.tasks.slack import handle_slack_event
|
|
from posthog import settings
|
|
from posthog.models.dashboard import Dashboard
|
|
from posthog.models.exported_asset import ExportedAsset
|
|
from posthog.models.insight import Insight
|
|
from posthog.models.integration import Integration
|
|
from posthog.models.sharing_configuration import SharingConfiguration
|
|
from posthog.models.subscription import Subscription
|
|
from posthog.test.base import APIBaseTest
|
|
|
|
|
|
def create_mock_unfurl_event(team_id: str, links: List[str]):
|
|
return {
|
|
"token": "XXYYZZ",
|
|
"team_id": team_id,
|
|
"api_app_id": "AXXXXXXXXX",
|
|
"event": {
|
|
"type": "link_shared",
|
|
"channel": "Cxxxxxx",
|
|
"is_bot_user_member": True,
|
|
"user": "Uxxxxxxx",
|
|
"message_ts": "123456789.9875",
|
|
"unfurl_id": "C123456.123456789.987501.1b90fa1278528ce6e2f6c5c2bfa1abc9a41d57d02b29d173f40399c9ffdecf4b",
|
|
"event_ts": "123456621.1855",
|
|
"source": "conversations_history",
|
|
"links": [{"domain": "app.posthog.com", "url": link} for link in links],
|
|
},
|
|
"type": "event_callback",
|
|
"authed_users": ["UXXXXXXX1", "UXXXXXXX2"],
|
|
"event_id": "Ev08MFMKH6",
|
|
"event_time": 123456789,
|
|
}
|
|
|
|
|
|
@patch("ee.tasks.slack.generate_assets")
|
|
@patch("ee.tasks.slack.SlackIntegration")
|
|
@freeze_time("2022-01-01T12:00:00.000Z")
|
|
class TestSlackSubscriptionsTasks(APIBaseTest):
|
|
subscription: Subscription
|
|
dashboard: Dashboard
|
|
insight: Insight
|
|
asset: ExportedAsset
|
|
integration: Integration
|
|
|
|
def setUp(self) -> None:
|
|
self.insight = Insight.objects.create(team=self.team, short_id="123456", name="My Test subscription")
|
|
self.sharingconfig = SharingConfiguration.objects.create(team=self.team, insight=self.insight, enabled=True)
|
|
self.integration = Integration.objects.create(team=self.team, kind="slack", config={"team": {"id": "T12345"}})
|
|
self.asset = ExportedAsset.objects.create(team=self.team, export_format="image/png", insight=self.insight)
|
|
|
|
def test_unfurl_event(self, MockSlackIntegration: MagicMock, mock_generate_assets: MagicMock) -> None:
|
|
mock_slack_integration = MagicMock()
|
|
MockSlackIntegration.return_value = mock_slack_integration
|
|
mock_generate_assets.return_value = ([self.insight], [self.asset])
|
|
mock_slack_integration.client.chat_unfurl.return_value = {"ok": "true"}
|
|
|
|
handle_slack_event(
|
|
create_mock_unfurl_event(
|
|
"T12345",
|
|
[
|
|
f"{settings.SITE_URL}/shared/{self.sharingconfig.access_token}",
|
|
f"{settings.SITE_URL}/shared/not-found",
|
|
],
|
|
)
|
|
)
|
|
|
|
assert mock_slack_integration.client.chat_unfurl.call_count == 1
|
|
post_message_calls = mock_slack_integration.client.chat_unfurl.call_args_list
|
|
first_call = post_message_calls[0].kwargs
|
|
|
|
valid_url = f"{settings.SITE_URL}/shared/{self.sharingconfig.access_token}"
|
|
|
|
assert first_call == {
|
|
"unfurls": {
|
|
valid_url: {
|
|
"blocks": [
|
|
{
|
|
"type": "section",
|
|
"text": {"type": "mrkdwn", "text": "My Test subscription"},
|
|
"accessory": {
|
|
"type": "image",
|
|
"image_url": first_call["unfurls"][valid_url]["blocks"][0]["accessory"]["image_url"],
|
|
"alt_text": "My Test subscription",
|
|
},
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"unfurl_id": "C123456.123456789.987501.1b90fa1278528ce6e2f6c5c2bfa1abc9a41d57d02b29d173f40399c9ffdecf4b",
|
|
"source": "conversations_history",
|
|
"channel": "",
|
|
"ts": "",
|
|
}
|