forked from GithubBackups/healthchecks
Split "Add Pagerduty Connect" in three views for clarity.
This commit is contained in:
parent
157711bc95
commit
b5b5c58d77
@ -9,11 +9,6 @@ class AddPdConnectTestCase(BaseTestCase):
|
|||||||
super(AddPdConnectTestCase, self).setUp()
|
super(AddPdConnectTestCase, self).setUp()
|
||||||
self.url = "/projects/%s/add_pdc/" % self.project.code
|
self.url = "/projects/%s/add_pdc/" % self.project.code
|
||||||
|
|
||||||
def test_instructions_work(self):
|
|
||||||
self.client.login(username="alice@example.org", password="password")
|
|
||||||
r = self.client.get(self.url)
|
|
||||||
self.assertContains(r, "If your team uses")
|
|
||||||
|
|
||||||
def test_it_works(self):
|
def test_it_works(self):
|
||||||
session = self.client.session
|
session = self.client.session
|
||||||
session["pd"] = "1234567890AB" # 12 characters
|
session["pd"] = "1234567890AB" # 12 characters
|
||||||
@ -29,17 +24,9 @@ class AddPdConnectTestCase(BaseTestCase):
|
|||||||
self.assertEqual(c.pd_service_key, "123")
|
self.assertEqual(c.pd_service_key, "123")
|
||||||
self.assertEqual(c.project, self.project)
|
self.assertEqual(c.project, self.project)
|
||||||
|
|
||||||
def test_it_validates_code(self):
|
|
||||||
session = self.client.session
|
|
||||||
session["pd"] = "1234567890AB"
|
|
||||||
session.save()
|
|
||||||
|
|
||||||
self.client.login(username="alice@example.org", password="password")
|
|
||||||
url = self.url + "XXXXXXXXXXXX/?service_key=123"
|
|
||||||
r = self.client.get(url)
|
|
||||||
self.assertEqual(r.status_code, 400)
|
|
||||||
|
|
||||||
@override_settings(PD_VENDOR_KEY=None)
|
@override_settings(PD_VENDOR_KEY=None)
|
||||||
def test_it_requires_vendor_key(self):
|
def test_it_requires_vendor_key(self):
|
||||||
|
self.client.login(username="alice@example.org", password="password")
|
||||||
|
|
||||||
r = self.client.get(self.url)
|
r = self.client.get(self.url)
|
||||||
self.assertEqual(r.status_code, 404)
|
self.assertEqual(r.status_code, 404)
|
||||||
|
26
hc/front/tests/test_add_pdc_complete.py
Normal file
26
hc/front/tests/test_add_pdc_complete.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
from django.test.utils import override_settings
|
||||||
|
from hc.test import BaseTestCase
|
||||||
|
|
||||||
|
|
||||||
|
@override_settings(PD_VENDOR_KEY="foo")
|
||||||
|
class AddPdcCompleteTestCase(BaseTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
super(AddPdcCompleteTestCase, self).setUp()
|
||||||
|
self.url = "/projects/%s/add_pdc/" % self.project.code
|
||||||
|
self.url += "XXXXXXXXXXXX/?service_key=123"
|
||||||
|
|
||||||
|
def test_it_validates_code(self):
|
||||||
|
session = self.client.session
|
||||||
|
session["pd"] = "1234567890AB"
|
||||||
|
session.save()
|
||||||
|
|
||||||
|
self.client.login(username="alice@example.org", password="password")
|
||||||
|
r = self.client.get(self.url)
|
||||||
|
self.assertEqual(r.status_code, 400)
|
||||||
|
|
||||||
|
@override_settings(PD_VENDOR_KEY=None)
|
||||||
|
def test_it_requires_vendor_key(self):
|
||||||
|
self.client.login(username="alice@example.org", password="password")
|
||||||
|
|
||||||
|
r = self.client.get(self.url)
|
||||||
|
self.assertEqual(r.status_code, 404)
|
21
hc/front/tests/test_add_pdc_help.py
Normal file
21
hc/front/tests/test_add_pdc_help.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from django.test.utils import override_settings
|
||||||
|
from hc.test import BaseTestCase
|
||||||
|
|
||||||
|
|
||||||
|
@override_settings(PD_VENDOR_KEY="foo")
|
||||||
|
class AddPdcHelpTestCase(BaseTestCase):
|
||||||
|
url = "/integrations/add_pdc/"
|
||||||
|
|
||||||
|
def test_instructions_work_when_not_logged_in(self):
|
||||||
|
r = self.client.get(self.url)
|
||||||
|
self.assertContains(r, "Before adding PagerDuty integration, please log")
|
||||||
|
|
||||||
|
def test_instructions_work(self):
|
||||||
|
self.client.login(username="alice@example.org", password="password")
|
||||||
|
r = self.client.get(self.url)
|
||||||
|
self.assertContains(r, "If your team uses")
|
||||||
|
|
||||||
|
@override_settings(PD_VENDOR_KEY=None)
|
||||||
|
def test_it_requires_vendor_key(self):
|
||||||
|
r = self.client.get(self.url)
|
||||||
|
self.assertEqual(r.status_code, 404)
|
@ -31,6 +31,7 @@ channel_urls = [
|
|||||||
path("add_discord/", views.add_discord_complete, name="hc-add-discord-complete"),
|
path("add_discord/", views.add_discord_complete, name="hc-add-discord-complete"),
|
||||||
path("add_pushover/", views.add_pushover_help),
|
path("add_pushover/", views.add_pushover_help),
|
||||||
path("telegram/bot/", views.telegram_bot, name="hc-telegram-webhook"),
|
path("telegram/bot/", views.telegram_bot, name="hc-telegram-webhook"),
|
||||||
|
path("add_pdc/", views.add_pdc_help),
|
||||||
path("add_slack/", views.add_slack_help),
|
path("add_slack/", views.add_slack_help),
|
||||||
path("add_slack_btn/", views.add_slack_complete),
|
path("add_slack_btn/", views.add_slack_complete),
|
||||||
path("add_telegram/", views.add_telegram, name="hc-add-telegram"),
|
path("add_telegram/", views.add_telegram, name="hc-add-telegram"),
|
||||||
@ -61,7 +62,7 @@ project_urls = [
|
|||||||
path("add_pagertree/", views.add_pagertree, name="hc-add-pagertree"),
|
path("add_pagertree/", views.add_pagertree, name="hc-add-pagertree"),
|
||||||
path("add_pd/", views.add_pd, name="hc-add-pd"),
|
path("add_pd/", views.add_pd, name="hc-add-pd"),
|
||||||
path("add_pdc/", views.add_pdc, name="hc-add-pdc"),
|
path("add_pdc/", views.add_pdc, name="hc-add-pdc"),
|
||||||
path("add_pdc/<str:state>/", views.add_pdc, name="hc-add-pdc-state"),
|
path("add_pdc/<str:state>/", views.add_pdc_complete, name="hc-add-pdc-complete"),
|
||||||
path("add_prometheus/", views.add_prometheus, name="hc-add-prometheus"),
|
path("add_prometheus/", views.add_prometheus, name="hc-add-prometheus"),
|
||||||
path("add_pushbullet/", views.add_pushbullet, name="hc-add-pushbullet"),
|
path("add_pushbullet/", views.add_pushbullet, name="hc-add-pushbullet"),
|
||||||
path("add_pushover/", views.add_pushover, name="hc-add-pushover"),
|
path("add_pushover/", views.add_pushover, name="hc-add-pushover"),
|
||||||
|
@ -925,16 +925,44 @@ def add_pd(request, code):
|
|||||||
return render(request, "integrations/add_pd.html", ctx)
|
return render(request, "integrations/add_pd.html", ctx)
|
||||||
|
|
||||||
|
|
||||||
def add_pdc(request, code, state=None):
|
def add_pdc_help(request):
|
||||||
|
if settings.PD_VENDOR_KEY is None:
|
||||||
|
raise Http404("pagerduty integration is not available")
|
||||||
|
|
||||||
|
ctx = {"page": "channels"}
|
||||||
|
return render(request, "integrations/add_pdc.html", ctx)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def add_pdc(request, code):
|
||||||
if settings.PD_VENDOR_KEY is None:
|
if settings.PD_VENDOR_KEY is None:
|
||||||
raise Http404("pagerduty integration is not available")
|
raise Http404("pagerduty integration is not available")
|
||||||
|
|
||||||
project = _get_project_for_user(request, code)
|
project = _get_project_for_user(request, code)
|
||||||
|
|
||||||
if state and request.user.is_authenticated:
|
state = token_urlsafe()
|
||||||
|
callback = settings.SITE_ROOT + reverse(
|
||||||
|
"hc-add-pdc-complete", args=[project.code, state]
|
||||||
|
)
|
||||||
|
connect_url = "https://connect.pagerduty.com/connect?" + urlencode(
|
||||||
|
{"vendor": settings.PD_VENDOR_KEY, "callback": callback}
|
||||||
|
)
|
||||||
|
|
||||||
|
ctx = {"page": "channels", "project": project, "connect_url": connect_url}
|
||||||
|
request.session["pd"] = state
|
||||||
|
return render(request, "integrations/add_pdc.html", ctx)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def add_pdc_complete(request, code, state):
|
||||||
|
if settings.PD_VENDOR_KEY is None:
|
||||||
|
raise Http404("pagerduty integration is not available")
|
||||||
|
|
||||||
if "pd" not in request.session:
|
if "pd" not in request.session:
|
||||||
return HttpResponseBadRequest()
|
return HttpResponseBadRequest()
|
||||||
|
|
||||||
|
project = _get_project_for_user(request, code)
|
||||||
|
|
||||||
session_state = request.session.pop("pd")
|
session_state = request.session.pop("pd")
|
||||||
if session_state != state:
|
if session_state != state:
|
||||||
return HttpResponseBadRequest()
|
return HttpResponseBadRequest()
|
||||||
@ -955,18 +983,6 @@ def add_pdc(request, code, state=None):
|
|||||||
messages.success(request, "The PagerDuty integration has been added!")
|
messages.success(request, "The PagerDuty integration has been added!")
|
||||||
return redirect("hc-p-channels", project.code)
|
return redirect("hc-p-channels", project.code)
|
||||||
|
|
||||||
state = token_urlsafe()
|
|
||||||
callback = settings.SITE_ROOT + reverse(
|
|
||||||
"hc-add-pdc-state", args=[project.code, state]
|
|
||||||
)
|
|
||||||
connect_url = "https://connect.pagerduty.com/connect?" + urlencode(
|
|
||||||
{"vendor": settings.PD_VENDOR_KEY, "callback": callback}
|
|
||||||
)
|
|
||||||
|
|
||||||
ctx = {"page": "channels", "project": project, "connect_url": connect_url}
|
|
||||||
request.session["pd"] = state
|
|
||||||
return render(request, "integrations/add_pdc.html", ctx)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def add_pagertree(request, code):
|
def add_pagertree(request, code):
|
||||||
|
@ -35,26 +35,8 @@
|
|||||||
{% site_name %}:</p>
|
{% site_name %}:</p>
|
||||||
|
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<form class="form-inline" action="{% url 'hc-login' %}" method="post">
|
<a href="{% url 'hc-login' %}"
|
||||||
{% csrf_token %}
|
class="btn btn-primary btn-lg">Sign In</a>
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="input-group input-group-lg">
|
|
||||||
<div class="input-group-addon">@</div>
|
|
||||||
<input
|
|
||||||
type="email"
|
|
||||||
class="form-control"
|
|
||||||
name="email"
|
|
||||||
autocomplete="email"
|
|
||||||
placeholder="Email">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<button type="submit" class="btn btn-lg btn-primary pull-right">
|
|
||||||
Log In
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user