forked from GithubBackups/healthchecks
Merge pull request #199 from muff1nman/add-specific-channel
Allow specific channel uuid to be specified in create/update check api
This commit is contained in:
commit
def1a12a4a
@ -1,3 +1,5 @@
|
|||||||
|
import uuid
|
||||||
|
|
||||||
from hc.api.models import Channel, Check
|
from hc.api.models import Channel, Check
|
||||||
from hc.test import BaseTestCase
|
from hc.test import BaseTestCase
|
||||||
|
|
||||||
@ -88,3 +90,46 @@ class UpdateCheckTestCase(BaseTestCase):
|
|||||||
|
|
||||||
self.check.refresh_from_db()
|
self.check.refresh_from_db()
|
||||||
self.assertEqual(self.check.kind, "simple")
|
self.assertEqual(self.check.kind, "simple")
|
||||||
|
|
||||||
|
def test_it_updates_specific_channels(self):
|
||||||
|
channel1 = Channel(user=self.alice)
|
||||||
|
channel1.save()
|
||||||
|
channel2 = Channel(user=self.alice)
|
||||||
|
channel2.save()
|
||||||
|
|
||||||
|
r = self.post(self.check.code, {
|
||||||
|
"api_key": "X" * 32,
|
||||||
|
"channels": str(channel1.code)
|
||||||
|
})
|
||||||
|
self.assertEqual(r.status_code, 200)
|
||||||
|
check = Check.objects.get()
|
||||||
|
self.assertEqual(check.channel_set.count(), 1)
|
||||||
|
self.assertEqual(check.channel_set.first().code, channel1.code)
|
||||||
|
|
||||||
|
# Change to the other channel
|
||||||
|
r = self.post(self.check.code, {
|
||||||
|
"api_key": "X" * 32,
|
||||||
|
"channels": str(channel2.code)
|
||||||
|
})
|
||||||
|
self.assertEqual(r.status_code, 200)
|
||||||
|
check = Check.objects.get()
|
||||||
|
self.assertEqual(check.channel_set.count(), 1)
|
||||||
|
self.assertEqual(check.channel_set.first().code, channel2.code)
|
||||||
|
|
||||||
|
# Now set both channels
|
||||||
|
r = self.post(self.check.code, {
|
||||||
|
"api_key": "X" * 32,
|
||||||
|
"channels": str(channel2.code) + "," + str(channel1.code)
|
||||||
|
})
|
||||||
|
self.assertEqual(r.status_code, 200)
|
||||||
|
check = Check.objects.get()
|
||||||
|
self.assertEqual(check.channel_set.count(), 2)
|
||||||
|
|
||||||
|
# Try to use channel that does not exist
|
||||||
|
r = self.post(self.check.code, {
|
||||||
|
"api_key": "X" * 32,
|
||||||
|
"channels": str(uuid.uuid4())
|
||||||
|
})
|
||||||
|
self.assertEqual(r.status_code, 400)
|
||||||
|
check = Check.objects.get()
|
||||||
|
self.assertEqual(check.channel_set.count(), 0)
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from datetime import timedelta as td
|
from datetime import timedelta as td
|
||||||
|
from uuid import UUID
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.exceptions import SuspiciousOperation
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from django.http import (HttpResponse, HttpResponseForbidden,
|
from django.http import (HttpResponse, HttpResponseForbidden,
|
||||||
HttpResponseNotFound, JsonResponse)
|
HttpResponseNotFound, JsonResponse)
|
||||||
@ -12,7 +14,7 @@ from django.views.decorators.http import require_POST
|
|||||||
|
|
||||||
from hc.api import schemas
|
from hc.api import schemas
|
||||||
from hc.api.decorators import authorize, authorize_read, validate_json
|
from hc.api.decorators import authorize, authorize_read, validate_json
|
||||||
from hc.api.models import Check, Notification
|
from hc.api.models import Check, Notification, Channel
|
||||||
from hc.lib.badges import check_signature, get_badge_svg
|
from hc.lib.badges import check_signature, get_badge_svg
|
||||||
|
|
||||||
|
|
||||||
@ -81,8 +83,17 @@ def _update(check, spec):
|
|||||||
if "channels" in spec:
|
if "channels" in spec:
|
||||||
if spec["channels"] == "*":
|
if spec["channels"] == "*":
|
||||||
check.assign_all_channels()
|
check.assign_all_channels()
|
||||||
elif spec["channels"] == "":
|
else:
|
||||||
check.channel_set.clear()
|
check.channel_set.clear()
|
||||||
|
if spec["channels"] is not None and spec["channels"] != "":
|
||||||
|
channels = []
|
||||||
|
for raw_channel in spec["channels"].split(","):
|
||||||
|
try:
|
||||||
|
channel = Channel.objects.get(code=UUID(raw_channel))
|
||||||
|
channels.append(channel)
|
||||||
|
except Channel.objects.model.DoesNotExist:
|
||||||
|
raise SuspiciousOperation("One of the specified channels is missing")
|
||||||
|
check.channel_set.add(*channels)
|
||||||
|
|
||||||
return check
|
return check
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user