aboutsummaryrefslogtreecommitdiffstats
path: root/brevisurl/tests
diff options
context:
space:
mode:
authorVladimir Gorej2012-05-27 20:14:17 +0200
committerVladimir Gorej2012-05-27 20:14:17 +0200
commit4bd7b72aa0ca3a09ab99e1a3b41753df81de6af9 (patch)
tree6328ed9894666eefc1f0d6b6c7b28a87b1fb4d31 /brevisurl/tests
downloaddjango-brevisurl-4bd7b72aa0ca3a09ab99e1a3b41753df81de6af9.tar.bz2
Initial commit
Diffstat (limited to 'brevisurl/tests')
-rw-r--r--brevisurl/tests/__init__.py6
-rw-r--r--brevisurl/tests/backends/__init__.py1
-rw-r--r--brevisurl/tests/backends/test_local.py55
-rw-r--r--brevisurl/tests/templatetags/__init__.py0
-rw-r--r--brevisurl/tests/templatetags/test_brevisurltags.py27
-rw-r--r--brevisurl/tests/test_brevisurl.py22
-rw-r--r--brevisurl/tests/test_models.py38
-rw-r--r--brevisurl/tests/test_utils.py22
-rw-r--r--brevisurl/tests/test_views.py28
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