test_plugin.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. from __future__ import absolute_import
  2. import responses
  3. from exam import fixture
  4. from django.core.urlresolvers import reverse
  5. from sentry.models import Rule
  6. from sentry.plugins.base import Notification
  7. from sentry.testutils import PluginTestCase
  8. from sentry.utils import json
  9. from six.moves.urllib.parse import parse_qs
  10. from sentry_plugins.pushover.plugin import PushoverPlugin
  11. SUCCESS = """{"status":1,"request":"e460545a8b333d0da2f3602aff3133d6"}"""
  12. class PushoverPluginTest(PluginTestCase):
  13. @fixture
  14. def plugin(self):
  15. return PushoverPlugin()
  16. def test_conf_key(self):
  17. assert self.plugin.conf_key == "pushover"
  18. def test_entry_point(self):
  19. self.assertPluginInstalled("pushover", self.plugin)
  20. def test_is_configured(self):
  21. assert self.plugin.is_configured(self.project) is False
  22. self.plugin.set_option("apikey", "abcdef", self.project)
  23. assert self.plugin.is_configured(self.project) is False
  24. self.plugin.set_option("userkey", "abcdef", self.project)
  25. assert self.plugin.is_configured(self.project) is True
  26. @responses.activate
  27. def test_simple_notification(self):
  28. responses.add("POST", "https://api.pushover.net/1/messages.json", body=SUCCESS)
  29. self.plugin.set_option("userkey", "abcdef", self.project)
  30. self.plugin.set_option("apikey", "ghijkl", self.project)
  31. event = self.store_event(
  32. data={"message": "Hello world", "level": "warning"}, project_id=self.project.id
  33. )
  34. group = event.group
  35. rule = Rule.objects.create(project=self.project, label="my rule")
  36. notification = Notification(event=event, rule=rule)
  37. with self.options({"system.url-prefix": "http://example.com"}):
  38. self.plugin.notify(notification)
  39. request = responses.calls[0].request
  40. payload = parse_qs(request.body)
  41. assert payload == {
  42. "message": ["{}\n\nTags: level=warning".format(event.title)],
  43. "title": ["Bar: Hello world"],
  44. "url": [
  45. "http://example.com/organizations/baz/issues/{}/?referrer=pushover_plugin".format(
  46. group.id
  47. )
  48. ],
  49. "url_title": ["Issue Details"],
  50. "priority": ["0"],
  51. "user": ["abcdef"],
  52. "token": ["ghijkl"],
  53. "expire": ["90"],
  54. "retry": ["30"],
  55. }
  56. @responses.activate
  57. def test_emergency_notification(self):
  58. responses.add("POST", "https://api.pushover.net/1/messages.json", body=SUCCESS)
  59. self.plugin.set_option("userkey", "abcdef", self.project)
  60. self.plugin.set_option("apikey", "ghijkl", self.project)
  61. self.plugin.set_option("priority", "2", self.project)
  62. self.plugin.set_option("expire", 90, self.project)
  63. self.plugin.set_option("retry", 30, self.project)
  64. event = self.store_event(
  65. data={"message": "Hello world", "level": "warning"}, project_id=self.project.id
  66. )
  67. group = event.group
  68. rule = Rule.objects.create(project=self.project, label="my rule")
  69. notification = Notification(event=event, rule=rule)
  70. with self.options({"system.url-prefix": "http://example.com"}):
  71. self.plugin.notify(notification)
  72. request = responses.calls[0].request
  73. payload = parse_qs(request.body)
  74. assert payload == {
  75. "message": ["{}\n\nTags: level=warning".format(event.title)],
  76. "title": ["Bar: Hello world"],
  77. "url": [
  78. "http://example.com/organizations/baz/issues/{}/?referrer=pushover_plugin".format(
  79. group.id
  80. )
  81. ],
  82. "url_title": ["Issue Details"],
  83. "priority": ["2"],
  84. "user": ["abcdef"],
  85. "token": ["ghijkl"],
  86. "expire": ["90"],
  87. "retry": ["30"],
  88. }
  89. def test_no_secrets(self):
  90. self.user = self.create_user("foo@example.com")
  91. self.org = self.create_organization(owner=self.user, name="Rowdy Tiger")
  92. self.team = self.create_team(organization=self.org, name="Mariachi Band")
  93. self.project = self.create_project(organization=self.org, teams=[self.team], name="Bengal")
  94. self.login_as(self.user)
  95. self.plugin.set_option("userkey", "abcdef", self.project)
  96. self.plugin.set_option("apikey", "abcdef", self.project)
  97. url = reverse(
  98. "sentry-api-0-project-plugin-details",
  99. args=[self.org.slug, self.project.slug, "pushover"],
  100. )
  101. res = self.client.get(url)
  102. config = json.loads(res.content)["config"]
  103. userkey_config = [item for item in config if item["name"] == "userkey"][0]
  104. apikey_config = [item for item in config if item["name"] == "apikey"][0]
  105. assert userkey_config.get("type") == "secret"
  106. assert userkey_config.get("value") is None
  107. assert userkey_config.get("hasSavedValue") is True
  108. assert userkey_config.get("prefix") == "abcd"
  109. assert apikey_config.get("type") == "secret"
  110. assert apikey_config.get("value") is None
  111. assert apikey_config.get("hasSavedValue") is True
  112. assert apikey_config.get("prefix") == "abcd"