Skip to content

Commit a6ad042

Browse files
authored
Increased test coverage (#63)
* added 100% coverage * update tests
1 parent bdbaca3 commit a6ad042

File tree

9 files changed

+282
-75
lines changed

9 files changed

+282
-75
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: 2 additions & 4 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:
@@ -25,12 +26,9 @@ matrix:
2526
# Django 2.2
2627
- python: 3.6
2728
env: DJANGO='dj22' CMS='cms37'
28-
dist: xenial
29-
sudo: true
3029
- python: 3.7
3130
env: DJANGO='dj22' CMS='cms37'
32-
dist: xenial
33-
sudo: true
31+
3432

3533
install:
3634
- pip install coverage isort tox

CHANGELOG.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ Changelog
88

99
* Fixed an issue where render requires a dict instead of a context
1010
* Added ``DJANGOCMS_SNIPPET_CACHE`` cache settings for snippets
11+
* Added further tests to raise coverage
12+
* Fixed smaller issues found during testing
13+
* Fixed alt attribute not rendering correctly
1114

1215

1316
2.2.0 (2019-05-06)

djangocms_snippet/migrations/0003_auto_data_fill_slug.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def auto_fill_slugs(apps, schema_editor):
1313
"""
1414
Snippet = apps.get_model("djangocms_snippet", "Snippet")
1515
SlugCounter = Counter()
16-
for snippet_item in Snippet.objects.all():
16+
for snippet_item in Snippet.objects.all(): # pragma: no cover
1717
if not snippet_item.slug:
1818
snippet_item.slug = slugify(snippet_item.name)
1919
# Avoid duplicate slug, adding slug occurence count to the slug

djangocms_snippet/templatetags/snippet_tags.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def render(self, context):
6969
if isinstance(snippet_instance, six.string_types):
7070
snippet_instance = Snippet.objects.get(slug=snippet_instance)
7171
# Assume this is an id
72-
elif isinstance(snippet_instance, int):
72+
elif isinstance(snippet_instance, int): # pragma: no cover
7373
snippet_instance = Snippet.objects.get(pk=snippet_instance)
7474

7575
return mark_safe(self.get_content_render(context,
@@ -88,18 +88,20 @@ def get_content_render(self, context, instance):
8888
})
8989
try:
9090
if instance.template:
91-
t = template.loader.get_template(instance.template)
9291
context.update({
9392
'html': mark_safe(instance.html)
9493
})
95-
content = t.render(template.Context(context))
94+
content = template.loader.render_to_string(
95+
instance.template,
96+
context.flatten(),
97+
)
9698
else:
9799
t = template.Template(instance.html)
98100
content = t.render(template.Context(context))
99101
except template.TemplateDoesNotExist:
100102
content = _('Template %(template)s does not exist.') % {
101103
'template': instance.template}
102-
except Exception as e:
104+
except Exception as e: # pragma: no cover
103105
content = escape(str(e))
104106
if self.parse_until:
105107
# In case we are running 'exceptionless'

tests/requirements.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
# other requirements
21
djangocms-helper
32
tox
43
coverage
4+
isort
5+
flake8
6+
# override "pyflakes<2.1" from djangocms-helper
7+
pyflakes>=2.1.0

tests/test_models.py

Lines changed: 30 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,46 @@
11
# -*- coding: utf-8 -*-
2-
from cms.api import add_plugin, create_page
3-
from cms.test_utils.testcases import CMSTestCase
2+
from django.test import TestCase
43

5-
from djangocms_snippet.models import Snippet
4+
from djangocms_snippet.models import Snippet, SnippetPtr, SEARCH_ENABLED
65

76

8-
class SnippetTestCase(CMSTestCase):
7+
class SnippetModelTestCase(TestCase):
98

109
def setUp(self):
11-
self.superuser = self.get_superuser()
12-
self.home = create_page(
13-
title="home",
14-
template="page.html",
15-
language="en",
16-
)
17-
self.home.publish("en")
18-
self.page = create_page(
19-
title="help",
20-
template="page.html",
21-
language="en",
22-
)
10+
pass
2311

2412
def tearDown(self):
25-
self.page.delete()
26-
self.home.delete()
13+
pass
14+
15+
def test_settings(self):
16+
self.assertEqual(SEARCH_ENABLED, False)
2717

2818
def test_snippet_instance(self):
29-
"""Snippet instance has been created"""
3019
Snippet.objects.create(
31-
name="snippet",
20+
name="test snippet",
21+
html="<p>hello world</p>",
22+
slug="test_snippet",
3223
)
33-
snippet = Snippet.objects.get(name="snippet")
34-
self.assertEqual(snippet.name, "snippet")
35-
36-
def test_html_rendering(self):
24+
instance = Snippet.objects.all()
25+
self.assertEqual(instance.count(), 1)
26+
instance = Snippet.objects.first()
27+
self.assertEqual(instance.name, "test snippet")
28+
self.assertEqual(instance.html, "<p>hello world</p>")
29+
self.assertEqual(instance.slug, "test_snippet")
30+
# test strings
31+
self.assertEqual(str(instance), "test snippet")
32+
33+
def test_snippet_ptr_instance(self):
3734
snippet = Snippet.objects.create(
38-
name="plugin_snippet",
39-
html="<p>Hello World</p>",
40-
slug="plugin_snippet",
35+
name="test snippet",
36+
html="<p>hello world</p>",
37+
slug="test_snippet",
4138
)
42-
plugin = add_plugin(
43-
self.page.placeholders.get(slot="content"),
44-
"SnippetPlugin",
45-
"en",
39+
SnippetPtr.objects.create(
4640
snippet=snippet,
4741
)
48-
self.page.publish("en")
49-
self.assertEqual(plugin.snippet.name, "plugin_snippet")
50-
self.assertEqual(plugin.snippet.html, "<p>Hello World</p>")
51-
self.assertEqual(plugin.snippet.slug, "plugin_snippet")
52-
53-
with self.login_user_context(self.superuser):
54-
response = self.client.get(self.page.get_absolute_url('en'))
55-
56-
self.assertIn(b"<p>Hello World</p>", response.content)
57-
58-
def test_file_rendering(self):
59-
template = "snippet.html"
60-
snippet = Snippet.objects.create(
61-
name="plugin_snippet",
62-
template=template,
63-
slug="plugin_snippet",
64-
)
65-
plugin = add_plugin(
66-
self.page.placeholders.get(slot="content"),
67-
"SnippetPlugin",
68-
"en",
69-
snippet=snippet,
70-
)
71-
self.page.publish("en")
72-
self.assertEqual(plugin.snippet.name, "plugin_snippet")
73-
self.assertEqual(plugin.snippet.slug, "plugin_snippet")
74-
75-
with self.login_user_context(self.superuser):
76-
response = self.client.get(self.page.get_absolute_url('en'))
77-
78-
self.assertNotIn("Template {} does not exist".format(template).encode(), response.content)
79-
self.assertNotIn(b"context must be a dict rather than Context", response.content)
80-
self.assertNotIn(b"context must be a dict rather than PluginContext", response.content)
81-
self.assertContains(response, "<p>Hello World Template</p>")
42+
instance = SnippetPtr.objects.all()
43+
self.assertEqual(instance.count(), 1)
44+
instance = SnippetPtr.objects.first()
45+
# test strings
46+
self.assertEqual(str(instance), "test snippet")

tests/test_plugins.py

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# -*- coding: utf-8 -*-
2+
from cms.api import add_plugin, create_page
3+
from cms.test_utils.testcases import CMSTestCase
4+
5+
from djangocms_snippet.models import Snippet
6+
7+
8+
class SnippetPluginsTestCase(CMSTestCase):
9+
10+
def setUp(self):
11+
self.language = "en"
12+
self.home = create_page(
13+
title="home",
14+
template="page.html",
15+
language=self.language,
16+
)
17+
self.home.publish(self.language)
18+
self.page = create_page(
19+
title="help",
20+
template="page.html",
21+
language=self.language,
22+
)
23+
self.page.publish(self.language)
24+
self.placeholder = self.page.placeholders.get(slot="content")
25+
self.superuser = self.get_superuser()
26+
27+
def tearDown(self):
28+
self.page.delete()
29+
self.home.delete()
30+
self.superuser.delete()
31+
32+
def test_html_rendering(self):
33+
request_url = self.page.get_absolute_url(self.language) + "?toolbar_off=true"
34+
snippet = Snippet.objects.create(
35+
name="plugin_snippet",
36+
html="<p>Hello World</p>",
37+
slug="plugin_snippet",
38+
)
39+
plugin = add_plugin(
40+
self.page.placeholders.get(slot="content"),
41+
"SnippetPlugin",
42+
self.language,
43+
snippet=snippet,
44+
)
45+
self.page.publish(self.language)
46+
self.assertEqual(plugin.snippet.name, "plugin_snippet")
47+
self.assertEqual(plugin.snippet.html, "<p>Hello World</p>")
48+
self.assertEqual(plugin.snippet.slug, "plugin_snippet")
49+
50+
with self.login_user_context(self.superuser):
51+
response = self.client.get(request_url)
52+
53+
self.assertIn(b"<p>Hello World</p>", response.content)
54+
55+
def test_failing_html_rendering(self):
56+
request_url = self.page.get_absolute_url(self.language) + "?toolbar_off=true"
57+
snippet = Snippet.objects.create(
58+
name="plugin_snippet",
59+
html="{% import weirdness %}",
60+
slug="plugin_snippet",
61+
)
62+
add_plugin(
63+
self.page.placeholders.get(slot="content"),
64+
"SnippetPlugin",
65+
self.language,
66+
snippet=snippet,
67+
)
68+
self.page.publish(self.language)
69+
70+
with self.login_user_context(self.superuser):
71+
response = self.client.get(request_url)
72+
73+
self.assertContains(response, "Invalid block tag on line 1")
74+
self.assertContains(response, "Did you forget to register or load this tag?")
75+
76+
def test_template_rendering(self):
77+
request_url = self.page.get_absolute_url(self.language) + "?toolbar_off=true"
78+
template = "snippet.html"
79+
snippet = Snippet.objects.create(
80+
name="plugin_snippet",
81+
template=template,
82+
slug="plugin_snippet",
83+
)
84+
snippet.save()
85+
plugin = add_plugin(
86+
self.page.placeholders.get(slot="content"),
87+
"SnippetPlugin",
88+
self.language,
89+
snippet=snippet,
90+
)
91+
self.page.publish(self.language)
92+
self.assertEqual(plugin.snippet.name, "plugin_snippet")
93+
self.assertEqual(plugin.snippet.slug, "plugin_snippet")
94+
95+
with self.login_user_context(self.superuser):
96+
response = self.client.get(request_url)
97+
98+
self.assertNotIn("Template {} does not exist".format(template).encode(), response.content)
99+
self.assertNotIn(b"context must be a dict rather than Context", response.content)
100+
self.assertNotIn(b"context must be a dict rather than PluginContext", response.content)
101+
self.assertContains(response, "<p>Hello World Template</p>")
102+
103+
def test_failing_template_rendering(self):
104+
request_url = self.page.get_absolute_url(self.language) + "?toolbar_off=true"
105+
template = "some_template"
106+
snippet = Snippet.objects.create(
107+
name="plugin_snippet",
108+
template=template,
109+
slug="plugin_snippet",
110+
)
111+
snippet.save()
112+
add_plugin(
113+
self.page.placeholders.get(slot="content"),
114+
"SnippetPlugin",
115+
self.language,
116+
snippet=snippet,
117+
)
118+
self.page.publish(self.language)
119+
120+
with self.login_user_context(self.superuser):
121+
response = self.client.get(request_url)
122+
123+
self.assertContains(response, "Template some_template does not exist")

0 commit comments

Comments
 (0)