diff options
Diffstat (limited to 'brevisurl/tests')
| -rw-r--r-- | brevisurl/tests/__init__.py | 6 | ||||
| -rw-r--r-- | brevisurl/tests/backends/__init__.py | 1 | ||||
| -rw-r--r-- | brevisurl/tests/backends/test_local.py | 55 | ||||
| -rw-r--r-- | brevisurl/tests/templatetags/__init__.py | 0 | ||||
| -rw-r--r-- | brevisurl/tests/templatetags/test_brevisurltags.py | 27 | ||||
| -rw-r--r-- | brevisurl/tests/test_brevisurl.py | 22 | ||||
| -rw-r--r-- | brevisurl/tests/test_models.py | 38 | ||||
| -rw-r--r-- | brevisurl/tests/test_utils.py | 22 | ||||
| -rw-r--r-- | brevisurl/tests/test_views.py | 28 |
9 files changed, 199 insertions, 0 deletions
diff --git a/brevisurl/tests/__init__.py b/brevisurl/tests/__init__.py new file mode 100644 index 0000000..729e40a --- /dev/null +++ b/brevisurl/tests/__init__.py @@ -0,0 +1,6 @@ +from brevisurl.tests.test_brevisurl import * +from brevisurl.tests.test_utils import * +from brevisurl.tests.test_views import * +from brevisurl.tests.test_models import * +from brevisurl.tests.backends.test_local import * +from brevisurl.tests.templatetags.test_brevisurltags import *
\ No newline at end of file diff --git a/brevisurl/tests/backends/__init__.py b/brevisurl/tests/backends/__init__.py new file mode 100644 index 0000000..7a8337f --- /dev/null +++ b/brevisurl/tests/backends/__init__.py @@ -0,0 +1 @@ +__author__ = 'char0n' diff --git a/brevisurl/tests/backends/test_local.py b/brevisurl/tests/backends/test_local.py new file mode 100644 index 0000000..8939314 --- /dev/null +++ b/brevisurl/tests/backends/test_local.py @@ -0,0 +1,55 @@ +from django.core.exceptions import ValidationError +from django.test import TestCase +from django.core.validators import URLValidator + +from brevisurl import get_connection +from brevisurl.models import ShortUrl + + +class TestLocalBrevisUrlBackend(TestCase): + + def setUp(self): + self.connection = get_connection('brevisurl.backends.local.BrevisUrlBackend') + + def test_shorten_url(self): + self.assertEqual(ShortUrl.objects.all().count(), 0) + original_url = 'http://www.codescale.net/' + short_url = self.connection.shorten_url(original_url) + self.assertEqual(ShortUrl.objects.all().count(), 1) + self.assertEqual(short_url.original_url, original_url) + self.assertRegexpMatches(short_url.shortened_url, URLValidator.regex) + + def test_shorten_url_reuse_old(self): + original_url = 'http://www.codescale.net/' + self.assertEqual(ShortUrl.objects.all().count(), 0) + short_url = self.connection.shorten_url(original_url) + self.assertEqual(ShortUrl.objects.all().count(), 1) + self.assertEqual(short_url.original_url, original_url) + self.assertRegexpMatches(short_url.shortened_url, URLValidator.regex) + short_url = self.connection.shorten_url(original_url) + self.assertEqual(ShortUrl.objects.all().count(), 1) + self.assertEqual(short_url.original_url, original_url) + self.assertRegexpMatches(short_url.shortened_url, URLValidator.regex) + + def test_shorten_url_create_new(self): + original_url = 'http://www.codescale.net/' + self.assertEqual(ShortUrl.objects.all().count(), 0) + short_url = self.connection.shorten_url(original_url) + self.assertEqual(ShortUrl.objects.all().count(), 1) + self.assertEqual(short_url.original_url, original_url) + self.assertRegexpMatches(short_url.shortened_url, URLValidator.regex) + original_url = 'http://www.codescale.net/en/company/' + short_url = self.connection.shorten_url(original_url) + self.assertEqual(ShortUrl.objects.all().count(), 2) + self.assertEqual(short_url.original_url, original_url) + self.assertRegexpMatches(short_url.shortened_url, URLValidator.regex) + + def test_shorten_url_invalid_original_url(self): + with self.assertRaises(ValidationError): + self.connection.shorten_url('www.codescale.') + self.assertEqual(ShortUrl.objects.all().count(), 0) + + def test_shorten_url_invalid_original_url_fail_silently(self): + self.connection.fail_silently = True + shorl_url = self.connection.shorten_url('www.codescale.') + self.assertIsNone(shorl_url)
\ No newline at end of file diff --git a/brevisurl/tests/templatetags/__init__.py b/brevisurl/tests/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/brevisurl/tests/templatetags/__init__.py diff --git a/brevisurl/tests/templatetags/test_brevisurltags.py b/brevisurl/tests/templatetags/test_brevisurltags.py new file mode 100644 index 0000000..de1ed00 --- /dev/null +++ b/brevisurl/tests/templatetags/test_brevisurltags.py @@ -0,0 +1,27 @@ +from django.core.validators import URLValidator +from django.test import TestCase +from django.template import Template, Context + +from brevisurl.models import ShortUrl + + +class TestShortenUrlTag(TestCase): + + def test_shorten_url_tag(self): + original_url = 'http://www.codescale.net/' + url = Template(""" + {% load brevisurltags %} + {{ url|shorten_url }} + """).render(Context({'url': original_url})).strip() + self.assertEqual(ShortUrl.objects.all().count(), 1) + self.assertEqual(ShortUrl.objects.all()[0].original_url, original_url) + self.assertRegexpMatches(url, URLValidator.regex) + + def test_shorten_url_tag_invalid_url(self): + original_url = 'www.codescale.' + url = Template(""" + {% load brevisurltags %} + {{ url|shorten_url }} + """).render(Context({'url': original_url})).strip() + self.assertEqual(ShortUrl.objects.all().count(), 0) + self.assertEqual(url, original_url)
\ No newline at end of file diff --git a/brevisurl/tests/test_brevisurl.py b/brevisurl/tests/test_brevisurl.py new file mode 100644 index 0000000..8780b05 --- /dev/null +++ b/brevisurl/tests/test_brevisurl.py @@ -0,0 +1,22 @@ +from django.utils import unittest + +from brevisurl import get_connection, shorten_url +from brevisurl.backends.local import BrevisUrlBackend +from brevisurl.backends.base import BaseBrevisUrlBackend + + +class TestGetConnection(unittest.TestCase): + + def test_get_default_connection(self): + connection = get_connection() + self.assertIsInstance(connection, BrevisUrlBackend) + + def test_get_custom_connection(self): + base_connection = get_connection(backend='brevisurl.backends.base.BaseBrevisUrlBackend') + local_connection = get_connection(backend='brevisurl.backends.local.BrevisUrlBackend') + self.assertIsInstance(base_connection, BaseBrevisUrlBackend) + self.assertIsInstance(local_connection, BrevisUrlBackend) + + def test_get_connection_non_existing_backend(self): + with self.assertRaises(AttributeError): + get_connection(backend='brevisurl.backends.local.NonExistingBackend')
\ No newline at end of file diff --git a/brevisurl/tests/test_models.py b/brevisurl/tests/test_models.py new file mode 100644 index 0000000..6942124 --- /dev/null +++ b/brevisurl/tests/test_models.py @@ -0,0 +1,38 @@ +from django.core.exceptions import ValidationError +from django.test import TestCase +from django.contrib.sites.models import Site + +from brevisurl.models import ShortUrl +from brevisurl import get_connection + + +class TestModels(TestCase): + + def test_model_save(self): + site = Site.objects.get_current() + connection = get_connection('brevisurl.backends.local.BrevisUrlBackend') + short_url = ShortUrl() + short_url.original_url = 'http://www.codescale.net/' + short_url.shortened_url = '{0}://{1}/12345'.format(connection.PROTOCOL, site.domain) + short_url.backend = connection.class_path + short_url.save() + self.assertIsNotNone(short_url.pk) + + def test_model_save_invalid_original_url(self): + with self.assertRaises(ValidationError): + self.site = Site.objects.get_current() + self.connection = get_connection('brevisurl.backends.local.BrevisUrlBackend') + self.short_url = ShortUrl() + self.short_url.original_url = 'www.codescale.' + self.short_url.shortened_url = '{0}://{1}/12345'.format(self.connection.PROTOCOL, self.site.domain) + self.short_url.backend = self.connection.class_path + self.short_url.save() + + def test_model_save_invalid_shortened_url(self): + with self.assertRaises(ValidationError): + connection = get_connection('brevisurl.backends.local.BrevisUrlBackend') + short_url = ShortUrl() + short_url.original_url = 'http://www.codescale.net/' + short_url.shortened_url = 'www.codescale.' + short_url.backend = connection.class_path + short_url.save()
\ No newline at end of file diff --git a/brevisurl/tests/test_utils.py b/brevisurl/tests/test_utils.py new file mode 100644 index 0000000..6d31e77 --- /dev/null +++ b/brevisurl/tests/test_utils.py @@ -0,0 +1,22 @@ +from django.utils import unittest + +from brevisurl.utils import load_object +from brevisurl.backends.local import BrevisUrlBackend + +class TestLoadObject(unittest.TestCase): + + def test_load_valid_object(self): + klass = load_object('brevisurl.backends.local.BrevisUrlBackend') + self.assertEqual(klass, BrevisUrlBackend) + + def test_load_import_error(self): + with self.assertRaises(ImportError): + load_object('brevisurl.local.BrevisUrlBackend') + + def test_load_attribute_error(self): + with self.assertRaises(AttributeError): + load_object('brevisurl.backends.local.NonExistingBackend') + + def test_load_value_error(self): + with self.assertRaises(ValueError): + load_object('brevisurl')
\ No newline at end of file diff --git a/brevisurl/tests/test_views.py b/brevisurl/tests/test_views.py new file mode 100644 index 0000000..ca20c43 --- /dev/null +++ b/brevisurl/tests/test_views.py @@ -0,0 +1,28 @@ +from django.test import TestCase +from django.test.client import Client +from django.core.urlresolvers import reverse +from django.contrib.sites.models import Site + +from brevisurl import get_connection +from brevisurl.models import ShortUrl + + +class TestBrevisUrlRedirectView(TestCase): + + def setUp(self): + self.site = Site.objects.get_current() + self.connection = get_connection('brevisurl.backends.local.BrevisUrlBackend') + self.short_url = ShortUrl() + self.short_url.original_url = 'http://www.codescale.net/' + self.short_url.shortened_url = '{0}://{1}/12345'.format(self.connection.PROTOCOL, self.site.domain) + self.short_url.backend = self.connection.class_path + self.short_url.save() + self.client = Client() + + def test_redirect(self): + response = self.client.get(reverse('brevisurl_redirect', kwargs={'token': 12345})) + self.assertEqual(response.status_code, 301) + + def test_redirect_non_existing_token(self): + response = self.client.get(reverse('brevisurl_redirect', kwargs={'token': 54321})) + self.assertEqual(response.status_code, 404)
\ No newline at end of file |
