Skip to content

Commit d94acd1

Browse files
author
Peter Bengtsson
authored
pytest (#336)
* pytest * a few more tests * a few more tests
1 parent f730727 commit d94acd1

File tree

12 files changed

+173
-109
lines changed

12 files changed

+173
-109
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ tags
2222
podcasts
2323
minimalcss/yarn-error.log
2424
.vscode/
25+
.pytest_cache/

bin/travis/test.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ set -e
55
# Make sure we're running ES 5
66
curl -v http://localhost:9200/
77

8-
python manage.py test --noinput
8+
pytest peterbecom

constraints.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
py==1.5.4 \
2+
--hash=sha256:3fd59af7435864e1a243790d322d763925431213b6b8529c6ca71081ace3bbf7 \
3+
--hash=sha256:e31fb2767eb657cbde86c454f02e99cb846d3cd9d61b318525140214fdc0e98e
4+
pathlib2==2.3.2 \
5+
--hash=sha256:8eb170f8d0d61825e09a95b38be068299ddeda82f35e96c3301a8a5e7604cb83 \
6+
--hash=sha256:d1aa2a11ba7b8f7b21ab852b1fb5afb277e1bb99d5dfc663380b5015c0d80c5a
7+
pluggy==0.7.1 \
8+
--hash=sha256:6e3836e39f4d36ae72840833db137f7b7d35105079aee6ec4a62d9f80d594dd1 \
9+
--hash=sha256:95eb8364a4708392bae89035f45341871286a333f749c3141c20573d2b3876e1
10+
more-itertools==4.3.0 \
11+
--hash=sha256:c187a73da93e7a8acc0001572aebc7e3c69daf7bf6881a2cea10650bd4420092 \
12+
--hash=sha256:c476b5d3a34e12d40130bc2f935028b5f636df8f372dc2c1c01dc19681b2039e \
13+
--hash=sha256:fcbfeaea0be121980e15bc97b3817b5202ca73d0eae185b4550cbfce2a3ebb3d
14+
atomicwrites==1.1.5 \
15+
--hash=sha256:240831ea22da9ab882b551b31d4225591e5e447a68c5e188db5b89ca1d487585 \
16+
--hash=sha256:a24da68318b08ac9c9c45029f4a10371ab5b20e4226738e150e6e7c571630ae6
17+
attrs==18.1.0 \
18+
--hash=sha256:4b90b09eeeb9b88c35bc642cbac057e45a5fd85367b985bd2809c62b7b939265 \
19+
--hash=sha256:e0d0eb91441a3b53dab4d9b743eafc1ac44476296a2053b6ca3af0b139faf87b

peterbecom/base/test_fscache.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import os
2+
3+
from django import http
4+
from django.test import RequestFactory
5+
from django.contrib.auth.models import AnonymousUser, User
6+
7+
from peterbecom.base import fscache
8+
9+
10+
def test_path_to_fs_path(tmpfscacheroot):
11+
assert fscache.path_to_fs_path("/foo/bar") == tmpfscacheroot + "/foo/bar/index.html"
12+
13+
14+
def test_create_parents(tmpfscacheroot):
15+
fs_path = fscache.path_to_fs_path("/foo/bar")
16+
fscache.create_parents(fs_path)
17+
assert os.path.isdir(os.path.dirname(fs_path))
18+
19+
20+
def test_cache_request():
21+
request = RequestFactory().get("/")
22+
request.user = AnonymousUser()
23+
response = http.HttpResponse()
24+
assert fscache.cache_request(request, response)
25+
26+
response = http.HttpResponse(status=404)
27+
assert not fscache.cache_request(request, response)
28+
29+
request = RequestFactory().get("/", {"foo": "bar"})
30+
response = http.HttpResponse()
31+
assert not fscache.cache_request(request, response)
32+
33+
request = RequestFactory().get("/plog/edit/")
34+
request.user = AnonymousUser()
35+
response = http.HttpResponse()
36+
assert not fscache.cache_request(request, response)
37+
38+
request = RequestFactory().get("/")
39+
request.user = User()
40+
response = http.HttpResponse()
41+
assert not fscache.cache_request(request, response)
42+
43+
request = RequestFactory().get("/plog/post/ping")
44+
request.user = AnonymousUser()
45+
response = http.HttpResponse()
46+
assert not fscache.cache_request(request, response)
47+
48+
request = RequestFactory().get("/")
49+
request.user = AnonymousUser()
50+
request._fscache_disable = True
51+
response = http.HttpResponse()
52+
assert not fscache.cache_request(request, response)

peterbecom/conftest.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import tempfile
2+
3+
import pytest
4+
5+
6+
@pytest.fixture
7+
def tmpfscacheroot(settings):
8+
with tempfile.TemporaryDirectory() as tmpdir:
9+
settings.FSCACHE_ROOT = tmpdir
10+
yield tmpdir

peterbecom/plog/gfm.py

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -40,66 +40,3 @@ def pre_insert_callback(matchobj):
4040
text = re.sub(r"{gfm-extraction-([0-9a-f]{32})\}", pre_insert_callback, text)
4141

4242
return text
43-
44-
45-
# Test suite.
46-
try:
47-
from nose.tools import assert_equal
48-
except ImportError:
49-
50-
def assert_equal(a, b):
51-
assert a == b, "%r != %r" % (a, b)
52-
53-
54-
def test_single_underscores():
55-
"""Don't touch single underscores inside words."""
56-
assert_equal(gfm("foo_bar"), "foo_bar")
57-
58-
59-
def test_underscores_code_blocks():
60-
"""Don't touch underscores in code blocks."""
61-
assert_equal(gfm(" foo_bar_baz"), " foo_bar_baz")
62-
63-
64-
def test_underscores_pre_blocks():
65-
"""Don't touch underscores in pre blocks."""
66-
assert_equal(gfm("<pre>\nfoo_bar_baz\n</pre>"), "\n\n<pre>\nfoo_bar_baz\n</pre>")
67-
68-
69-
def test_pre_block_pre_text():
70-
"""Don't treat pre blocks with pre-text differently."""
71-
a = "\n\n<pre>\nthis is `a\\_test` and this\\_too\n</pre>"
72-
b = "hmm<pre>\nthis is `a\\_test` and this\\_too\n</pre>"
73-
assert_equal(gfm(a)[2:], gfm(b)[3:])
74-
75-
76-
def test_two_underscores():
77-
"""Escape two or more underscores inside words."""
78-
assert_equal(gfm("foo_bar_baz"), "foo\\_bar\\_baz")
79-
80-
81-
def test_newlines_simple():
82-
"""Turn newlines into br tags in simple cases."""
83-
assert_equal(gfm("foo\nbar"), "foo \nbar")
84-
85-
86-
def test_newlines_group():
87-
"""Convert newlines in all groups."""
88-
assert_equal(
89-
gfm("apple\npear\norange\n\nruby\npython\nerlang"),
90-
"apple \npear \norange\n\nruby \npython \nerlang",
91-
)
92-
93-
94-
def test_newlines_long_group():
95-
"""Convert newlines in even long groups."""
96-
assert_equal(
97-
gfm("apple\npear\norange\nbanana\n\nruby\npython\nerlang"),
98-
"apple \npear \norange \nbanana\n\nruby \npython \nerlang",
99-
)
100-
101-
102-
def test_newlines_list():
103-
"""Don't convert newlines in lists."""
104-
assert_equal(gfm("# foo\n# bar"), "# foo\n# bar")
105-
assert_equal(gfm("* foo\n* bar"), "* foo\n* bar")

peterbecom/plog/test_gfm.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from peterbecom.plog.gfm import gfm
2+
3+
4+
def test_single_underscores():
5+
"""Don't touch single underscores inside words."""
6+
assert gfm("foo_bar") == "foo_bar"
7+
8+
9+
def test_underscores_code_blocks():
10+
"""Don't touch underscores in code blocks."""
11+
assert gfm(" foo_bar_baz") == " foo_bar_baz"
12+
13+
14+
def test_underscores_pre_blocks():
15+
"""Don't touch underscores in pre blocks."""
16+
assert gfm("<pre>\nfoo_bar_baz\n</pre>") == "\n\n<pre>\nfoo_bar_baz\n</pre>"
17+
18+
19+
def test_pre_block_pre_text():
20+
"""Don't treat pre blocks with pre-text differently."""
21+
a = "\n\n<pre>\nthis is `a\\_test` and this\\_too\n</pre>"
22+
b = "hmm<pre>\nthis is `a\\_test` and this\\_too\n</pre>"
23+
assert gfm(a)[2:] == gfm(b)[3:]
24+
25+
26+
def test_two_underscores():
27+
"""Escape two or more underscores inside words."""
28+
assert gfm("foo_bar_baz") == "foo\\_bar\\_baz"
29+
30+
31+
def test_newlines_simple():
32+
"""Turn newlines into br tags in simple cases."""
33+
assert gfm("foo\nbar") == "foo \nbar"
34+
35+
36+
def test_newlines_group():
37+
"""Convert newlines in all groups."""
38+
assert (
39+
gfm("apple\npear\norange\n\nruby\npython\nerlang")
40+
== "apple \npear \norange\n\nruby \npython \nerlang"
41+
)
42+
43+
44+
def test_newlines_long_group():
45+
"""Convert newlines in even long groups."""
46+
assert (
47+
gfm("apple\npear\norange\nbanana\n\nruby\npython\nerlang")
48+
== "apple \npear \norange \nbanana\n\nruby \npython \nerlang"
49+
)
50+
51+
52+
def test_newlines_list():
53+
"""Don't convert newlines in lists."""
54+
assert gfm("# foo\n# bar") == "# foo\n# bar"
55+
assert gfm("* foo\n* bar") == "* foo\n* bar"

peterbecom/plog/tests.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def mocked_render(*a, **k):
4545
try:
4646
response = self.client.get(url)
4747
content = response.content.decode("utf-8")
48-
self.assertTrue(blog.title in content)
48+
assert blog.title in content
4949
assert "0 comments" in content
5050
response = self.client.get(url)
5151
content = response.content.decode("utf-8")
@@ -90,23 +90,23 @@ def test_blog_post_with_comment_approval(self):
9090
# but it hasn't been approved yet
9191
response = anonymous.get(url)
9292
content = response.content.decode("utf-8")
93-
self.assertEqual(response.status_code, 200)
94-
self.assertTrue("COMMENTX" not in content)
93+
assert response.status_code == 200
94+
assert "COMMENTX" not in content
9595

9696
# let's approve it!
9797
approve_url = reverse("approve_comment", args=[blog.oid, comment.oid])
9898
response = loggedin.post(approve_url, HTTP_X_REQUESTED_WITH="XMLHttpRequest")
99-
self.assertEqual(response.status_code, 403)
99+
assert response.status_code == 403
100100
key = OneTimeAuthKey.objects.create(blogitem=blog, blogcomment=comment).key
101101
response = loggedin.get(
102102
approve_url + "?key={}".format(key), HTTP_X_REQUESTED_WITH="XMLHttpRequest"
103103
)
104-
self.assertEqual(response.status_code, 200)
105-
self.assertEqual(response.content.decode("utf-8"), "OK")
104+
assert response.status_code == 200
105+
assert response.content.decode("utf-8") == "OK"
106106

107107
response = anonymous.get(url)
108-
self.assertEqual(response.status_code, 200)
109-
self.assertTrue("COMMENTX" in str(response.content))
108+
assert response.status_code == 200
109+
assert "COMMENTX" in str(response.content)
110110

111111
def test_preview_post(self):
112112
cat = Category.objects.create(name="MyCategory")
@@ -120,12 +120,12 @@ def test_preview_post(self):
120120
"categories[]": str(cat.pk),
121121
}
122122
response = self.client.post(url, data)
123-
self.assertEqual(response.status_code, 200)
124-
# self.assertTrue('Some &lt;script&gt; TITLE' in response.content)
123+
assert response.status_code == 200
124+
# assert 'Some &lt;script&gt; TITLE' in response.content
125125
content = response.content.decode("utf-8")
126-
self.assertTrue("This is<br" in content)
127-
self.assertTrue("<em>great</em>" in content)
128-
self.assertTrue("<code>verbatim</code>" in content)
126+
assert "This is<br" in content
127+
assert "<em>great</em>" in content
128+
assert "<code>verbatim</code>" in content
129129

130130
data[
131131
"text"
@@ -140,8 +140,8 @@ def foo():
140140

141141
response = self.client.post(url, data)
142142
content = response.content.decode("utf-8")
143-
self.assertTrue('<div class="highlight">' in content)
144-
self.assertTrue('<span class="k">def</span>' in content)
143+
assert '<div class="highlight">' in content
144+
assert '<span class="k">def</span>' in content
145145

146146
def test_old_redirects(self):
147147
blog = BlogItem.objects.create(
@@ -159,6 +159,6 @@ def test_old_redirects(self):
159159
assert response.status_code == 200
160160

161161
response = self.client.get(url, {"replypath": "foo"})
162-
self.assertEqual(response.status_code, 301)
163-
self.assertEqual(urlparse(response["location"]).path, url)
164-
self.assertTrue(not urlparse(response["location"]).query)
162+
assert response.status_code == 301
163+
assert urlparse(response["location"]).path == url
164+
assert not urlparse(response["location"]).query

peterbecom/settings/__init__.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,2 @@
1-
import sys
2-
31
from .base import * # NOQA
42
from .local import * # NOQA
5-
6-
7-
if len(sys.argv) > 1 and sys.argv[1] == "test":
8-
# Shuts up excessive logging when running tests
9-
# import logging
10-
# logging.disable(logging.WARNING)
11-
12-
from .test import * # NOQA
13-
14-
# # Are you getting full benefit from django-nose?
15-
# if not os.getenv('REUSE_DB', 'false').lower() in ('true', '1', ''):
16-
# print (
17-
# "Note!\n\tIf you want much faster tests in local development "
18-
# "consider setting the REUSE_DB=1 environment variable.\n"
19-
# )
20-
else:
21-
from .local import *

peterbecom/settings/test.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import tempfile
33

44
from django.http import Http404
5-
5+
from peterbecom.settings import * # noqa
66

77
CELERY_ALWAYS_EAGER = True
88
CELERY_EAGER_PROPAGATES_EXCEPTIONS = True
@@ -12,6 +12,8 @@
1212

1313
ES_INDEX = "test_peterbecom"
1414

15+
REDIS_URL = "redis://localhost:6379/9"
16+
1517

1618
ROLLBAR = {
1719
"enabled": False,

pytest.ini

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[pytest]
2+
DJANGO_SETTINGS_MODULE = peterbecom.settings.test
3+
norecursedirs = .git .* frontend docs htmlcov .cache
4+
addopts = -rsxX --showlocals --tb=native --no-migrations
5+
testpaths = peterbecom
6+
python_files = tests.py test_*.py *_tests.py

requirements.txt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
-c constraints.txt
2+
13
Django==2.1 \
24
--hash=sha256:ea50d85709708621d956187c6b61d9f9ce155007b496dd914fdb35db8d790aec \
35
--hash=sha256:7f246078d5a546f63c28fc03ce71f4d7a23677ce42109219c24c9ffb28416137
@@ -88,16 +90,9 @@ Unidecode==1.0.22 \
8890
requests==2.19.1 \
8991
--hash=sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1 \
9092
--hash=sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a
91-
django-nose==1.4.5 \
92-
--hash=sha256:5df2df802c607daeeab8ac1e93abf54508ed6133eb93852310f512000124b4a5 \
93-
--hash=sha256:87663f18cb25f01d56c84ac1ff8a0e6e6a6246264b2549b751cb239d0642e76a
9493
six==1.11.0 \
9594
--hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb \
9695
--hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9
97-
nose==1.3.7 \
98-
--hash=sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a \
99-
--hash=sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac \
100-
--hash=sha256:f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98
10196
amqp==2.3.2 \
10297
--hash=sha256:073dd02fdd73041bffc913b767866015147b61f2a9bc104daef172fc1a0066eb \
10398
--hash=sha256:eed41946890cd43e8dee44a316b85cf6fee5a1a34bb4a562b660a358eb529e1b
@@ -416,3 +411,9 @@ zopfli==0.1.4 \
416411
--hash=sha256:df7f84a01c0d8c8936e764e63fd0478aa526dc405ee2ad437e633b28cf824141 \
417412
--hash=sha256:ea204478f5dd4b7c03ec8a25ac5512f5cd85b15e001724289d1676a52c4c1633 \
418413
--hash=sha256:f5d7840833608f1be3a5f928dbcc0a5ff45ebd8040ea6177864f61a72b773423
414+
pytest==3.7.2 \
415+
--hash=sha256:3459a123ad5532852d36f6f4501dfe1acf4af1dd9541834a164666aa40395b02 \
416+
--hash=sha256:96bfd45dbe863b447a3054145cd78a9d7f31475d2bce6111b133c0cc4f305118
417+
pytest-django==3.4.2 \
418+
--hash=sha256:2d2e0a618d91c280d463e90bcbea9b4e417609157f611a79685b1c561c4c0836 \
419+
--hash=sha256:59683def396923b78d7e191a7086a48193f8d5db869ace79acb38f906522bc7b

0 commit comments

Comments
 (0)