|
|
- from django.test import Client
- from hc.api.models import Check, Ping
- from hc.test import BaseTestCase
-
-
- class PingBySlugTestCase(BaseTestCase):
- def setUp(self):
- super().setUp()
- self.check = Check.objects.create(project=self.project, name="foo", slug="foo")
- self.url = f"/ping/{self.project.ping_key}/foo"
-
- def test_it_works(self):
- r = self.client.get(self.url)
- self.assertEqual(r.status_code, 200)
- self.assertEqual(r.headers["Access-Control-Allow-Origin"], "*")
-
- ping = Ping.objects.get()
- self.assertEqual(ping.kind, None)
-
- def test_post_works(self):
- csrf_client = Client(enforce_csrf_checks=True)
- r = csrf_client.post(self.url, "hello world", content_type="text/plain")
- self.assertEqual(r.status_code, 200)
-
- ping = Ping.objects.get()
- self.assertEqual(ping.method, "POST")
- self.assertEqual(ping.body, "hello world")
-
- def test_head_works(self):
- csrf_client = Client(enforce_csrf_checks=True)
- r = csrf_client.head(self.url)
- self.assertEqual(r.status_code, 200)
- self.assertEqual(Ping.objects.count(), 1)
-
- def test_it_handles_missing_check(self):
- r = self.client.get(f"/ping/{self.project.ping_key}/bar")
- self.assertEqual(r.status_code, 404)
- self.assertEqual(r.content.decode(), "not found")
-
- def test_it_never_caches(self):
- r = self.client.get(self.url)
- assert "no-cache" in r.get("Cache-Control")
-
- def test_fail_endpoint_works(self):
- r = self.client.get(self.url + "/fail")
- self.assertEqual(r.status_code, 200)
-
- ping = Ping.objects.get()
- self.assertEqual(ping.kind, "fail")
-
- def test_start_endpoint_works(self):
- r = self.client.get(self.url + "/start")
- self.assertEqual(r.status_code, 200)
-
- ping = Ping.objects.get()
- self.assertEqual(ping.kind, "start")
-
- def test_zero_exit_status_works(self):
- r = self.client.get(self.url + "/0")
- self.assertEqual(r.status_code, 200)
-
- ping = Ping.objects.get()
- self.assertEqual(ping.kind, None)
- self.assertEqual(ping.exitstatus, 0)
-
- def test_nonzero_exit_status_works(self):
- r = self.client.get(self.url + "/123")
- self.assertEqual(r.status_code, 200)
-
- ping = Ping.objects.get()
- self.assertEqual(ping.kind, "fail")
- self.assertEqual(ping.exitstatus, 123)
-
- def test_it_handles_duplicates(self):
- # Another check with the same slug:
- Check.objects.create(project=self.project, name="foo", slug="foo")
-
- r = self.client.get(self.url)
- self.assertEqual(r.status_code, 409)
-
- def test_it_handles_wrong_ping_key(self):
- r = self.client.get("/ping/rrrrrrrrrrrrrrrrrrrrrr/foo")
- self.assertEqual(r.status_code, 404)
|