From 1e90f10d8670baffdee9e53b51c89f612717ea4e Mon Sep 17 00:00:00 2001 From: Sarah Withee <2601974+geekygirlsarah@users.noreply.github.com> Date: Sat, 27 Dec 2025 15:47:11 -0500 Subject: [PATCH] Add tests around Compare/Reference page visit logging --- web/tests/test_views.py | 55 +++++++++++++++++++++++++++++++++++++++++ web/views.py | 27 +++++++++++++++++--- 2 files changed, 78 insertions(+), 4 deletions(-) diff --git a/web/tests/test_views.py b/web/tests/test_views.py index 6cc7872b..2474ef98 100644 --- a/web/tests/test_views.py +++ b/web/tests/test_views.py @@ -3,6 +3,7 @@ from django.test import TestCase from django.urls import reverse +from web.models import LookupData class TestViews(TestCase): @@ -301,4 +302,58 @@ def test_concepts_view_legacy_params(self): self.assertEqual(response.status_code, HTTPStatus.OK) self.assertTemplateUsed(response, 'concepts.html') + def test_concepts_view_logging(self): + """test if the concepts view correctly logs to the database""" + # test single language + url = reverse('index') + '?concept=data_types&lang=python%3B3' + self.client.get(url) + lookup = LookupData.objects.last() + self.assertEqual(lookup.language1, 'python') + self.assertEqual(lookup.version1, '3') + self.assertEqual(lookup.language2, '') + self.assertEqual(lookup.version2, '') + self.assertEqual(lookup.structure, 'data_types') + + # test two languages + url = reverse('index') + '?concept=data_types&lang=python%3B3&lang=javascript%3BECMAScript%202023' + self.client.get(url) + lookup = LookupData.objects.last() + self.assertEqual(lookup.language1, 'python') + self.assertEqual(lookup.version1, '3') + self.assertEqual(lookup.language2, 'javascript') + self.assertEqual(lookup.version2, 'ECMAScript 2023') + self.assertEqual(lookup.structure, 'data_types') + + def test_api_logging(self): + """test if the API calls correctly log to the database""" + # test api_reference + url = reverse('api.reference', kwargs={ + 'structure_key': 'data_types', + 'lang': 'python', + 'version': '3' + }) + self.client.get(url) + lookup = LookupData.objects.last() + self.assertEqual(lookup.language1, 'python') + self.assertEqual(lookup.version1, '3') + self.assertEqual(lookup.language2, '') + self.assertEqual(lookup.version2, '') + self.assertEqual(lookup.structure, 'data_types') + + # test api_compare + url = reverse('api.compare', kwargs={ + 'structure_key': 'data_types', + 'lang1': 'python', + 'version1': '3', + 'lang2': 'javascript', + 'version2': 'ECMAScript 2009' + }) + self.client.get(url) + lookup = LookupData.objects.last() + self.assertEqual(lookup.language1, 'python') + self.assertEqual(lookup.version1, '3') + self.assertEqual(lookup.language2, 'javascript') + self.assertEqual(lookup.version2, 'ECMAScript 2009') + self.assertEqual(lookup.structure, 'data_types') + diff --git a/web/views.py b/web/views.py index 0514efb7..062f0f03 100644 --- a/web/views.py +++ b/web/views.py @@ -432,18 +432,27 @@ def api_reference(request, structure_key, lang, version): :param version: version :return: HttpResponse filled template of concept """ - store_url_info(request) + visit = store_url_info(request) - lang = Language(lang, "") + lang_obj = Language(lang, "") try: - response = lang.load_filled_concepts(structure_key, version) + response = lang_obj.load_filled_concepts(structure_key, version) except Exception as e: return error_handler_404_not_found(request, e) if response is False: return HttpResponseNotFound() + store_lookup_info( + request, + visit, + lang, + version, + "", + "", + structure_key + ) return HttpResponse(response, content_type="application/json") @@ -459,11 +468,21 @@ def api_compare(request, structure_key, lang1, version1, lang2, version2): :param version2: version 2 :return: HttpResponse response """ - store_url_info(request) + visit = store_url_info(request) response = Language(lang1, "").load_comparison(structure_key, lang2, version2, version1) if response is False: return HttpResponseNotFound() + store_lookup_info( + request, + visit, + lang1, + version1, + lang2, + version2, + structure_key + ) + return HttpResponse(response, content_type="application/json")