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

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 

5 

6class PerfTestViewTestCase(TestCase): 

7 

8 def setUp(self): 

9 self.client = Client() 

10 

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) 

17 

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) 

23 

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}$") 

34 

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) 

41 

42 self.assertEqual(response.status_code, 200) 

43 results = response.context["perf_results"] 

44 total = response.context["total_duration_str"] 

45 

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 ) 

54 

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") 

61 

62 self.client.force_login(user) 

63 url = reverse("perf_test") 

64 response = self.client.get(url) 

65 

66 self.assertEqual(response.status_code, 200) 

67 results = response.context["perf_results"] 

68 

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))