import datetime from django.conf import settings from django.http import Http404 import pytest from pytest_django.asserts import assertContains from . import views from conservancy.fundgoal.models import FundraisingGoal def create_fundraising_goal(): FundraisingGoal.objects.create( fundraiser_code_name='cy2023-end-year-match', fundraiser_goal_amount=0, fundraiser_so_far_amount=0, fundraiser_donation_count=0, fundraiser_donation_count_disclose_threshold=0, fundraiser_endtime=datetime.datetime(2000, 1, 1) ) # Simple smoke tests to make sure the essential pages on the site are working. get_200_ok_test_data = [ '/', '/news/', '/blog/', '/sustainer/', ] @pytest.mark.parametrize('url', get_200_ok_test_data) @pytest.mark.django_db def test_get_200_ok(url, client): response = client.get(url) assert response.status_code == 200 # Tests for the template/file content serving functionality. @pytest.mark.django_db def test_about_page_served(rf): create_fundraising_goal() request = rf.get('/about/') response = views.content(request) assertContains(response, 'Conservancy is a nonprofit organization') def test_annual_report_file_served(rf): request = rf.get('/projects/apply/ConservancyFSATemplate.pdf') response = views.content(request) assert response.headers['Content-Type'] == 'application/pdf' def test_path_traversal_404s(rf): # Will work in development only assert (settings.BASE_DIR / 'content' / 'about/../../../conservancy-website.sqlite3').exists() request = rf.get('/about/../../../conservancy-website.sqlite3') with pytest.raises(Http404): views.content(request)