From 4e8967193f5e999fa2e360d99ba8e05b84e387c7 Mon Sep 17 00:00:00 2001 From: zainab Date: Thu, 24 Nov 2022 14:37:49 +0300 Subject: [PATCH 1/4] feat: add optional validation --- tinylinks/detaults.py | 8 ++++++++ tinylinks/models.py | 6 +++++- tinylinks/tests/tests.py | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tinylinks/detaults.py b/tinylinks/detaults.py index 0fccd93..34a7f1a 100644 --- a/tinylinks/detaults.py +++ b/tinylinks/detaults.py @@ -1 +1,9 @@ +from django.conf import settings + DEFAULT_ALLOWED_URL_SCHEMES = ("http", "https", "ftp") +VALIDATION_ENABLED = False + +try: + VALIDATION_ENABLED = settings.VALIDATION_ENABLED +except: + pass diff --git a/tinylinks/models.py b/tinylinks/models.py index 44da01f..8478f42 100644 --- a/tinylinks/models.py +++ b/tinylinks/models.py @@ -11,6 +11,7 @@ from urllib3 import PoolManager from urllib3.exceptions import HTTPError, MaxRetryError, TimeoutError + User = get_user_model() @@ -40,12 +41,15 @@ def get_url_response(pool, link, url): return response -def validate_long_url(link): +def validate_long_url(link, force_validation=False): """ Function to validate a URL. The validator uses urllib3 to test the URL's availability. """ + from tinylinks.detaults import VALIDATION_ENABLED + if not VALIDATION_ENABLED and not force_validation: + return link http = PoolManager() response = get_url_response(http, link, link.long_url) if response and response.status == 200: diff --git a/tinylinks/tests/tests.py b/tinylinks/tests/tests.py index 4ee2500..1565bc8 100644 --- a/tinylinks/tests/tests.py +++ b/tinylinks/tests/tests.py @@ -468,7 +468,7 @@ def test_validate_long_url_server_code_with_broken_link(self, mock_fn): def test_validate_long_url_with_error(self, mock_fn): response = Mock() mock_fn.return_value = response - validate_long_url(self.link) + validate_long_url(self.link, True) self.assertEqual(self.link.validation_error, "URL not accessible.") def test_can_not_be_validated(self): From f6f849da69ed761a190707980630f9355c4b7fff Mon Sep 17 00:00:00 2001 From: zainab Date: Sun, 27 Nov 2022 12:53:09 +0300 Subject: [PATCH 2/4] refactor: refactor setting name, add tests --- tinylinks/detaults.py | 7 +++---- tinylinks/models.py | 4 ++-- tinylinks/tests/tests.py | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/tinylinks/detaults.py b/tinylinks/detaults.py index 34a7f1a..75bb723 100644 --- a/tinylinks/detaults.py +++ b/tinylinks/detaults.py @@ -1,9 +1,8 @@ from django.conf import settings DEFAULT_ALLOWED_URL_SCHEMES = ("http", "https", "ftp") -VALIDATION_ENABLED = False try: - VALIDATION_ENABLED = settings.VALIDATION_ENABLED -except: - pass + TINYLINK_VALIDATION_ENABLED = settings.TINYLINK_VALIDATION_ENABLED +except AttributeError: + TINYLINK_VALIDATION_ENABLED = False diff --git a/tinylinks/models.py b/tinylinks/models.py index 8478f42..1fa6d08 100644 --- a/tinylinks/models.py +++ b/tinylinks/models.py @@ -47,8 +47,8 @@ def validate_long_url(link, force_validation=False): availability. """ - from tinylinks.detaults import VALIDATION_ENABLED - if not VALIDATION_ENABLED and not force_validation: + from tinylinks.detaults import TINYLINK_VALIDATION_ENABLED + if not TINYLINK_VALIDATION_ENABLED and not force_validation: return link http = PoolManager() response = get_url_response(http, link, link.long_url) diff --git a/tinylinks/tests/tests.py b/tinylinks/tests/tests.py index 1565bc8..aaa2f63 100644 --- a/tinylinks/tests/tests.py +++ b/tinylinks/tests/tests.py @@ -481,6 +481,21 @@ def test_can_be_validated(self, mock_fn): ) self.assertEqual(True, self.link.can_be_validated()) + @patch("tinylinks.models.get_url_response") + def test_validate_long_url_enabled(self, mock_fn): + """ test validate long url is disabled when force_validation=True """ + response = Mock() + mock_fn.return_value = response + link = validate_long_url(self.link, True) + self.assertNotEqual(link.validation_error, "") + + @patch("tinylinks.models.get_url_response") + def test_validate_long_url_disabled(self, mock_fn): + """ test validate long url is disabled when force_validation=False """ + response = Mock() + mock_fn.return_value = response + link = validate_long_url(self.link, False) + self.assertEqual(link.validation_error, "") class TinyLinkFormTests(TestCase): def setUp(self): @@ -560,3 +575,4 @@ def test_shortify_url(self): print(form.errors) shortify_url(self.link.long_url) self.assertFalse(form.is_valid()) + From 6305fd9999b72a8036aeaa28234659fe5208ef07 Mon Sep 17 00:00:00 2001 From: zainab Date: Sun, 27 Nov 2022 13:50:11 +0300 Subject: [PATCH 3/4] fix: fix validation test --- tinylinks/tests/tests.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tinylinks/tests/tests.py b/tinylinks/tests/tests.py index aaa2f63..18c2572 100644 --- a/tinylinks/tests/tests.py +++ b/tinylinks/tests/tests.py @@ -482,21 +482,24 @@ def test_can_be_validated(self, mock_fn): self.assertEqual(True, self.link.can_be_validated()) @patch("tinylinks.models.get_url_response") + @patch("tinylinks.detaults.TINYLINK_VALIDATION_ENABLED", True) def test_validate_long_url_enabled(self, mock_fn): - """ test validate long url is disabled when force_validation=True """ + """ test validate long url is enabled """ response = Mock() mock_fn.return_value = response - link = validate_long_url(self.link, True) + link = validate_long_url(self.link) self.assertNotEqual(link.validation_error, "") @patch("tinylinks.models.get_url_response") + @patch("tinylinks.detaults.TINYLINK_VALIDATION_ENABLED", False) def test_validate_long_url_disabled(self, mock_fn): - """ test validate long url is disabled when force_validation=False """ + """ test validate long url is disabled """ response = Mock() mock_fn.return_value = response - link = validate_long_url(self.link, False) + link = validate_long_url(self.link) self.assertEqual(link.validation_error, "") + class TinyLinkFormTests(TestCase): def setUp(self): self.user = User.objects.create_superuser( @@ -575,4 +578,3 @@ def test_shortify_url(self): print(form.errors) shortify_url(self.link.long_url) self.assertFalse(form.is_valid()) - From 3685703ec65edbee9cb5669f53764e6fb5ca1aca Mon Sep 17 00:00:00 2001 From: zainab Date: Tue, 29 Nov 2022 11:40:41 +0300 Subject: [PATCH 4/4] doc: update README.rst --- README.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.rst b/README.rst index 5590560..07cadf6 100644 --- a/README.rst +++ b/README.rst @@ -120,6 +120,13 @@ Default: None The path for the MaxMind GeoIP data. +TINYLINK_VALIDATION_ENABLED ++++++++++++++++++++++ + +Default: False + +The validation of the long url , disabled by default + Usage -----