Coverage for vendor / test_views.py: 100%

93 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 

19 

20 

21class Tester(TestCase): 

22 teststring = random_string() 

23 testitem = None 

24 password = random_string() 

25 

26 def login(self): 

27 """ 

28 Login as user 

29 """ 

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

31 

32 def setUp(self): 

33 """ 

34 Create user 

35 Create some item in models for testing 

36 """ 

37 self.user = User.objects.create_superuser( 

38 username=random_string(), password=self.password 

39 ) 

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 self.assertContains(response, "Are you sure you want to delete") 

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

96 

97 def test_deleteview_post(self): 

98 self.login() 

99 response = self.client.post( 

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

101 ) 

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

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

104 self.assertContains( 

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

106 ) 

107 with self.assertRaises(ObjectDoesNotExist): 

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

109 

110 def test_createview(self): 

111 self.login() 

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

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

114 response = self.client.get(url) 

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

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

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

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

119 self.assertRaises( 

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

121 ) 

122 

123 def test_createview_post(self): 

124 # Make sure we have no objects in there 

125 Model.objects.all().delete() 

126 self.login() 

127 data = { 

128 "name": self.teststring, 

129 } 

130 response = self.client.post( 

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

132 data, 

133 follow=True, 

134 ) 

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

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

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

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

139 self.assertIsInstance(item, Model) 

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