summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/TESTS/test_caves.py (renamed from core/TESTS/tests_caves.py)0
-rw-r--r--core/TESTS/test_logins.py (renamed from core/TESTS/tests_logins.py)0
-rw-r--r--core/TESTS/test_urls.py149
-rw-r--r--core/TESTS/tests.py17
-rw-r--r--url-reverse.txt41
5 files changed, 190 insertions, 17 deletions
diff --git a/core/TESTS/tests_caves.py b/core/TESTS/test_caves.py
index baa4ffa..baa4ffa 100644
--- a/core/TESTS/tests_caves.py
+++ b/core/TESTS/test_caves.py
diff --git a/core/TESTS/tests_logins.py b/core/TESTS/test_logins.py
index f50e292..f50e292 100644
--- a/core/TESTS/tests_logins.py
+++ b/core/TESTS/test_logins.py
diff --git a/core/TESTS/test_urls.py b/core/TESTS/test_urls.py
new file mode 100644
index 0000000..df34ee6
--- /dev/null
+++ b/core/TESTS/test_urls.py
@@ -0,0 +1,149 @@
+"""
+We are using unittest for troggle.
+
+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.
+
+https://docs.djangoproject.com/en/dev/topics/testing/tools/
+
+The code {% url THING %} or {% url THING PARAMETER %} appears a hundred times or more in the troggle/templates/ HTML template files.
+This is the template synstax for
+reverse('THING')
+or
+reverse('THING', args=[PARAMETER])
+
+It is the URLS which take parameters which need understanding and testing. The reverse() which take no
+parameters should be fine as this is fundamental Django stuff which will have been tested to death.
+
+But the reverse() function is purely syntactical, the PARAMETER is just a string which is applied to
+the url. So this is not testing anything important really. See the test_url_threed() below.
+
+1. No tests: No parameters
+
+{% url "caveindex" %}
+{% url "controlpanel" %}
+{% url "dataissues" %}
+{% url "dwgallfiles" %}
+{% url "dwgupload" %}
+{% url "eastings" %}
+{% url "exportlogbook" %}
+{% url "newcave" %}
+{% url "notablepersons" %}
+{% url "photoupload" %}
+{% url "walletedit" %}
+
+Tests exist:
+{% url "stats" %}
+{% url "allscans" %}
+{% url "survexcaveslist" %}
+
+2. With parameter
+
+{% url "caveQMs" "1623-290" %}
+{% url "cavewallets" cave_id %}
+{% url "dwgfilesingle" drawing.dwgpath %}
+{% url "edit_cave" cave.url_parent cave.slug %}
+{% url "editentrance" cave.slug ent.entrance.slug %}
+{% url "editexpopage" path %}
+{% url "err" title %}
+{% url "expedition" 2022 %}
+{% url "newentrance" cave.slug %}
+{% url "survexcavessingle" cavedir %}
+{% url "survexcavessingle" cavefiles.0.1 %}
+{% url "svx" cavepath %}
+{% url "svx" survexfile.path %}
+{% url "svxlog" title %}
+{% url 'caveQMs' '1623-161' %}
+{% url 'image_selector' path %}
+{% url 'new_image_form' path %}
+
+Tests exist:
+{% url "threed" title %}
+"""
+
+
+todo = """These just do {% url THING %} with no parameter, we also need tests which take a parameter
+
+- Read all this https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Testing
+
+- Read all this https://realpython.com/testing-in-django-part-1-best-practices-and-examples/
+
+- add 'coverage' to all tests
+
+- statistics also needs test when we have put data into the database
+
+"""
+
+import re
+from http import HTTPStatus
+
+from django.test import Client, TestCase
+from django.urls import reverse, path
+
+# class SimplePageTest(unittest.TestCase):
+class URLTests(TestCase):
+ """These tests may appear to be redundant, but in fact they exercise different bits of code. The urls.py
+ dispatcher is sending these URLs view via different 'view' handlers, and they all need verifying.
+ """
+
+ @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_statistics(self):
+ response = self.client.get("/statistics")
+ self.assertEqual(response.status_code, HTTPStatus.OK)
+ content = response.content.decode()
+ ph = r"0 expeditions: 0 people, 0 caves and 0 logbook entries."
+ phmatch = re.search(ph, content)
+ self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+ def test_stats(self):
+ # Needs another test with test data
+ response = self.client.get("/stats")
+ self.assertEqual(response.status_code, HTTPStatus.OK)
+ content = response.content.decode()
+ # with open('_test_response.html', 'w') as f:
+ # f.write(content)
+ ph = r"Total length: 0.0 km adding up the total for each year."
+ phmatch = re.search(ph, content)
+ self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+ def test_url_stats(self):
+ """Test the {% url "stats" %} reverse resolution
+ path('statistics', statistics.stats, name="stats"),
+ path('stats', statistics.stats, name="stats"),
+ """
+ reversed_url = reverse('stats') # NB _ must be written as - if present in name
+ self.assertEqual(reversed_url, "/stats")
+
+ def test_url_allscans(self):
+ """Test the {% url "allscans" %} reverse resolution
+ path('survey_scans/', allscans, name="allscans"), # all the scans in all wallets
+ """
+ reversed_url = reverse('allscans') # NB _ must be written as - if present in name
+ self.assertEqual(reversed_url, "/survey_scans/")
+
+ def test_url_survexcaveslist(self):
+ """Test the {% url "allscans" %} reverse resolution
+ path('survexfile/caves', survex.survexcaveslist, name="survexcaveslist"),
+ path('survexfile/caves/', survex.survexcaveslist, name="survexcaveslist"), # auto slash not working
+ """
+ reversed_url = reverse('survexcaveslist') # NB _ must be written as - if present in name
+ self.assertEqual(reversed_url, "/survexfile/caves/")
+
+ def test_url_threed(self):
+ """Test the {% url "threed" %} reverse resolution
+ path('survexfile/<path:survex_file>.3d', survex.threed, name="threed"),
+ """
+ reversed_url = reverse('threed', args=['zilch']) # NB _ must be written as - if present in name
+ self.assertEqual(reversed_url, "/survexfile/zilch.3d")
+
diff --git a/core/TESTS/tests.py b/core/TESTS/tests.py
index fc6f12b..e5c4349 100644
--- a/core/TESTS/tests.py
+++ b/core/TESTS/tests.py
@@ -476,23 +476,6 @@ class PageTests(TestCase):
self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
- def test_statistics(self):
- response = self.client.get("/statistics")
- self.assertEqual(response.status_code, HTTPStatus.OK)
- content = response.content.decode()
- ph = r"0 expeditions: 0 people, 0 caves and 0 logbook entries."
- phmatch = re.search(ph, content)
- self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
-
- def test_stats(self):
- # Needs another test with test data
- response = self.client.get("/stats")
- self.assertEqual(response.status_code, HTTPStatus.OK)
- content = response.content.decode()
- ph = r"Total length: 0.0 km adding up the total for each year."
- phmatch = re.search(ph, content)
- self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
-
def test_dataissues(self):
# Needs another test with test data
response = self.client.get("/dataissues")
diff --git a/url-reverse.txt b/url-reverse.txt
new file mode 100644
index 0000000..18e595c
--- /dev/null
+++ b/url-reverse.txt
@@ -0,0 +1,41 @@
+Create TESTs for all these reverse-match href values.
+Philip
+2023-03-12
+
+1. No parameters
+
+{% url "walletedit" %}
+{% url "allscans" %}
+{% url "caveindex" %}
+{% url "controlpanel" %}
+{% url "dataissues" %}
+{% url "dwgallfiles" %}
+{% url "dwgupload" %}
+{% url "eastings" %}
+{% url "exportlogbook" %}
+{% url "newcave" %}
+{% url "notablepersons" %}
+{% url "photoupload" %}
+{% url "stats" %}
+{% url "survexcaveslist" %}
+
+2. With parameter
+
+{% url "caveQMs" "1623-290" %}
+{% url "cavewallets" cave_id %}
+{% url "dwgfilesingle" drawing.dwgpath %}
+{% url "edit_cave" cave.url_parent cave.slug %}
+{% url "editentrance" cave.slug ent.entrance.slug %}
+{% url "editexpopage" path %}
+{% url "err" title %}
+{% url "expedition" 2022 %}
+{% url "newentrance" cave.slug %}
+{% url "survexcavessingle" cavedir %}
+{% url "survexcavessingle" cavefiles.0.1 %}
+{% url "svx" cavepath %}
+{% url "svx" survexfile.path %}
+{% url "svxlog" title %}
+{% url "threed" title %}
+{% url 'caveQMs' '1623-161' %}
+{% url 'image_selector' path %}
+{% url 'new_image_form' path %}