Skip to content
Snippets Groups Projects
Commit 54daa10d authored by Todd Dembrey's avatar Todd Dembrey
Browse files

Add tests for the enhanced field behaviour

parent 73d58362
No related branches found
No related tags found
No related merge requests found
...@@ -22,7 +22,7 @@ class MultiFileInput(ClearableFileInput): ...@@ -22,7 +22,7 @@ class MultiFileInput(ClearableFileInput):
is_initial(file) for file in value is_initial(file) for file in value
) )
def render(self, name, value, attrs=None): def render(self, name, value, attrs=dict()):
if self.multiple: if self.multiple:
attrs['multiple'] = 'multiple' attrs['multiple'] = 'multiple'
......
...@@ -26,7 +26,11 @@ class StreamFieldFile(File): ...@@ -26,7 +26,11 @@ class StreamFieldFile(File):
return self.filename return self.filename
def __eq__(self, other): def __eq__(self, other):
return self.filename == other.filename and self.size == other.size if isinstance(other, File):
return self.filename == other.filename and self.size == other.size
# Rely on the other object to know how to check equality
# Could cause infinite loop if the other object is unsure how to compare
return other.__eq__(self)
def _get_file(self): def _get_file(self):
if getattr(self, '_file', None) is None: if getattr(self, '_file', None) is None:
......
# from django.test import TestCase from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase
# Create your tests here. from faker import Faker
from .files import StreamFieldFile
from .fields import MultiFileField, MultiFileInput
fake = Faker()
def make_files(number):
file_names = [f'{fake.word()}_{i}' for i in range(3)]
files = [
StreamFieldFile(SimpleUploadedFile(name, b'Some File Content'), filename=name)
for name in file_names
]
return files
class TestMultiFileInput(TestCase):
widget = MultiFileInput()
def test_renders_multiple_attr(self):
html = self.widget.render('', [])
self.assertIn('multiple', html)
def test_renders_multiple_files(self):
files = make_files(3)
html = self.widget.render('', files)
for file in files:
self.assertIn(file.filename, html)
def test_handles_files(self):
field_name = 'testing'
files = make_files(3)
files_data = {field_name: files}
data = self.widget.value_from_datadict({}, files_data, field_name)
self.assertEqual(data['files'], files)
def test_no_delete(self):
data = self.widget.value_from_datadict({}, {}, '')
self.assertFalse(data['cleared'])
def test_delete(self):
field_name = 'testing'
field_id = self.widget.clear_checkbox_name(field_name) + '-'
form_data = {
field_id + '0': 'on',
field_id + '4': 'on',
}
data = self.widget.value_from_datadict(form_data, {}, field_name)
self.assertEqual(data['cleared'], {0, 4})
class TestMultiFileField(TestCase):
field = MultiFileField()
def multi_file_value(self, files=list(), cleared=set()):
return {
'files': files,
'cleared': cleared,
}
def test_returns_files_if_no_change(self):
files = make_files(3)
cleaned = self.field.clean(self.multi_file_value(), files)
self.assertEqual(files, cleaned)
def test_returns_new_files(self):
files = make_files(3)
cleaned = self.field.clean(self.multi_file_value(files=files), None)
self.assertEqual(files, cleaned)
def test_returns_inital_and_files(self):
initial_files = make_files(3)
new_files = make_files(3)
cleaned = self.field.clean(self.multi_file_value(files=new_files), initial_files)
self.assertEqual(initial_files + new_files, cleaned)
def test_returns_nothing_all_cleared(self):
initial_files = make_files(3)
cleaned = self.field.clean(self.multi_file_value(cleared=range(3)), initial_files)
self.assertEqual([], cleaned)
def test_returns_something_some_cleared(self):
initial_files = make_files(3)
cleaned = self.field.clean(self.multi_file_value(cleared=[0, 2]), initial_files)
self.assertEqual([initial_files[1]], cleaned)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment