Skip to content

Commit b86533d

Browse files
author
Mauricio Collazos
committed
added test fix #6 and create version 0.2.0
1 parent 5f0c09b commit b86533d

File tree

4 files changed

+123
-15
lines changed

4 files changed

+123
-15
lines changed

django_crud_generator/django_crud_generator.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -113,41 +113,36 @@ def sanity_check(args):
113113
sys.exit(1)
114114

115115

116-
def views(args):
116+
def generic_insert_with_folder(folder_name, file_name, args):
117117
"""
118-
Create the view file
119-
:param args: command line args
120-
:return:
118+
In general if we need to put a file on a folder, we use this method
121119
"""
122-
123120
# First we make sure views are a package instead a file
124121
if not os.path.isdir(
125122
os.path.join(
126123
args['django_application_folder'],
127-
'views'
124+
folder_name
128125
)
129126
):
130127
os.mkdir(os.path.join(args['django_application_folder'], 'views'))
131128
codecs.open(
132129
os.path.join(
133130
args['django_application_folder'],
134-
'views',
131+
folder_name,
135132
'__init__.py'
136133
),
137134
'w+'
138135
)
139136

140137
view_file = create_or_open(
141138
os.path.join(
142-
'views',
143-
'{}.py'.format(convert(args['model_name']).strip())
139+
folder_name,
140+
'{}.py'.format(file_name)
144141
),
145142
'',
146143
args
147144
)
148145
# Load content from template
149-
application_name = args['django_application_folder'].split("/")[-1]
150-
151146
render_template_with_args_in_file(
152147
view_file,
153148
os.path.join(
@@ -156,7 +151,6 @@ def views(args):
156151
),
157152
model_name=args['model_name'],
158153
model_prefix=args['model_prefix'],
159-
application_name=application_name,
160154
model_name_lower=args['model_name'].lower()
161155
)
162156
view_file.close()
@@ -211,7 +205,11 @@ def execute_from_command_line():
211205
sanity_check(args)
212206

213207
# Views has an specific logic, so we don't touch it
214-
views(args)
208+
simplified_file_name = convert(args['model_name'].strip())
209+
210+
generic_insert_with_folder("views", simplified_file_name,args)
211+
# Seems like tests also has the same logic
212+
generic_insert_with_folder("tests", "test_{}".format(simplified_file_name),args)
215213

216214
modules_to_inject = [
217215
'conf',
@@ -233,7 +231,7 @@ def execute_from_command_line():
233231
model_name=args['model_name'],
234232
model_prefix=args['model_prefix'],
235233
url_pattern=args['url_pattern'],
236-
view_file=convert(args['model_name'].strip())
234+
view_file=simplified_file_name
237235
)
238236

239237
# This is just a fix to link api_urls with urls
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
from django.test import (
2+
TestCase,
3+
Client
4+
)
5+
from django.core.urlresolvers import reverse_lazy
6+
from django.contrib.auth import (
7+
get_user_model,
8+
models as auth_models
9+
)
10+
11+
from .. import (
12+
conf,
13+
models
14+
)
15+
16+
17+
class ${model_name}Permission(TestCase):
18+
19+
@staticmethod
20+
def perform_create():
21+
return models.${model_name}.objects.create(
22+
name="delete_me"
23+
)
24+
25+
def args_for_reverse_lazy(self):
26+
return {
27+
"slug": self.object.slug
28+
}
29+
30+
def setUp(self):
31+
self.unauthorized_client = Client()
32+
self.client = Client()
33+
self.user = get_user_model().objects.create_user('user', password='password')
34+
self.client.login(username='user', password='password')
35+
self.object = self.perform_create()
36+
37+
def test_unauthenticated_users_cant_create(self):
38+
response = self.unauthorized_client.get(reverse_lazy(conf.${model_prefix}_CREATE_URL_NAME))
39+
self.assertNotEqual(response.status_code, 200)
40+
41+
def test_unauthenticated_users_cant_update(self):
42+
response = self.unauthorized_client.get(
43+
reverse_lazy(
44+
conf.${model_prefix}_UPDATE_URL_NAME,
45+
kwargs=self.args_for_reverse_lazy()
46+
)
47+
)
48+
self.assertNotEqual(response.status_code, 200)
49+
50+
def test_unauthenticated_users_cant_delete(self):
51+
response = self.unauthorized_client.get(
52+
reverse_lazy(
53+
conf.${model_prefix}_DELETE_URL_NAME,
54+
kwargs=self.args_for_reverse_lazy()
55+
)
56+
)
57+
self.assertNotEqual(response.status_code, 200)
58+
59+
def test_unauthorized_users_cant_create(self):
60+
response = self.client.get(reverse_lazy(conf.${model_prefix}_CREATE_URL_NAME))
61+
self.assertNotEqual(response.status_code, 200)
62+
63+
def test_unauthorized_users_cant_update(self):
64+
response = self.client.get(
65+
reverse_lazy(
66+
conf.${model_prefix}_UPDATE_URL_NAME,
67+
kwargs=self.args_for_reverse_lazy()
68+
)
69+
)
70+
self.assertNotEqual(response.status_code, 200)
71+
72+
def test_unauthorized_users_cant_delete(self):
73+
response = self.client.get(
74+
reverse_lazy(
75+
conf.${model_prefix}_DELETE_URL_NAME,
76+
kwargs=self.args_for_reverse_lazy()
77+
)
78+
)
79+
self.assertNotEqual(response.status_code, 200)
80+
81+
def test_authorized_users_can_create(self):
82+
create_permission = auth_models.Permission.objects.get(codename="add_${model_name_lower}")
83+
self.user.user_permissions.add(create_permission)
84+
response = self.client.get(reverse_lazy(conf.${model_prefix}_CREATE_URL_NAME))
85+
self.assertEqual(response.status_code, 200)
86+
87+
def test_authorized_users_can_update(self):
88+
change_permission = auth_models.Permission.objects.get(codename="change_${model_name_lower}")
89+
self.user.user_permissions.add(change_permission)
90+
response = self.client.get(
91+
reverse_lazy(
92+
conf.${model_prefix}_UPDATE_URL_NAME,
93+
kwargs=self.args_for_reverse_lazy()
94+
)
95+
)
96+
self.assertEqual(response.status_code, 200)
97+
98+
def test_authorized_users_can_delete(self):
99+
delete_permission = auth_models.Permission.objects.get(codename="delete_${model_name_lower}")
100+
self.user.user_permissions.add(delete_permission)
101+
response = self.client.get(
102+
reverse_lazy(
103+
conf.${model_prefix}_DELETE_URL_NAME,
104+
kwargs=self.args_for_reverse_lazy()
105+
)
106+
)
107+
self.assertEqual(response.status_code, 200)

django_crud_generator/templates/view.py.tmpl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
from django.core.urlresolvers import reverse_lazy
22
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
3+
from django.core.urlresolvers import reverse_lazy
4+
from django import http
5+
36

47
from base import views as base_views
58

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def readme():
77

88
setup(
99
name='django_crud_generator',
10-
version='0.1.1',
10+
version='0.2.0',
1111
description='A simple scaffolding for django applications',
1212
long_description=readme(),
1313
url='http://github.com/contraslash/django-crud-generator',

0 commit comments

Comments
 (0)