Switch content tests to pytest
This commit is contained in:
parent
94c56bb468
commit
daf93dc32b
4 changed files with 42 additions and 33 deletions
13
README.md
13
README.md
|
@ -42,10 +42,15 @@ You'll need a copy of `conservancy/djangocommonsettings.py`, a file that not
|
||||||
committed to the repository that has database settings and other
|
committed to the repository that has database settings and other
|
||||||
environment-specific config.
|
environment-specific config.
|
||||||
|
|
||||||
|
To run the tests, install `pytest-django` and run pytest:
|
||||||
|
|
||||||
|
python3 -m pip install pytest-django
|
||||||
|
python3 -m pytest
|
||||||
|
|
||||||
Then run:
|
Then run:
|
||||||
|
|
||||||
python manage.py migrate
|
python3 manage.py migrate
|
||||||
python manage.py runserver
|
python3 manage.py runserver
|
||||||
|
|
||||||
There is also a Dockerfile available if that's more convenient. See that file
|
There is also a Dockerfile available if that's more convenient. See that file
|
||||||
for details.
|
for details.
|
||||||
|
@ -60,5 +65,5 @@ SystemD timer. See `systemd/conservancy-www-update.timer` for details.
|
||||||
The `migrate` and `collectstatic` commands are not run automatically. You may
|
The `migrate` and `collectstatic` commands are not run automatically. You may
|
||||||
need to run these if modifying the database schema or adding/moving static files:
|
need to run these if modifying the database schema or adding/moving static files:
|
||||||
|
|
||||||
sudo -u www-data /var/www/venv-website/bin/python manage.py migrate
|
sudo -u www-data /var/www/venv-website/bin/python3 manage.py migrate
|
||||||
sudo -u www-data /var/www/venv-website/bin/python manage.py collectstatic --link
|
sudo -u www-data /var/www/venv-website/bin/python3 manage.py collectstatic --link
|
||||||
|
|
|
@ -6,9 +6,9 @@ set -x # Show output
|
||||||
set -e # Abort on failure
|
set -e # Abort on failure
|
||||||
cd /var/www/website
|
cd /var/www/website
|
||||||
sudo -u www-data git pull
|
sudo -u www-data git pull
|
||||||
sudo -u www-data /var/www/venv-website/bin/python manage.py check
|
sudo -u www-data /var/www/venv-website/bin/python3 manage.py check
|
||||||
sudo -u www-data /var/www/venv-website/bin/python manage.py migrate
|
sudo -u www-data /var/www/venv-website/bin/python3 manage.py migrate
|
||||||
sudo -u www-data /var/www/venv-website/bin/python manage.py collectstatic -v0 --noinput --link
|
sudo -u www-data /var/www/venv-website/bin/python3 manage.py collectstatic -v0 --noinput --link
|
||||||
sudo systemctl restart apache2
|
sudo systemctl restart apache2
|
||||||
curl --silent --head https://sfconservancy.org | grep --perl-regexp "^HTTP/.+ 200"
|
curl --silent --head https://sfconservancy.org | grep --perl-regexp "^HTTP/.+ 200"
|
||||||
EOF
|
EOF
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.test import RequestFactory, TestCase
|
import pytest
|
||||||
|
from pytest_django.asserts import assertContains, assertTemplateUsed
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
from conservancy.fundgoal.models import FundraisingGoal
|
from conservancy.fundgoal.models import FundraisingGoal
|
||||||
|
|
||||||
|
|
||||||
class ContentTest(TestCase):
|
def create_fundraising_goal():
|
||||||
def setUp(self):
|
|
||||||
self.factory = RequestFactory()
|
|
||||||
FundraisingGoal.objects.create(
|
FundraisingGoal.objects.create(
|
||||||
fundraiser_code_name='cy2023-end-year-match',
|
fundraiser_code_name='cy2023-end-year-match',
|
||||||
fundraiser_goal_amount=0,
|
fundraiser_goal_amount=0,
|
||||||
|
@ -19,18 +18,23 @@ class ContentTest(TestCase):
|
||||||
fundraiser_endtime=datetime.datetime(2000, 1, 1)
|
fundraiser_endtime=datetime.datetime(2000, 1, 1)
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_about_page_served(self):
|
|
||||||
request = self.factory.get('/about/')
|
@pytest.mark.django_db
|
||||||
with self.assertTemplateUsed('about/index.html'):
|
def test_about_page_served(rf):
|
||||||
|
create_fundraising_goal()
|
||||||
|
request = rf.get('/about/')
|
||||||
|
with assertTemplateUsed('about/index.html'):
|
||||||
response = views.index(request).render()
|
response = views.index(request).render()
|
||||||
self.assertContains(response, 'Conservancy is a nonprofit organization')
|
assertContains(response, 'Conservancy is a nonprofit organization')
|
||||||
|
|
||||||
def test_annual_report_file_served(self):
|
|
||||||
request = self.factory.get('/docs/conservancy_annual-report_fy-2011.pdf')
|
def test_annual_report_file_served(rf):
|
||||||
|
request = rf.get('/docs/conservancy_annual-report_fy-2011.pdf')
|
||||||
response = views.index(request)
|
response = views.index(request)
|
||||||
self.assertEqual(response.headers['Content-Type'], 'application/pdf')
|
assert response.headers['Content-Type'] == 'application/pdf'
|
||||||
|
|
||||||
def test_path_traversal_404s(self):
|
|
||||||
request = self.factory.get('/about/../../settings.py')
|
def test_path_traversal_404s(rf):
|
||||||
with self.assertRaises(Http404):
|
request = rf.get('/about/../../settings.py')
|
||||||
|
with pytest.raises(Http404):
|
||||||
views.index(request)
|
views.index(request)
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
Django==3.2.19
|
Django==3.2.19
|
||||||
beautifulsoup4==4.11.2
|
beautifulsoup4==4.11.2
|
||||||
html5lib==1.1
|
html5lib==1.1
|
||||||
django_countries==7.3.2
|
django-countries==7.3.2
|
||||||
|
|
Loading…
Reference in a new issue