From b5ee253b28673fcfad49f09d9d2687e86ed520b7 Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Sun, 12 Apr 2009 16:25:05 -0500 Subject: Added a working shorturl redirect view, with tests. --- src/shorturls/tests/test_views.py | 61 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) (limited to 'src/shorturls/tests/test_views.py') diff --git a/src/shorturls/tests/test_views.py b/src/shorturls/tests/test_views.py index 8fa11a4..a2813f2 100644 --- a/src/shorturls/tests/test_views.py +++ b/src/shorturls/tests/test_views.py @@ -1,5 +1,62 @@ +from django.conf import settings +from django.http import Http404 from django.test import TestCase +from shorturls.baseconv import base62 class RedirectViewTestCase(TestCase): - def test_this_is_working(self): - self.assertEquals(1, 1) \ No newline at end of file + urls = 'shorturls.urls' + fixtures = ['shorturls-test-data.json'] + + def setUp(self): + self.old_shorten = getattr(settings, 'SHORTEN_MODELS', None) + self.old_base = getattr(settings, 'SHORTEN_FULL_BASE_URL', None) + settings.SHORTEN_MODELS = { + 'A': 'shorturls.animal', + 'V': 'shorturls.vegetable', + 'M': 'shorturls.mineral', + 'bad': 'not.amodel', + 'bad2': 'not.even.valid', + } + settings.SHORTEN_FULL_BASE_URL = 'http://example.com' + + def tearDown(self): + if self.old_shorten is not None: + settings.SHORTEN_MODELS = self.old_shorten + if self.old_base is not None: + settings.SHORTEN_FULL_BASE_URL = self.old_base + + def test_redirect(self): + """ + Test the basic operation of a working redirect. + """ + response = self.client.get('/A%s' % enc(12345)) + self.assertEqual(response.status_code, 301) + self.assertEqual(response['Location'], 'http://example.com/animal/12345/') + + def test_redirect_from_request(self): + """ + Test a relative redirect when the Sites app isn't installed. + """ + settings.SHORTEN_FULL_BASE_URL = None + response = self.client.get('/A%s' % enc(54321), HTTP_HOST='example.org') + self.assertEqual(response.status_code, 301) + self.assertEqual(response['Location'], 'http://example.org/animal/54321/') + + def test_redirect_complete_url(self): + """ + Test a redirect when the object returns a complete URL. + """ + response = self.client.get('/V%s' % enc(785)) + self.assertEqual(response.status_code, 301) + self.assertEqual(response['Location'], 'http://example.net/veggies/785') + + def test_bad_short_urls(self): + self.assertEqual(404, self.client.get('/badabcd').status_code) + self.assertEqual(404, self.client.get('/bad2abcd').status_code) + self.assertEqual(404, self.client.get('/Vssssss').status_code) + + def test_model_without_get_absolute_url(self): + self.assertEqual(404, self.client.get('/M%s' % enc(10101)).status_code) + +def enc(id): + return base62.from_decimal(id) -- cgit v1.2.3