From eb923af44ffc9046349c5b523a3e443b930a847a Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Sun, 19 Jul 2020 01:23:07 +0100 Subject: [PATCH] webpage tests created (no database) --- core/TESTS/tests.py | 69 +++++++++++++++++++++++++++++++++++++++++++-- helper/__init__.py | 5 +++- localsettingsWSL.py | 2 +- 3 files changed, 72 insertions(+), 4 deletions(-) diff --git a/core/TESTS/tests.py b/core/TESTS/tests.py index a433e02..a0517db 100644 --- a/core/TESTS/tests.py +++ b/core/TESTS/tests.py @@ -10,8 +10,9 @@ https://docs.python.org/3.8/library/doctest.html https://docs.djangoproject.com/en/3.0/topics/testing/tools/ """ - -from django.test import TestCase, SimpleTestCase +import unittest +import re +from django.test import TestCase, SimpleTestCase, Client class SimpleTest(SimpleTestCase): def test_basic_addition(self): @@ -53,6 +54,8 @@ class SimpleTest(SimpleTestCase): from troggle.core.models_caves import CaveSlug, Cave, CaveAndEntrance, QM, CaveDescription, EntranceSlug, Entrance, Area, SurvexStation from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, VersionControlCommentForm, EntranceForm, EntranceLetterForm from troggle.helper import login_required_if_public + from django.contrib.auth.decorators import login_required + from django.conf import settings def test_import_parses_mix(self): from troggle.parsers.logbooks import GetCaveLookup import troggle.settings @@ -71,6 +74,68 @@ class SimpleTest(SimpleTestCase): from django.http import HttpResponse from django.urls import reverse +#class SimplePageTest(unittest.TestCase): +class PageTests(TestCase): + @classmethod + def setUpTestData(cls): + # Set up data for the whole TestCase + #cls.foo = Foo.objects.create(bar="Test") + # Some test using self.foo in tests below.. + # read in some SQL ? + pass + + def setUp(self): + # Every test needs a client. + self.client = Client() + + def test_page_admin(self): + # Issue a GET request. + response = self.client.get('/admin/login/') + content = response.content.decode() + self.assertEqual(response.status_code, 200) + h1 = re.search(r'

Troggle administration

', content) + + def test_page_folk(self): + # This page is separately generated, so it has the full data content + response = self.client.get('/folk/') + content = response.content.decode() + self.assertEqual(response.status_code, 200) + # Check that the rendered context has the correct title + phrase = re.search(r'active contribution to the expedition', content) + phrase = re.search(r'Naomi Griffiths', content) + phrase = re.search(r'Gail Smith', content) + phrase = re.search(r'Phil Wigglesworth', content) + phrase = re.search(r'A more obscure record of longest gap between expos has', content) + + def test_page_expofile(self): + # Flat file tests. + response = self.client.get('/expofiles/documents/surveying/tunnel-loefflerCP35-only.pdf') + self.assertEqual(response.status_code, 200) + self.assertEqual(len(response.content), 2299270) + response = self.client.get('/expofiles/writeups/1982/logbook1982.pdf') + self.assertEqual(response.status_code, 200) + self.assertEqual(len(response.content), 12915413) + + + def test_page_ss(self): + # this gets an empty page as the database has not been loaded + response = self.client.get('/survey_scans/') + self.assertEqual(response.status_code, 200) + + #response = self.client.get('/survey_scans/1991surveybook/page0002.png') + #response = self.client.get('/survey_scans/1991surveybook/') + #content = response.content.decode() + #print(content) + #png93 = re.search(r'/page0093.png">page0093.png', content) + + + def test_page_tunnel(self): + # this fails as the database has not been loaded so there is no Tunnel file + #response = self.client.get('/tunneldataraw/107/107sketch-v2.xml') + response = self.client.get('/tunneldataraw/') + self.assertEqual(response.status_code, 200) + + __test__ = {"doctest": """ Another way to test that 1 + 1 is equal to 2. diff --git a/helper/__init__.py b/helper/__init__.py index 120be20..687b370 100644 --- a/helper/__init__.py +++ b/helper/__init__.py @@ -1,6 +1,9 @@ from django.contrib.auth.decorators import login_required from django.conf import settings - +"""This enforces the login requirement for non-public pages using +the decorator mechanism. +https://www.fullstackpython.com/django-contrib-auth-decorators-login-required-examples.html +""" class login_required_if_public(object): diff --git a/localsettingsWSL.py b/localsettingsWSL.py index 0034fdd..a91085d 100644 --- a/localsettingsWSL.py +++ b/localsettingsWSL.py @@ -42,7 +42,7 @@ MEDIA_URL = '/site_media/' #STATIC_ROOT removed after merging content into MEDIA_ROOT. See urls.py & core/views_surveys.py -PUBLIC_SITE = False +PUBLIC_SITE = True DEBUG = True # executables: