Пример #1
0
 def test_build_group_attachment_color_warning(self):
     warning_event = self.store_event(data={"level": "warning"},
                                      project_id=self.project.id)
     assert build_group_attachment(
         warning_event.group)["color"] == "#FFC227"
     assert build_group_attachment(warning_event.group,
                                   warning_event)["color"] == "#FFC227"
Пример #2
0
    def test_valid_token(self):
        responses.add(responses.POST,
                      "https://slack.com/api/chat.unfurl",
                      json={"ok": True})
        org2 = self.create_organization(name="biz")
        project1 = self.create_project(organization=self.org)
        project2 = self.create_project(organization=org2)
        min_ago = iso_format(before_now(minutes=1))
        group1 = self.create_group(project=project1)
        group2 = self.create_group(project=project2)
        event = self.store_event(data={
            "fingerprint": ["group3"],
            "timestamp": min_ago
        },
                                 project_id=project1.id)
        group3 = event.group
        alert_rule = self.create_alert_rule()
        incident = self.create_incident(status=2,
                                        organization=self.org,
                                        projects=[project1],
                                        alert_rule=alert_rule)
        incident.update(identifier=123)
        resp = self.post_webhook(event_data=json.loads(
            LINK_SHARED_EVENT % {
                "group1": group1.id,
                "group2": group2.id,
                "group3": group3.id,
                "incident": incident.identifier,
                "org1": self.org.slug,
                "org2": org2.slug,
                "event": event.event_id,
            }))
        assert resp.status_code == 200, resp.content
        data = dict(parse_qsl(responses.calls[0].request.body))
        unfurls = json.loads(data["unfurls"])
        issue_url = "http://testserver/organizations/%s/issues/%s/bar/" % (
            self.org.slug, group1.id)
        incident_url = "http://testserver/organizations/%s/incidents/%s/" % (
            self.org.slug,
            incident.identifier,
        )
        event_url = "http://testserver/organizations/%s/issues/%s/events/%s/" % (
            self.org.slug,
            group3.id,
            event.event_id,
        )

        assert unfurls == {
            issue_url:
            build_group_attachment(group1),
            incident_url:
            build_incident_attachment(incident),
            event_url:
            build_group_attachment(group3, event=event, link_to_event=True),
        }
        assert data["token"] == "xoxp-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxx"
Пример #3
0
def unfurl_issues(request, integration,
                  links: List[UnfurlableUrl]) -> UnfurledUrl:
    """
    Returns a map of the attachments used in the response we send to Slack
    for a particular issue by the URL of the yet-unfurled links a user included
    in their Slack message.
    """
    group_by_id = {
        g.id: g
        for g in Group.objects.filter(
            id__in={link.args["issue_id"]
                    for link in links},
            project__in=Project.objects.filter(
                organization__in=integration.organizations.all()),
        )
    }
    if not group_by_id:
        return {}

    out = {}
    for link in links:
        issue_id = link.args["issue_id"]

        if issue_id in group_by_id:
            group = group_by_id[issue_id]
            # lookup the event by the id
            event_id = link.args["event_id"]
            event = eventstore.get_event_by_id(group.project_id,
                                               event_id) if event_id else None
            out[link.url] = build_group_attachment(group_by_id[issue_id],
                                                   event=event,
                                                   link_to_event=True)
    return out
Пример #4
0
 def test_valid_token(self):
     responses.add(responses.POST, 'https://slack.com/api/chat.unfurl',
                   json={'ok': True})
     org2 = self.create_organization(name='biz')
     project1 = self.create_project(organization=self.org)
     project2 = self.create_project(organization=org2)
     group1 = self.create_group(project=project1)
     group2 = self.create_group(project=project2)
     incident = self.create_incident(organization=self.org, projects=[project1])
     incident.update(identifier=123)
     resp = self.post_webhook(event_data=json.loads(LINK_SHARED_EVENT % {
         'group1': group1.id,
         'group2': group2.id,
         'incident': incident.identifier,
         'org1': self.org.slug,
         'org2': org2.slug,
     }))
     assert resp.status_code == 200, resp.content
     data = dict(parse_qsl(responses.calls[0].request.body))
     unfurls = json.loads(data['unfurls'])
     issue_url = 'http://testserver/organizations/%s/issues/%s/bar/' % (
         self.org.slug,
         group1.id,
     )
     incident_url = 'http://testserver/organizations/%s/incidents/%s/' % (
         self.org.slug,
         incident.identifier,
     )
     assert unfurls == {
         issue_url: build_group_attachment(group1),
         incident_url: build_incident_attachment(incident),
     }
Пример #5
0
 def test_build_group_attachment_color_unxpected_level_error_fallback(self):
     unexpected_level_event = self.store_event(data={"level": "trace"},
                                               project_id=self.project.id,
                                               assert_no_errors=False)
     assert build_group_attachment(
         unexpected_level_event.group)["color"] == "#E03E2F"
Пример #6
0
 def test_build_group_attachment_color_no_event_error_fallback(self):
     group_with_no_events = self.create_group(project=self.project)
     assert build_group_attachment(
         group_with_no_events)["color"] == "#E03E2F"
Пример #7
0
    def test_build_group_attachment(self):
        self.user = self.create_user("*****@*****.**")
        self.org = self.create_organization(name="Rowdy Tiger", owner=None)
        self.team = self.create_team(organization=self.org,
                                     name="Mariachi Band")
        self.project = self.create_project(
            organization=self.org,
            teams=[self.team],
            name="Bengal-Elephant-Giraffe-Tree-House")
        self.create_member(user=self.user,
                           organization=self.org,
                           role="owner",
                           teams=[self.team])
        group = self.create_group(project=self.project)
        ts = group.last_seen
        assert build_group_attachment(group) == {
            "color":
            "#E03E2F",
            "text":
            "",
            "actions": [
                {
                    "name": "status",
                    "text": "Resolve",
                    "type": "button",
                    "value": "resolved"
                },
                {
                    "text": "Ignore",
                    "type": "button",
                    "name": "status",
                    "value": "ignored"
                },
                {
                    "option_groups": [
                        {
                            "text":
                            "Teams",
                            "options": [{
                                "text":
                                u"#mariachi-band",
                                "value":
                                u"team:" + six.text_type(self.team.id),
                            }],
                        },
                        {
                            "text":
                            "People",
                            "options": [{
                                "text":
                                u"*****@*****.**",
                                "value":
                                u"user:"******"text":
                    "Select Assignee...",
                    "selected_options": [None],
                    "type":
                    "select",
                    "name":
                    "assign",
                },
            ],
            "mrkdwn_in": ["text"],
            "title":
            group.title,
            "fields": [],
            "footer":
            u"BENGAL-ELEPHANT-GIRAFFE-TREE-HOUSE-1",
            "ts":
            to_timestamp(ts),
            "title_link":
            u"http://testserver/organizations/rowdy-tiger/issues/" +
            six.text_type(group.id) + "/?referrer=slack",
            "callback_id":
            '{"issue":' + six.text_type(group.id) + "}",
            "fallback":
            u"[{}] {}".format(self.project.slug, group.title),
            "footer_icon":
            u"http://testserver/_static/{version}/sentry/images/sentry-email-avatar.png",
        }
        event = self.store_event(data={}, project_id=self.project.id)
        ts = event.datetime
        assert build_group_attachment(group, event) == {
            "color":
            "#E03E2F",
            "text":
            "",
            "actions": [
                {
                    "name": "status",
                    "text": "Resolve",
                    "type": "button",
                    "value": "resolved"
                },
                {
                    "text": "Ignore",
                    "type": "button",
                    "name": "status",
                    "value": "ignored"
                },
                {
                    "option_groups": [
                        {
                            "text":
                            "Teams",
                            "options": [{
                                "text":
                                u"#mariachi-band",
                                "value":
                                u"team:" + six.text_type(self.team.id),
                            }],
                        },
                        {
                            "text":
                            "People",
                            "options": [{
                                "text":
                                u"*****@*****.**",
                                "value":
                                u"user:"******"text":
                    "Select Assignee...",
                    "selected_options": [None],
                    "type":
                    "select",
                    "name":
                    "assign",
                },
            ],
            "mrkdwn_in": ["text"],
            "title":
            event.title,
            "fields": [],
            "footer":
            u"BENGAL-ELEPHANT-GIRAFFE-TREE-HOUSE-1",
            "ts":
            to_timestamp(ts),
            "title_link":
            u"http://testserver/organizations/rowdy-tiger/issues/" +
            six.text_type(group.id) + "/?referrer=slack",
            "callback_id":
            '{"issue":' + six.text_type(group.id) + "}",
            "fallback":
            u"[{}] {}".format(self.project.slug, event.title),
            "footer_icon":
            u"http://testserver/_static/{version}/sentry/images/sentry-email-avatar.png",
        }

        assert build_group_attachment(group, event, link_to_event=True) == {
            "color":
            "#E03E2F",
            "text":
            "",
            "actions": [
                {
                    "name": "status",
                    "text": "Resolve",
                    "type": "button",
                    "value": "resolved"
                },
                {
                    "text": "Ignore",
                    "type": "button",
                    "name": "status",
                    "value": "ignored"
                },
                {
                    "option_groups": [
                        {
                            "text":
                            "Teams",
                            "options": [{
                                "text":
                                u"#mariachi-band",
                                "value":
                                u"team:" + six.text_type(self.team.id),
                            }],
                        },
                        {
                            "text":
                            "People",
                            "options": [{
                                "text":
                                u"*****@*****.**",
                                "value":
                                u"user:"******"text":
                    "Select Assignee...",
                    "selected_options": [None],
                    "type":
                    "select",
                    "name":
                    "assign",
                },
            ],
            "mrkdwn_in": ["text"],
            "title":
            event.title,
            "fields": [],
            "footer":
            u"BENGAL-ELEPHANT-GIRAFFE-TREE-HOUSE-1",
            "ts":
            to_timestamp(ts),
            "title_link":
            u"http://testserver/organizations/rowdy-tiger/issues/{}/events/{}/"
            .format(group.id, event.event_id) + "?referrer=slack",
            "callback_id":
            '{"issue":' + six.text_type(group.id) + "}",
            "fallback":
            u"[{}] {}".format(self.project.slug, event.title),
            "footer_icon":
            u"http://testserver/_static/{version}/sentry/images/sentry-email-avatar.png",
        }