mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
131 lines
5.1 KiB
Python
131 lines
5.1 KiB
Python
from functools import cached_property
|
|
from urllib.parse import parse_qs
|
|
|
|
import responses
|
|
from django.urls import reverse
|
|
|
|
from sentry.models.rule import Rule
|
|
from sentry.plugins.base import Notification
|
|
from sentry.testutils.cases import PluginTestCase
|
|
from sentry.utils import json
|
|
from sentry_plugins.pushover.plugin import PushoverPlugin
|
|
|
|
SUCCESS = """{"status":1,"request":"e460545a8b333d0da2f3602aff3133d6"}"""
|
|
|
|
|
|
class PushoverPluginTest(PluginTestCase):
|
|
@cached_property
|
|
def plugin(self):
|
|
return PushoverPlugin()
|
|
|
|
def test_conf_key(self):
|
|
assert self.plugin.conf_key == "pushover"
|
|
|
|
def test_entry_point(self):
|
|
self.assertPluginInstalled("pushover", self.plugin)
|
|
|
|
def test_is_configured(self):
|
|
assert self.plugin.is_configured(self.project) is False
|
|
self.plugin.set_option("apikey", "abcdef", self.project)
|
|
assert self.plugin.is_configured(self.project) is False
|
|
self.plugin.set_option("userkey", "abcdef", self.project)
|
|
assert self.plugin.is_configured(self.project) is True
|
|
|
|
@responses.activate
|
|
def test_simple_notification(self):
|
|
responses.add("POST", "https://api.pushover.net/1/messages.json", body=SUCCESS)
|
|
self.plugin.set_option("userkey", "abcdef", self.project)
|
|
self.plugin.set_option("apikey", "ghijkl", self.project)
|
|
|
|
event = self.store_event(
|
|
data={"message": "Hello world", "level": "warning"}, project_id=self.project.id
|
|
)
|
|
assert event.group is not None
|
|
group = event.group
|
|
|
|
rule = Rule.objects.create(project=self.project, label="my rule")
|
|
|
|
notification = Notification(event=event, rule=rule)
|
|
|
|
with self.options({"system.url-prefix": "http://example.com"}):
|
|
self.plugin.notify(notification)
|
|
|
|
request = responses.calls[0].request
|
|
payload = parse_qs(request.body)
|
|
assert payload == {
|
|
"message": [f"{event.title}\n\nTags: level=warning"],
|
|
"title": ["Bar: Hello world"],
|
|
"url": [
|
|
f"http://example.com/organizations/baz/issues/{group.id}/?referrer=pushover_plugin"
|
|
],
|
|
"url_title": ["Issue Details"],
|
|
"priority": ["0"],
|
|
"user": ["abcdef"],
|
|
"token": ["ghijkl"],
|
|
"expire": ["90"],
|
|
"retry": ["30"],
|
|
}
|
|
|
|
@responses.activate
|
|
def test_emergency_notification(self):
|
|
responses.add("POST", "https://api.pushover.net/1/messages.json", body=SUCCESS)
|
|
self.plugin.set_option("userkey", "abcdef", self.project)
|
|
self.plugin.set_option("apikey", "ghijkl", self.project)
|
|
self.plugin.set_option("priority", "2", self.project)
|
|
self.plugin.set_option("expire", 90, self.project)
|
|
self.plugin.set_option("retry", 30, self.project)
|
|
|
|
event = self.store_event(
|
|
data={"message": "Hello world", "level": "warning"}, project_id=self.project.id
|
|
)
|
|
assert event.group is not None
|
|
group = event.group
|
|
|
|
rule = Rule.objects.create(project=self.project, label="my rule")
|
|
|
|
notification = Notification(event=event, rule=rule)
|
|
|
|
with self.options({"system.url-prefix": "http://example.com"}):
|
|
self.plugin.notify(notification)
|
|
|
|
request = responses.calls[0].request
|
|
payload = parse_qs(request.body)
|
|
assert payload == {
|
|
"message": [f"{event.title}\n\nTags: level=warning"],
|
|
"title": ["Bar: Hello world"],
|
|
"url": [
|
|
f"http://example.com/organizations/baz/issues/{group.id}/?referrer=pushover_plugin"
|
|
],
|
|
"url_title": ["Issue Details"],
|
|
"priority": ["2"],
|
|
"user": ["abcdef"],
|
|
"token": ["ghijkl"],
|
|
"expire": ["90"],
|
|
"retry": ["30"],
|
|
}
|
|
|
|
def test_no_secrets(self):
|
|
self.user = self.create_user("[email protected]")
|
|
self.org = self.create_organization(owner=self.user, name="Rowdy Tiger")
|
|
self.team = self.create_team(organization=self.org, name="Mariachi Band")
|
|
self.project = self.create_project(organization=self.org, teams=[self.team], name="Bengal")
|
|
self.login_as(self.user)
|
|
self.plugin.set_option("userkey", "abcdef", self.project)
|
|
self.plugin.set_option("apikey", "abcdef", self.project)
|
|
url = reverse(
|
|
"sentry-api-0-project-plugin-details",
|
|
args=[self.org.slug, self.project.slug, "pushover"],
|
|
)
|
|
res = self.client.get(url)
|
|
config = json.loads(res.content)["config"]
|
|
userkey_config = [item for item in config if item["name"] == "userkey"][0]
|
|
apikey_config = [item for item in config if item["name"] == "apikey"][0]
|
|
assert userkey_config.get("type") == "secret"
|
|
assert userkey_config.get("value") is None
|
|
assert userkey_config.get("hasSavedValue") is True
|
|
assert userkey_config.get("prefix") == "abcd"
|
|
assert apikey_config.get("type") == "secret"
|
|
assert apikey_config.get("value") is None
|
|
assert apikey_config.get("hasSavedValue") is True
|
|
assert apikey_config.get("prefix") == "abcd"
|