From 7e66c2be500f7e4040097dd0b252d823e1d2fda0 Mon Sep 17 00:00:00 2001 From: "David (aider)" Date: Tue, 3 Sep 2024 18:25:20 +0200 Subject: [PATCH] feat: add unit tests for URL tracker functions --- frappe/tests/test_utils.py | 55 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/frappe/tests/test_utils.py b/frappe/tests/test_utils.py index d88489d9b3..9e795630f3 100644 --- a/frappe/tests/test_utils.py +++ b/frappe/tests/test_utils.py @@ -22,6 +22,7 @@ from frappe.installer import parse_app_name from frappe.model.document import Document from frappe.tests.utils import FrappeTestCase, MockedRequestTestCase, change_settings from frappe.utils import ( + add_trackers_to_url, ceil, dict_to_str, evaluate_filters, @@ -35,7 +36,9 @@ from frappe.utils import ( get_site_info, get_sites, get_url, + map_trackers, money_in_words, + parse_and_map_trackers_from_url, parse_timedelta, random_string, remove_blanks, @@ -1349,3 +1352,55 @@ class TestCrypto(FrappeTestCase): sha256_hash(b"The quick brown fox jumps over the lazy dog"), "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592", ) + + +class TestURLTrackers(FrappeTestCase): + def test_add_trackers_to_url(self): + url = "https://example.com" + source = "test_source" + campaign = "test_campaign" + medium = "test_medium" + content = "test_content" + + with patch("frappe.db.get_value") as mock_get_value: + mock_get_value.side_effect = lambda *args: args[1] # Return unslugged input value + result = add_trackers_to_url(url, source, campaign, medium, content) + + expected = "https://example.com?utm_source=test_source&utm_medium=test_medium&utm_campaign=test_campaign&utm_content=test_content" + self.assertEqual(result, expected) + + def test_parse_and_map_trackers_from_url(self): + url = "https://example.com?utm_source=test_source&utm_medium=test_medium&utm_campaign=test_campaign&utm_content=test_content" + + with patch("frappe.db.get_value") as mock_get_value: + mock_get_value.return_value = None # Simulate no existing records + result = parse_and_map_trackers_from_url(url) + + expected = { + "utm_source": "test_source", + "utm_medium": "test_medium", + "utm_campaign": "test_campaign", + "utm_content": "test_content", + } + self.assertEqual(result, expected) + + def test_map_trackers(self): + url_trackers = { + "utm_source": "test_source", + "utm_medium": "test_medium", + "utm_campaign": "test_campaign", + "utm_content": "test_content", + } + + result = map_trackers(url_trackers, create=True) + + expected = { + "utm_source": frappe.get_doc("UTM Source", "test_source"), + "utm_medium": frappe.get_doc("UTM Medium", "test_medium"), + "utm_campaign": frappe.get_doc("UTM Campaign", "test_campaign"), + "utm_content": "test_content", + } + self.assertDocumentEqual(result["utm_source"], expected["utm_source"]) + self.assertDocumentEqual(result["utm_medium"], expected["utm_medium"]) + self.assertDocumentEqual(result["utm_campaign"], expected["utm_campaign"]) + self.assertEqual(result["utm_content"], expected["utm_content"])