diff --git a/core/TESTS/test_parsers.py b/core/TESTS/test_parsers.py index 85869d3..44b9d8a 100644 --- a/core/TESTS/test_parsers.py +++ b/core/TESTS/test_parsers.py @@ -21,6 +21,7 @@ https://docs.djangoproject.com/en/dev/topics/testing/tools/ import re import subprocess import unittest +from http import HTTPStatus from django.test import Client, SimpleTestCase, TestCase @@ -99,4 +100,28 @@ class ImportTest(TestCase): for e in expected: self.assertIn(e, messages) for e in not_expected: - self.assertNotIn(e, messages) \ No newline at end of file + self.assertNotIn(e, messages) + + def test_aliases(self): + # Needs another test with test data + response = self.client.get(f"/aliases/{TEST_YEAR}") + self.assertEqual(response.status_code, HTTPStatus.OK) + content = response.content.decode() + with open('_test_response.html', 'w') as f: + f.write(content) + ph = f"'fsmartarse'" + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'") + + + def test_people(self): + # Needs another test with test data + response = self.client.get("/people") + self.assertEqual(response.status_code, HTTPStatus.OK) + content = response.content.decode() + with open('_test_response.html', 'w') as f: + f.write(content) + ph = f"{TEST_YEAR}" + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'") + \ No newline at end of file diff --git a/core/TESTS/tests.py b/core/TESTS/tests.py index c663df6..fc6f12b 100644 --- a/core/TESTS/tests.py +++ b/core/TESTS/tests.py @@ -476,6 +476,71 @@ 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") + self.assertEqual(response.status_code, HTTPStatus.OK) + content = response.content.decode() + ph = r"as well as these import/parsing issues" + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'") + + def test_therionissues(self): + # Needs another test with test data + response = self.client.get("/therionissues") + self.assertEqual(response.status_code, HTTPStatus.OK) + content = response.content.decode() + ph = r"! Un-parsed image filename" + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'") + + def test_surveximport(self): + # Needs another test with test data + response = self.client.get("/surveximport") + self.assertEqual(response.status_code, HTTPStatus.OK) + content = response.content.decode() + # with open('_test_response.html', 'w') as f: + # f.write(content) + ph = r"The number at the left-hand margin is the depth" + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'") + + def test_survexdebug(self): + # Needs another test with test data + response = self.client.get("/survexdebug") + self.assertEqual(response.status_code, HTTPStatus.OK) + content = response.content.decode() + ph = r"Running list of warnings during import" + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'") + + def test_eastings(self): + # Needs another test with test data + response = self.client.get("/eastings") + self.assertEqual(response.status_code, HTTPStatus.OK) + content = response.content.decode() + ph = r"Survex Stationxy" + phmatch = re.search(ph, content) + self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'") + + # ADD TESTS when we are redirecting /expofiles/ to get the actual files using e.g. # import requests # page = requests.get("http://dataquestio.github.io/web-scraping-pages/simple.html") diff --git a/parsers/survex.py b/parsers/survex.py index 838b47e..4a4cb85 100644 --- a/parsers/survex.py +++ b/parsers/survex.py @@ -1849,7 +1849,7 @@ class LoadingSurvex: Path(svxpath).parent if not svxpath.is_file(): - message = f' ! BAD survex file "{fullpath}" specified in *include in {calledpath} ' + message = f' ! BAD. "{fullpath}" is not a file, specified in *include in {calledpath} ' stash_data_issue(parser="survex", message=message) print(message) return @@ -2033,8 +2033,6 @@ def FindAndLoadSurvex(survexblockroot): svx_scan.svxfileslist = [] # free memory svx_scan = None # Hmm. Does this actually delete all the instance variables if they are lists, dicts etc.? - print(f" - RunSurvexIfNeeded cavern on '{fullpathtotop}'", file=sys.stderr) - omit_scan.RunSurvexIfNeeded(fullpathtotop, fullpathtotop) omit_scan.check_unique_name(fullpathtotop) omit_scan.uniquefile[unseensroot] = ["0"] @@ -2130,6 +2128,45 @@ def FindAndLoadSurvex(survexblockroot): return legsnumber +def parse_one_file(fpath): # --------------------------------------in progress------------------- + """Parse just one file. Use when re-loading after editing. + NB careful of *include lines, which may exist! Ignore them. + """ + print("\n - Loading One Survex file (LinearLoad)", file=sys.stderr) + svx_load = LoadingSurvex() + + omitsfileroot = MakeOmitFileRoot(fpath) # NO! This always creats a SurvexFile object. We are overwriting one.. + survexomitsroot = SurvexBlock( + name=OMITBLOCK, survexpath="", survexfile=omitsfileroot, legsall=0, legslength=0.0 + ) + survexomitsroot.save() + # SurvexBlock.objects.all().delete() + # SurvexFile.objects.all().delete() + # SurvexDirectory.objects.all().delete() + # SurvexPersonRole.objects.all().delete() + # SurvexStation.objects.all().delete() + print(" - Loading Survex Blocks...") + + svx_load.survexdict[survexfileroot.survexdirectory] = [] + svx_load.survexdict[survexfileroot.survexdirectory].append(survexfileroot) + svx_load.svxdirs[""] = survexfileroot.survexdirectory + + # ---------------------------------------------------------------- + svx_load.LinearLoad(survexblockroot, survexfileroot.path, collatefilename) + # ---------------------------------------------------------------- + + legsnumber = svx_load.legsnumber + + print(f" - Number of SurvexDirectories: {len(svx_load.survexdict):,}") + tf = 0 + for d in svx_load.survexdict: + tf += len(svx_load.survexdict[d]) + print(f" - Number of SurvexFiles: {tf:,}") + print(f" - Number of Survex legs: {legsnumber:,}") + + # Now set Django SurvexFile object.. + + svx_load = None def MakeSurvexFileRoot(): """Returns a file_object.path = SURVEX_TOPNAME associated with directory_object.path = SURVEX_DATA"""