Coverage for backend/core/testing/AhuoraServerTestCase.py: 100%

22 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-11-06 23:27 +0000

1from django.core.servers.basehttp import WSGIRequestHandler 

2from django.test import LiveServerTestCase 

3from django.test.testcases import LiveServerThread, QuietWSGIRequestHandler 

4 

5 

6class ResusableLiveServerThread(LiveServerThread): 

7 """ 

8 This miniclass overrides _create_server to allow port reuse. This avoids creating 

9 "address already in use" errors for tests that have been run subsequently. 

10 """ 

11 

12 def _create_server(self, connections_override=None): 

13 return self.server_class( 

14 (self.host, self.port), 

15 WSGIRequestHandler, 

16 allow_reuse_address=True, 

17 connections_override=connections_override, 

18 ) 

19 

20class AhuoraServerTestCase(LiveServerTestCase): 

21 host = "0.0.0.0" 

22 port = 8000 

23 server_thread_class = ResusableLiveServerThread 

24 

25 def assertJsonAlmostEqual(self, obj1, obj2, places=7): 

26 """Recursively compare JSON-like structures with float tolerance.""" 

27 if isinstance(obj1, dict) and isinstance(obj2, dict): 

28 self.assertEqual(set(obj1.keys()), set(obj2.keys()), msg="Dict keys mismatch") 

29 for key in obj1: 

30 self.assertJsonAlmostEqual(obj1[key], obj2[key], places) 

31 elif isinstance(obj1, list) and isinstance(obj2, list): 

32 self.assertEqual(len(obj1), len(obj2), msg="List lengths differ") 

33 for a, b in zip(obj1, obj2): 

34 self.assertJsonAlmostEqual(a, b, places) 

35 elif isinstance(obj1, float) or isinstance(obj2, float): 

36 self.assertAlmostEqual(obj1, obj2, places=places) 

37 else: 

38 self.assertEqual(obj1, obj2)