Coverage for ivatar/test_perf_test.py: 100%
52 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-20 05:10 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-20 05:10 +0000
1from django.test import TestCase, Client
2from django.urls import reverse
3from django.contrib.auth.models import User
4from ivatar.ivataraccount.models import ConfirmedEmail, ConfirmedOpenId
6class PerfTestViewTestCase(TestCase):
8 def setUp(self):
9 self.client = Client()
11 def test_unauthenticated_access(self):
12 url = reverse("perf_test")
13 response = self.client.get(url)
14 # Should redirect to login
15 self.assertEqual(response.status_code, 302)
16 self.assertIn("login", response.url)
18 def test_authenticated_access_no_emails(self):
19 user = User.objects.create_user(username="testuser", password="password")
20 self.client.force_login(user)
21 url = reverse("perf_test")
22 response = self.client.get(url)
24 self.assertEqual(response.status_code, 200)
25 # Check that context contains perf_results
26 self.assertIn("perf_results", response.context)
27 results = response.context["perf_results"]
28 self.assertGreater(len(results), 0)
29 # Dummy MD5, Size 80 is the first scenario
30 self.assertTrue(any(r["name"] == "Dummy MD5, Size 80" for r in results))
31 # Duration formatted with two decimal places (fixed width font)
32 for r in results:
33 self.assertRegex(r["duration_str"], r"^\d+\.\d{2}$")
35 def test_total_duration_sum_matches_rows(self):
36 """Total duration in context equals the sum of all scenario rows."""
37 user = User.objects.create_user(username="testuser", password="password")
38 self.client.force_login(user)
39 url = reverse("perf_test")
40 response = self.client.get(url)
42 self.assertEqual(response.status_code, 200)
43 results = response.context["perf_results"]
44 total = response.context["total_duration_str"]
46 self.assertRegex(total, r"^\d+\.\d{2}$")
47 expected = sum(r["duration_ms"] for r in results)
48 self.assertAlmostEqual(
49 float(total),
50 expected,
51 places=1,
52 msg="total duration string does not match the row sum",
53 )
55 def test_authenticated_access_with_emails_and_openids(self):
56 user = User.objects.create_user(username="testuser", password="password")
57 # Add confirmed email
58 ConfirmedEmail.objects.create(user=user, email="user@example.com")
59 # Add confirmed OpenID
60 ConfirmedOpenId.objects.create(user=user, openid="http://user.example.com")
62 self.client.force_login(user)
63 url = reverse("perf_test")
64 response = self.client.get(url)
66 self.assertEqual(response.status_code, 200)
67 results = response.context["perf_results"]
69 # Check if user specific scenarios were added
70 self.assertTrue(any(r["name"] == "User Email MD5 (user@example.com), Size 80" for r in results))
71 self.assertTrue(any(r["name"] == "User OpenID SHA256, Size 80" for r in results))
72 # Check defaults
73 self.assertTrue(any("Default: robohash" in r["name"] for r in results))
74 self.assertTrue(any("Default: wavatar" in r["name"] for r in results))
75 self.assertTrue(any("Default: monsterid" in r["name"] for r in results))
76 self.assertTrue(any("Default: identicon" in r["name"] for r in results))
77 self.assertTrue(any("Default: mm" in r["name"] for r in results))
78 self.assertTrue(any("Default: mp" in r["name"] for r in results))