Switch content tests to pytest

This commit is contained in:
Ben Sturmfels 2024-03-13 14:26:01 +11:00
parent 94c56bb468
commit daf93dc32b
Signed by: bsturmfels
GPG key ID: 023C05E2C9C068F0
4 changed files with 42 additions and 33 deletions

View file

@ -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

View file

@ -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

View file

@ -1,36 +1,40 @@
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): FundraisingGoal.objects.create(
self.factory = RequestFactory() fundraiser_code_name='cy2023-end-year-match',
FundraisingGoal.objects.create( fundraiser_goal_amount=0,
fundraiser_code_name='cy2023-end-year-match', fundraiser_so_far_amount=0,
fundraiser_goal_amount=0, fundraiser_donation_count=0,
fundraiser_so_far_amount=0, fundraiser_donation_count_disclose_threshold=0,
fundraiser_donation_count=0, fundraiser_endtime=datetime.datetime(2000, 1, 1)
fundraiser_donation_count_disclose_threshold=0, )
fundraiser_endtime=datetime.datetime(2000, 1, 1)
)
def test_about_page_served(self):
request = self.factory.get('/about/')
with self.assertTemplateUsed('about/index.html'):
response = views.index(request).render()
self.assertContains(response, 'Conservancy is a nonprofit organization')
def test_annual_report_file_served(self): @pytest.mark.django_db
request = self.factory.get('/docs/conservancy_annual-report_fy-2011.pdf') def test_about_page_served(rf):
response = views.index(request) create_fundraising_goal()
self.assertEqual(response.headers['Content-Type'], 'application/pdf') request = rf.get('/about/')
with assertTemplateUsed('about/index.html'):
response = views.index(request).render()
assertContains(response, 'Conservancy is a nonprofit organization')
def test_path_traversal_404s(self):
request = self.factory.get('/about/../../settings.py') def test_annual_report_file_served(rf):
with self.assertRaises(Http404): request = rf.get('/docs/conservancy_annual-report_fy-2011.pdf')
views.index(request) response = views.index(request)
assert response.headers['Content-Type'] == 'application/pdf'
def test_path_traversal_404s(rf):
request = rf.get('/about/../../settings.py')
with pytest.raises(Http404):
views.index(request)

View file

@ -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