Coverage for website/documents/tests/test_views.py: 100.00%

40 statements  

« prev     ^ index     » next       coverage.py v7.6.7, created at 2025-08-14 10:31 +0000

1import logging 

2from unittest.mock import Mock 

3 

4from django.core.files import File 

5from django.test import Client, TestCase, override_settings 

6 

7from documents.models import Document 

8from members.models import Member 

9 

10 

11@override_settings(SUSPEND_SIGNALS=True) 

12class GetDocumentTest(TestCase): 

13 """tests for the :func:`.get_document` view.""" 

14 

15 fixtures = ["members.json"] 

16 

17 @classmethod 

18 def setUpTestData(cls): 

19 cls.file_en = Mock(spec=File) 

20 cls.file_en.name = "file.pdf" 

21 cls.file_en.chunks.return_value = [b"file"] 

22 

23 cls.document = Document.objects.create( 

24 pk=1, 

25 name="Test document (EN)", 

26 category="misc", 

27 file=cls.file_en, 

28 ) 

29 

30 cls.member = Member.objects.filter(last_name="Wiggers").first() 

31 

32 def setUp(self): 

33 self.client = Client() 

34 logger = logging.getLogger("django.request") 

35 self.previous_log_level = logger.getEffectiveLevel() 

36 logger.setLevel(logging.ERROR) 

37 

38 def tearDown(self): 

39 logger = logging.getLogger("django.request") 

40 logger.setLevel(self.previous_log_level) 

41 

42 def test_basic(self): 

43 response = self.client.post("/association/documents/document/1", follow=True) 

44 self.assertEqual(response.status_code, 200) 

45 

46 def test_does_not_exist(self): 

47 response = self.client.post("/association/documents/document/999", follow=True) 

48 self.assertEqual(response.status_code, 404) 

49 

50 def test_members_only(self): 

51 self.document.members_only = True 

52 self.document.save() 

53 

54 response = self.client.post("/association/documents/document/1", follow=True) 

55 template_names = [template.name for template in response.templates] 

56 self.assertIn("two_factor/core/login.html", template_names) 

57 

58 self.client.force_login(self.member) 

59 

60 response = self.client.post("/association/documents/document/1", follow=True) 

61 template_names = [template.name for template in response.templates] 

62 self.assertNotIn("two_factor/core/login.html", template_names)