healthchecks/hc/front/tests/test_my_checks.py
Pēteris Caune 67560c96e1
Change icon CSS class prefix to work around Fanboy's filter list
Problem: if you use uBlock Origin, and enable the
"Fanboy's Social" filter list, Healthchecks does not show
Telegram or WhatsApp icons. This is because the filter list
contains "##.icon-telegram" and "##.icon-whatsapp" entries.

This commit changes the CSS class prefix to "ic-". So we're
now using icon classes like "ic-telegram" and "ic-whatsapp".

As a bonus, we save 2 bytes in HTML per displayed icon :-)
2021-02-03 10:44:35 +02:00

142 lines
5.2 KiB
Python

from hc.api.models import Check
from hc.test import BaseTestCase
from datetime import timedelta as td
from django.utils import timezone
class MyChecksTestCase(BaseTestCase):
def setUp(self):
super().setUp()
self.check = Check(project=self.project, name="Alice Was Here")
self.check.save()
self.url = "/projects/%s/checks/" % self.project.code
def test_it_works(self):
for email in ("alice@example.org", "bob@example.org"):
self.client.login(username=email, password="password")
r = self.client.get(self.url)
self.assertContains(r, "Alice Was Here", status_code=200)
# The pause button:
self.assertContains(r, "btn btn-default pause", status_code=200)
# last_active_date should have been set
self.profile.refresh_from_db()
self.assertTrue(self.profile.last_active_date)
def test_it_bumps_last_active_date(self):
self.profile.last_active_date = timezone.now() - td(days=10)
self.profile.save()
self.client.login(username="alice@example.org", password="password")
self.client.get(self.url)
# last_active_date should have been bumped
self.profile.refresh_from_db()
delta = timezone.now() - self.profile.last_active_date
self.assertTrue(delta.total_seconds() < 1)
def test_it_updates_session(self):
self.client.login(username="alice@example.org", password="password")
r = self.client.get(self.url)
self.assertEqual(r.status_code, 200)
self.assertEqual(self.client.session["last_project_id"], self.project.id)
def test_it_checks_access(self):
self.client.login(username="charlie@example.org", password="password")
r = self.client.get(self.url)
self.assertEqual(r.status_code, 404)
def test_it_shows_green_check(self):
self.check.last_ping = timezone.now()
self.check.status = "up"
self.check.save()
self.client.login(username="alice@example.org", password="password")
r = self.client.get(self.url)
self.assertContains(r, "ic-up")
def test_it_shows_red_check(self):
self.check.last_ping = timezone.now() - td(days=3)
self.check.status = "up"
self.check.save()
self.client.login(username="alice@example.org", password="password")
r = self.client.get(self.url)
self.assertContains(r, "ic-down")
def test_it_shows_amber_check(self):
self.check.last_ping = timezone.now() - td(days=1, minutes=30)
self.check.status = "up"
self.check.save()
self.client.login(username="alice@example.org", password="password")
r = self.client.get(self.url)
self.assertContains(r, "ic-grace")
def test_it_hides_add_check_button(self):
self.profile.check_limit = 0
self.profile.save()
self.client.login(username="alice@example.org", password="password")
r = self.client.get(self.url)
self.assertContains(r, "Check limit reached", status_code=200)
def test_it_saves_sort_field(self):
self.client.login(username="alice@example.org", password="password")
self.client.get(self.url + "?sort=name")
self.profile.refresh_from_db()
self.assertEqual(self.profile.sort, "name")
def test_it_ignores_bad_sort_value(self):
self.client.login(username="alice@example.org", password="password")
self.client.get(self.url + "?sort=invalid")
self.profile.refresh_from_db()
self.assertEqual(self.profile.sort, "created")
def test_it_shows_started_but_down_badge(self):
self.check.last_start = timezone.now()
self.check.tags = "foo"
self.check.status = "down"
self.check.save()
self.client.login(username="alice@example.org", password="password")
r = self.client.get(self.url)
self.assertContains(r, """<div class="btn btn-xs down ">foo</div>""")
def test_it_shows_grace_badge(self):
self.check.last_ping = timezone.now() - td(days=1, minutes=10)
self.check.tags = "foo"
self.check.status = "up"
self.check.save()
self.client.login(username="alice@example.org", password="password")
r = self.client.get(self.url)
self.assertContains(r, """<div class="btn btn-xs grace ">foo</div>""")
def test_it_shows_grace_started_badge(self):
self.check.last_start = timezone.now()
self.check.last_ping = timezone.now() - td(days=1, minutes=10)
self.check.tags = "foo"
self.check.status = "up"
self.check.save()
self.client.login(username="alice@example.org", password="password")
r = self.client.get(self.url)
self.assertContains(r, """<div class="btn btn-xs grace ">foo</div>""")
def test_it_hides_actions_from_readonly_users(self):
self.bobs_membership.rw = False
self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password")
r = self.client.get(self.url)
self.assertNotContains(r, "Add Check", status_code=200)
# The pause button:
self.assertNotContains(r, "btn btn-default pause", status_code=200)