Skip to content

Commit 7904cad

Browse files
committed
Raise validation errors to prevent duplicates
1 parent d2a170e commit 7904cad

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

pinax/documents/forms.py

+12
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ class Meta:
2121
"parent": forms.HiddenInput,
2222
}
2323

24+
def clean(self):
25+
name = self.cleaned_data["name"]
26+
parent = self.cleaned_data.get("parent")
27+
if Folder.already_exists(name, parent):
28+
raise forms.ValidationError("{} already exists.".format(name))
29+
2430
def __init__(self, *args, **kwargs):
2531
folders = kwargs.pop("folders")
2632
super(FolderCreateForm, self).__init__(*args, **kwargs)
@@ -48,6 +54,12 @@ def clean_file(self):
4854
raise forms.ValidationError("File will exceed storage capacity.")
4955
return value
5056

57+
def clean(self):
58+
name = self.cleaned_data["file"].name
59+
folder = self.cleaned_data.get("folder")
60+
if Document.already_exists(name, folder):
61+
raise forms.ValidationError("{} already exists.".format(name))
62+
5163

5264
class UserMultipleChoiceField(forms.ModelMultipleChoiceField):
5365

pinax/documents/tests/test_views.py

+27
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,19 @@ def test_post_create_with_illegal_parent(self):
9393
self.assertFalse("object" in self.last_response.context)
9494
self.assertFalse(Folder.objects.filter(name=folder_name))
9595

96+
def test_post_create_with_duplicate_name(self):
97+
"""
98+
Ensure POST does not create a folder with duplicate name
99+
"""
100+
folder_name = "Spindle"
101+
Folder.objects.create(name=folder_name, author=self.user, modified_by=self.user)
102+
post_args = {"name": folder_name}
103+
with self.login(self.user):
104+
response = self.post(self.create_urlname, data=post_args, follow=True)
105+
self.response_200(response)
106+
self.assertTrue("{} already exists.".format(folder_name) in str(response.context["form"].errors))
107+
self.assertFalse("object" in self.last_response.context)
108+
96109
def test_detail(self):
97110
"""
98111
Ensure we can see folder detail.
@@ -301,6 +314,20 @@ def test_post_create_with_illegal_parent(self):
301314
self.assertFalse("object" in self.last_response.context)
302315
self.assertFalse(Document.objects.filter(name=simple_file.name))
303316

317+
def test_post_create_with_duplicate_name(self):
318+
"""
319+
Ensure POST does not create a document with duplicate name
320+
"""
321+
simple_file = SimpleUploadedFile("delicious.txt", self.file_contents)
322+
Document.objects.create(name="delicious.txt", author=self.user, file=simple_file, modified_by=self.user)
323+
simple_file = SimpleUploadedFile("delicious.txt", self.file_contents)
324+
post_args = {"name": "file", "file": simple_file}
325+
with self.login(self.user):
326+
response = self.post(self.create_urlname, data=post_args, follow=True)
327+
self.response_200(response)
328+
self.assertTrue("delicious.txt already exists." in str(response.context["form"].errors))
329+
self.assertFalse("object" in self.last_response.context)
330+
304331
def test_detail(self):
305332
"""
306333
Ensure we can see document detail.

0 commit comments

Comments
 (0)