diff --git a/core/TESTS/tests.py b/core/TESTS/tests.py index 22b6249..8fdc581 100644 --- a/core/TESTS/tests.py +++ b/core/TESTS/tests.py @@ -1,12 +1,20 @@ """ We are using unittest for troggle. -This file demonstrates two different styles of tests (one doctest and one -unittest). These will both pass when you run "manage.py test". +Note that the database has not been parsed from the source files when these tests are run, +so any path that relies on data being in the database will fail. -Replace these with more appropriate tests for your application. +The simple redirections to files which exist, e.g. in +/expoweb/ +/expofiles/ +/expofiles/documents/ +etc. will test fine. + +But paths like this: +/survey_scans/ +which rely on database resolution will fail unless a fixture has been set up for +them. -https://docs.python.org/3.8/library/doctest.html https://docs.djangoproject.com/en/3.0/topics/testing/tools/ """ @@ -20,6 +28,9 @@ class SimpleTest(SimpleTestCase): Tests that 1 + 1 always equals 2. """ self.assertEqual(1 + 1, 2) + def test_test_setting(self): + from django.conf import settings + self.assertEqual(settings.EMAIL_BACKEND, 'django.core.mail.backends.locmem.EmailBackend') def test_import_TroggleModel(self): from troggle.core.models import TroggleModel def test_import_Cave(self): @@ -98,41 +109,63 @@ class PageTests(TestCase): # Every test needs a client. self.client = Client() + def test_page_admin(self): - # Issue a GET request. + # see the login page 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_admindocs(self): - # Issue a GET request. - response = self.client.get('/admin/login/models/') + response = self.client.get('/admin/login/models/') content = response.content.decode() self.assertEqual(response.status_code, 200) h1 = re.search(r'

Model documentation

', content) - # database not loaded yet? Or logon-problem? - # def test_page_admindocs_exped(self): - # # Issue a GET request. - # response = self.client.get('/admin/doc/models/core.expedition/') - # content = response.content.decode() - # self.assertEqual(response.status_code, 200) - # h1 = re.search(r'logbookentry_set.all', content) + def test_page_admindocs_exped(self): + # Get redirected to login page + response = self.client.get('/admin/doc/models/core.expedition/') + content = response.content.decode() + self.assertEqual(response.status_code, 302) + h1 = re.search(r'logbookentry_set.all', content) + + def test_page_expofiles_dir(self): + # Flat file tests. + response = self.client.get('/expofiles/') + self.assertEqual(response.status_code, 200) + content = response.content.decode() + for ph in [ r'a href="/expofiles/geotiffsurveys">/geotiffsurveys/', + r'/photos/', + r'/surveyscans' ]: + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'") + + def test_page_survey_scans_dir(self): + # Flat file tests. + response = self.client.get('/expofiles/surveyscans') + self.assertEqual(response.status_code, 200) + content = response.content.decode() + for ph in [ r'/2004/', + r'/1989LUSS/', + r'/2018' ]: + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'") 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() + 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) + for ph in [ r'involves some active contribution', + r'Naomi Griffiths', + r'Gail Smith', + r'Phil Wigglesworth', + r'A more obscure record of longest gap between expos has' ]: + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'") - def test_page_expofile_document(self): + def test_page_expofile_document_loeffler_pdf(self): # Flat file tests. response = self.client.get('/expofiles/documents/surveying/tunnel-loefflerCP35-only.pdf') if response.status_code != 200: @@ -141,6 +174,24 @@ class PageTests(TestCase): self.assertEqual(response.status_code, 200) self.assertEqual(len(response.content), 2299270) # fails, but is working manually! + def test_page_expofile_document_rope_pdf(self): + # Flat file tests. + response = self.client.get('/expofiles/documents/rope-age-agm-2019.pdf') + if response.status_code != 200: + self.assertEqual(response.status_code, 302) + if response.status_code != 302: + self.assertEqual(response.status_code, 200) + self.assertEqual(len(response.content), 76197) # fails, but is working manually! + + def test_page_expofile_document_png(self): + # Flat file tests. + response = self.client.get('/expofiles/documents/callout-2012.png') + if response.status_code != 200: + self.assertEqual(response.status_code, 302) + if response.status_code != 302: + self.assertEqual(response.status_code, 200) + self.assertEqual(len(response.content), 69921) # fails, but is working manually! + def test_page_expofile_writeup(self): # Flat file tests. response = self.client.get('/expofiles/writeups/1982/logbook1982.pdf') @@ -150,12 +201,63 @@ class PageTests(TestCase): self.assertEqual(response.status_code, 200) self.assertEqual(len(response.content), 12915413) # fails, but is working manually! - - def test_page_ss(self): + def test_page_survey_scans_empty(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) - + content = response.content.decode() + ph = r'contains the scanned original in-cave survey notes and sketches' + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'") + + def test_page_tunneldataraw_empty(self): + # this gets an empty page as the database has not been loaded + response = self.client.get('/tunneldataraw/') + self.assertEqual(response.status_code, 200) + content = response.content.decode() + ph = r'

Page not found tunneldataraw/

' + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'") + + def test_not_found_survexfile_cave(self): + response = self.client.get('/survexfile/not_a_real_cave_number') + self.assertEqual(response.status_code, 200) + content = response.content.decode() + ph = r'Cave not found in database' + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'") + + +# these need a fixture to load the datbase before they will pass +# we also need tests for invalid queries to check that error pages are right + + # def test_page_survey_scans_khplan2_png(self): + # # this has an error as the database has not been loaded yet in the tests + # response = self.client.get('/survey_scans/smkhs/khplan2.png') + # if response.status_code != 200: + # self.assertEqual(response.status_code, 302) + # if response.status_code != 302: + # self.assertEqual(response.status_code, 200) + # self.assertEqual(len(response.content), 823304) # fails, but is working manually! + + # def test_page_tunneldataraw_107sketch_xml(self): + # # this has an error as the database has not been loaded yet in the tests + # response = self.client.get('/tunneldataraw/107/107sketch-v2.xml') + # if response.status_code != 200: + # self.assertEqual(response.status_code, 302) + # if response.status_code != 302: + # self.assertEqual(response.status_code, 200) + # content = response.content.decode() + # for ph in [ r'tunneldate="2014-08-21 11:34:00"', + # r'', + # r'sfsketch="ollyjen107drawings', + # r'sfsketch="surveyscans/2014/2014#01', + # r'aa-js-plan.png"' ]: + # phmatch = re.search(ph, content) + # self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'") + + + # database not loaded yet: #response = self.client.get('/survey_scans/1991surveybook/page0002.png') #response = self.client.get('/survey_scans/1991surveybook/') @@ -164,17 +266,4 @@ class PageTests(TestCase): #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. - ->>> 1 + 1 == 2 -True -"""}