Skip to content

Commit 27f4257

Browse files
authored
Increased test coverage (#42)
* improve test coverage * fix flake
1 parent 05a14a8 commit 27f4257

File tree

10 files changed

+325
-27
lines changed

10 files changed

+325
-27
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*.log
55
*.pot
66
.DS_Store
7+
.coverage
78
.coverage/
89
.eggs/
910
.idea/

.travis.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
language: python
22

3+
dist: xenial
34
sudo: false
45

56
matrix:
@@ -27,8 +28,6 @@ matrix:
2728
env: DJANGO='dj22' CMS='cms37'
2829
- python: 3.7
2930
env: DJANGO='dj22' CMS='cms37'
30-
dist: xenial
31-
sudo: true
3231

3332
install:
3433
- pip install coverage isort tox

CHANGELOG.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ Changelog
33
=========
44

55

6+
2.3.1 (unreleased)
7+
==================
8+
9+
* Added further tests to raise coverage
10+
* Fixed smaller issues found during testing
11+
12+
613
2.3.0 (2019-04-30)
714
==================
815

LICENSE.txt renamed to LICENSE

File renamed without changes.

MANIFEST.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
include LICENSE.txt
1+
include LICENSE
22
include README.rst
33
recursive-include djangocms_file/locale *
44
recursive-include djangocms_file/templates *

djangocms_file/migrations/0006_migrate_to_filer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def migrate_to_filer(apps, schema_editor):
1313
FileInstance = apps.get_model('djangocms_file', 'File')
1414
plugins = FileInstance.objects.all()
1515

16-
for plugin in plugins:
16+
for plugin in plugins: # pragma: no cover
1717
if plugin.file:
1818
filesrc = File.objects.get_or_create(
1919
file=plugin.file.file,

tests/helpers.py

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import os
2+
from tempfile import mkdtemp
3+
4+
from django.core.files import File
5+
6+
from filer.models.filemodels import File as FilerFile
7+
from filer.models.foldermodels import Folder as FilerFolder
8+
from filer.models.imagemodels import Image as FilerImage
9+
from filer.utils.compatibility import PILImage, PILImageDraw
10+
11+
12+
# from https://github.com/divio/django-filer/blob/develop/tests/helpers.py#L46-L52
13+
def create_image(mode="RGB", size=(800, 600)):
14+
"""
15+
Creates a usable image file using PIL
16+
:returns: PIL Image instance
17+
"""
18+
image = PILImage.new(mode, size)
19+
draw = PILImageDraw.Draw(image)
20+
x_bit, y_bit = size[0] // 10, size[1] // 10
21+
draw.rectangle((x_bit, y_bit * 2, x_bit * 7, y_bit * 3), "red")
22+
draw.rectangle((x_bit * 2, y_bit, x_bit * 3, y_bit * 8), "red")
23+
24+
return image
25+
26+
27+
def get_image(image_name="test_file.jpg"):
28+
"""
29+
Creates and stores an image to the file system using PILImage
30+
31+
:param image_name: the name for the file (default "test_file.jpg")
32+
:returns: dict {name, image, path}
33+
"""
34+
image = create_image()
35+
image_path = os.path.join(
36+
mkdtemp(),
37+
image_name,
38+
)
39+
image.save(image_path, "JPEG")
40+
41+
return {
42+
"name": image_name,
43+
"image": image,
44+
"path": image_path,
45+
}
46+
47+
48+
def get_file(file_name="test_file.pdf"):
49+
"""
50+
Creates and stores an arbitrary file into a temporary dir
51+
52+
:param file_name: the name for the file (default "test_file.pdf")
53+
:returns: dict {name, image, path}
54+
"""
55+
file_path = os.path.join(
56+
mkdtemp(),
57+
file_name,
58+
)
59+
data = open(file_path, "a")
60+
61+
return {
62+
"name": file_name,
63+
"file": data,
64+
"path": file_path,
65+
}
66+
67+
68+
def get_filer_image(image_name="test_file.jpg"):
69+
"""
70+
Creates and stores an image to filer and returns it
71+
72+
:param image_name: the name for the file (default "test_file.jpg")
73+
:returns: filer image instance
74+
"""
75+
image = get_image(image_name)
76+
filer_file = File(
77+
open(image.get("path"), "rb"),
78+
name=image.get("name"),
79+
)
80+
filer_object = FilerImage.objects.create(
81+
original_filename=image.get("name"),
82+
file=filer_file,
83+
)
84+
85+
return filer_object
86+
87+
88+
def get_filer_file(file_name="test_file.pdf", folder=None):
89+
"""
90+
Creates and stores a file to filer and returns it
91+
92+
:param file_name: the name for the file (default "test_file.pdf")
93+
:param folder: optionally provide a folder instance
94+
:returns: filer file instance
95+
"""
96+
data = get_file(file_name)
97+
filer_file = File(
98+
open(data.get("path"), "rb"),
99+
name=data.get("name"),
100+
)
101+
filer_object = FilerFile.objects.create(
102+
original_filename=data.get("name"),
103+
file=filer_file,
104+
folder=folder,
105+
)
106+
107+
return filer_object
108+
109+
110+
def get_filer_folder(folder_name="test_folder", parent=None):
111+
"""
112+
Creates and returns a filer folder
113+
114+
:param folder_name: the name of the folder to be used (default "folder_name")
115+
:param parent: optionally provide a parent folder
116+
:returns: filer folder instance
117+
"""
118+
filer_object = FilerFolder.objects.create(
119+
parent=parent,
120+
name=folder_name,
121+
)
122+
123+
return filer_object

tests/requirements.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
# requirements from setup.py
2-
# other requirements
31
djangocms-helper
42
tox
53
coverage
4+
isort
5+
flake8
6+
# override "pyflakes<2.1" from djangocms-helper
7+
pyflakes>=2.1.0

tests/test_models.py

Lines changed: 92 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,108 @@
11
# -*- coding: utf-8 -*-
2+
from django.conf import settings
23
from django.test import TestCase
34

4-
from filer.models import File as FilerFile
5-
from filer.models import Folder as FilerFolder
5+
from djangocms_file.models import LINK_TARGET, File, Folder, get_templates
66

7-
from djangocms_file.models import File
7+
from .helpers import get_filer_file, get_filer_folder
88

99

10-
class FileTestCase(TestCase):
10+
class CommonModelTestCase(TestCase):
11+
12+
def test_settings(self):
13+
self.assertEqual(get_templates(), [('default', 'Default')])
14+
settings.DJANGOCMS_FILE_TEMPLATES = [('feature', 'Feature')]
15+
self.assertEqual(get_templates(), [('default', 'Default'), ('feature', 'Feature')])
16+
17+
18+
class FileModelTestCase(TestCase):
1119

1220
def setUp(self):
13-
filer_file = FilerFile.objects.create(
14-
file='test.jpg',
15-
)
16-
File.objects.create(
17-
file_src=filer_file,
18-
file_name='test',
19-
)
21+
self.file = get_filer_file()
22+
23+
def tearDown(self):
24+
if self.file:
25+
self.file.delete()
26+
del self.file
27+
with self.assertRaises(AttributeError):
28+
print(self.file)
29+
File.objects.filter(pk=1).delete()
30+
self.assertEqual(File.objects.all().count(), 0)
2031

2132
def test_file_instance(self):
22-
"""File instance has been created"""
23-
test_file = File.objects.get(file_name='test')
24-
self.assertEqual(test_file.file_name, 'test')
33+
File.objects.create(
34+
template="default",
35+
file_src=self.file,
36+
file_name="some file",
37+
link_target=LINK_TARGET[0][0],
38+
link_title="some link title",
39+
show_file_size=True,
40+
attributes="{'data-type', 'file'}",
41+
)
42+
instance = File.objects.all()
43+
self.assertEqual(len(instance), 1)
44+
instance = File.objects.get(pk=1)
45+
self.assertEqual(instance.template, "default")
46+
self.assertEqual(instance.file_src, self.file)
47+
self.assertEqual(instance.file_name, "some file")
48+
self.assertEqual(instance.link_target, "_self")
49+
self.assertEqual(instance.show_file_size, True)
50+
self.assertEqual(instance.attributes, "{'data-type', 'file'}")
51+
# old copy relation and test methods
52+
instance.copy_relations(instance)
53+
self.assertEqual(instance.__str__(), "test_file.pdf")
54+
self.assertEqual(instance.get_short_description(), "some file")
55+
instance.file_name = None
56+
self.assertEqual(instance.get_short_description(), "test_file.pdf")
57+
instance.file_src = None
58+
self.assertEqual(instance.__str__(), "1")
59+
self.assertEqual(instance.get_short_description(), "<file is missing>")
2560

2661

27-
class FolderTestCase(TestCase):
62+
class FolderModelTestCase(TestCase):
2863

2964
def setUp(self):
30-
FilerFolder.objects.create(
31-
name='test',
32-
)
65+
self.folder = get_filer_folder()
66+
self.file = get_filer_file()
67+
68+
def tearDown(self):
69+
if self.file:
70+
self.file.delete()
71+
del self.file
72+
with self.assertRaises(AttributeError):
73+
print(self.file)
74+
Folder.objects.filter(pk=1).delete()
75+
self.assertEqual(File.objects.all().count(), 0)
3376

3477
def test_folder_instance(self):
35-
"""Folder instance has been created"""
36-
test_folder = FilerFolder.objects.get(name='test')
37-
self.assertEqual(test_folder.name, 'test')
78+
Folder.objects.create(
79+
template="default",
80+
folder_src=self.folder,
81+
link_target=LINK_TARGET[0][0],
82+
show_file_size=True,
83+
attributes="{'data-type', 'folder'}",
84+
)
85+
instance = Folder.objects.all()
86+
self.assertEqual(len(instance), 1)
87+
instance = Folder.objects.get(pk=1)
88+
self.assertEqual(instance.template, "default")
89+
self.assertEqual(instance.folder_src, self.folder)
90+
self.assertEqual(instance.link_target, "_self")
91+
self.assertEqual(instance.show_file_size, True)
92+
self.assertEqual(instance.attributes, "{'data-type', 'folder'}")
93+
# old copy relation and test methods
94+
instance.copy_relations(instance)
95+
self.assertEqual(instance.__str__(), "test_folder")
96+
self.assertEqual(instance.get_short_description(), "test_folder")
97+
instance.folder_src = None
98+
self.assertEqual(instance.__str__(), "1")
99+
self.assertEqual(instance.get_short_description(), "<folder is missing>")
100+
# get files
101+
self.assertEqual(instance.get_files(), [])
102+
self.file = get_filer_file(
103+
folder=self.folder
104+
)
105+
instance = Folder.objects.create(
106+
folder_src=self.folder,
107+
)
108+
self.assertEqual(instance.get_files(), [self.file])

0 commit comments

Comments
 (0)