Files @ 97b60b44f50d
Branch filter:

Location: website/conservancy/tests.py

bsturmfels
Add some basic 200 OK smoke tests for key pages
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)