Coverage for clusterpackagetype / test_views.py: 98%

103 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 

18 

19from sm.utils import random_string 

20 

21 

22class Tester(TestCase): 

23 teststring = random_string() 

24 testitem = None 

25 password = random_string() 

26 fixtures = [] 

27 

28 def login(self): 

29 """ 

30 Login as user 

31 """ 

32 self.client.login(username=self.user.username, password=self.password) 

33 

34 def setUp(self): 

35 """ 

36 Create user 

37 Create some item in models for testing 

38 """ 

39 self.user = User.objects.create_superuser( 

40 username=random_string(), 

41 password=self.password, 

42 ) 

43 

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

45 name=self.teststring, 

46 ) 

47 

48 def test_login_redir(self): 

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

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

51 

52 def test_listview(self): 

53 Model.objects.all().delete() 

54 self.setUp() 

55 self.login() 

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

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

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

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

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

61 

62 def test_detailview(self): 

63 self.login() 

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

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

66 response = self.client.get(url) 

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

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

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

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

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

72 self.assertIsInstance(form, FormDisabled) 

73 for field in ["name"]: 

74 self.assertTrue(form.fields[field].widget.attrs["disabled"]) 

75 

76 def test_updateview(self): 

77 self.login() 

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

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

80 response = self.client.get(url) 

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

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

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

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

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

86 self.assertIsInstance(form, Form) 

87 for field in ["name"]: 

88 self.assertRaises( 

89 KeyError, form.fields[field].widget.attrs.__getitem__, "disabled" 

90 ) 

91 

92 def test_deleteview(self): 

93 self.login() 

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

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

96 response = self.client.get(url) 

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

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

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

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

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

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

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

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

105 

106 def test_deleteview_post(self): 

107 self.login() 

108 response = self.client.post( 

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

110 ) 

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

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

113 pass 

114 self.assertContains( 

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

116 ) 

117 with self.assertRaises(ObjectDoesNotExist): 

118 Model.objects.get( 

119 name=self.testitem.name, 

120 ) 

121 

122 def test_createview(self): 

123 self.login() 

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

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

126 response = self.client.get(url) 

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

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

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

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

131 self.assertRaises( 

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

133 ) 

134 

135 def test_createview_post(self): 

136 # Make sure we have no objects in there 

137 Model.objects.all().delete() 

138 self.login() 

139 data = { 

140 "name": self.teststring, 

141 } 

142 response = self.client.post( 

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

144 data, 

145 follow=True, 

146 ) 

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

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

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

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

151 

152 self.assertIsInstance(item, Model) 

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

154 "utf-8" 

155 ): 

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

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