Newer
Older
from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase
from faker import Faker
from .files import StreamFieldFile
from .fields import MultiFileField, MultiFileInput
fake = Faker()
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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)