Coverage for location / test_views.py: 97%

101 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-24 12:43 +0000

1from django.test import TestCase 

2 

3 

4from .models import Model 

5from .forms import FormDisabled 

6from .forms import Form 

7from . import app_label 

8 

9from django.contrib.auth.models import User 

10 

11from django.core.exceptions import ObjectDoesNotExist 

12 

13try: 

14 from django.urls import reverse 

15except Exception: # pragma: no cover 

16 from django.urls import reverse # pragma: no cover 

17 

18from sm.utils import random_string 

19from django_countries import countries 

20 

21 

22class Tester(TestCase): 

23 teststring = random_string() 

24 testitem = None 

25 country = list(dict(countries).keys())[0] 

26 

27 def login(self): 

28 """ 

29 Login as user 'john' 

30 """ 

31 self.client.login(username="john", password="johnpassword") 

32 

33 def setUp(self): 

34 """ 

35 Create user 

36 Create some item in models for testing 

37 """ 

38 self.user = User.objects.create_superuser( 

39 "john", "lennon@thebeatles.com", "johnpassword" 

40 ) 

41 self.testitem, created = Model.objects.get_or_create( 

42 name=self.teststring, 

43 ) 

44 

45 def test_login_redir(self): 

46 response = self.client.get(reverse("%s:index" % app_label)) 

47 self.assertEqual(response.status_code, 302, "no redirect?") 

48 

49 def test_listview(self): 

50 self.login() 

51 response = self.client.get(reverse("%s:index" % app_label)) 

52 self.assertEqual(response.status_code, 200, "no status 200?") 

53 item = response.context[-1]["object_list"].first() 

54 self.assertIsInstance(item, Model, "object not the correct model!?") 

55 self.assertEqual(item.name, self.teststring) 

56 

57 def test_detailview(self): 

58 self.login() 

59 url = reverse("%s:detail" % app_label, args=[self.testitem.pk]) 

60 self.assertEqual("/%s/detail/%i/" % (app_label, self.testitem.pk), url) 

61 response = self.client.get(url) 

62 self.assertEqual(response.status_code, 200, "no status 200?") 

63 item = response.context[-1]["object"] 

64 self.assertIsInstance(item, Model, "object not the correct model!?") 

65 self.assertEqual(item.name, self.teststring) 

66 form = response.context[-1]["form"] 

67 self.assertIsInstance(form, FormDisabled) 

68 self.assertTrue(form.fields["name"].widget.attrs["disabled"]) 

69 

70 def test_updateview(self): 

71 self.login() 

72 url = reverse("%s:update" % app_label, args=[self.testitem.pk]) 

73 self.assertEqual("/%s/update/%i/" % (app_label, self.testitem.pk), url) 

74 response = self.client.get(url) 

75 self.assertEqual(response.status_code, 200, "no status 200?") 

76 item = response.context[-1]["object"] 

77 self.assertIsInstance(item, Model, "object not the correct model!?") 

78 self.assertEqual(item.name, self.teststring) 

79 form = response.context[-1]["form"] 

80 self.assertIsInstance(form, Form) 

81 self.assertRaises( 

82 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled" 

83 ) 

84 

85 def test_deleteview(self): 

86 self.login() 

87 url = reverse("%s:delete" % app_label, args=[self.testitem.pk]) 

88 self.assertEqual("/%s/delete/%i/" % (app_label, self.testitem.pk), url) 

89 response = self.client.get(url) 

90 self.assertEqual(response.status_code, 200, "no status 200?") 

91 item = response.context[-1]["object"] 

92 self.assertIsInstance(item, Model, "object not the correct model!?") 

93 self.assertEqual(item.name, self.teststring) 

94 if "Are you sure you want to" not in response.content.decode("utf-8"): 

95 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}") 

96 self.assertContains(response, "Are you sure you want to delete") 

97 self.assertContains(response, "Confirm Delete") 

98 

99 def test_deleteview_post(self): 

100 self.login() 

101 response = self.client.post( 

102 reverse("%s:delete" % app_label, args=[self.testitem.pk]), follow=True 

103 ) 

104 self.assertEqual(response.status_code, 200, "no status 200?") 

105 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302) 

106 pass 

107 if ( 

108 "%s was deleted successfully" % self.testitem.name 

109 not in response.content.decode("utf-8") 

110 ): 

111 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}") 

112 self.assertContains( 

113 response, "%s was deleted successfully" % self.testitem.name 

114 ) 

115 with self.assertRaises(ObjectDoesNotExist): 

116 Model.objects.get(name=self.testitem.name) 

117 

118 def test_createview(self): 

119 self.login() 

120 url = reverse("%s:create" % app_label) 

121 self.assertEqual("/%s/create" % app_label, url) 

122 response = self.client.get(url) 

123 self.assertEqual(response.status_code, 200, "no status 200?") 

124 self.assertRaises(KeyError, response.context[-1].__getitem__, "object") 

125 self.assertIn("form", response.context[-1]) 

126 form = response.context[-1]["form"] 

127 self.assertRaises( 

128 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled" 

129 ) 

130 

131 def test_createview_post(self): 

132 # Make sure we have no objects in there 

133 Model.objects.all().delete() 

134 self.login() 

135 data = { 

136 "name": self.teststring, 

137 "country": self.country, 

138 } 

139 response = self.client.post( 

140 reverse("%s:create" % app_label), 

141 data, 

142 follow=True, 

143 ) 

144 self.assertEqual(response.status_code, 200, "no status 200?") 

145 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302) 

146 item = response.context[-1]["object_list"].first() 

147 self.assertEqual(item.name, data["name"]) 

148 self.assertIsInstance(item, Model) 

149 if "%s was created successfully" % data["name"] not in response.content.decode( 

150 "utf-8" 

151 ): 

152 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}") 

153 self.assertContains(response, "%s was created successfully" % data["name"])