From d589c9cd76693c4cb86c1d6878e51c2fc463ab28 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Wed, 9 May 2012 20:05:44 -0400 Subject: fixed question page urls and updated test cases --- askbot/models/post.py | 8 +++++--- askbot/tests/page_load_tests.py | 31 +++++++++++++++---------------- askbot/tests/post_model_tests.py | 10 +++++----- askbot/urls.py | 2 ++ askbot/views/readers.py | 4 ++-- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/askbot/models/post.py b/askbot/models/post.py index c1fc33d6..daf7757b 100644 --- a/askbot/models/post.py +++ b/askbot/models/post.py @@ -518,12 +518,14 @@ class Post(models.Model): def get_absolute_url(self, no_slug = False, question_post=None, thread=None): from askbot.utils.slug import slugify + #todo: the url generation function is pretty bad - + #the trailing slash is entered in three places here + in urls.py if not hasattr(self, '_thread_cache') and thread: self._thread_cache = thread if self.is_answer(): if not question_post: question_post = self.thread._question_post() - return u'%(base)s%(slug)s?answer=%(id)d#post-id-%(id)d' % { + return u'%(base)s%(slug)s/?answer=%(id)d#post-id-%(id)d' % { 'base': urlresolvers.reverse('question', args=[question_post.id]), 'slug': django_urlquote(slugify(self.thread.title)), 'id': self.id @@ -531,9 +533,9 @@ class Post(models.Model): elif self.is_question(): url = urlresolvers.reverse('question', args=[self.id]) if thread: - url += django_urlquote(slugify(thread.title)) + url += django_urlquote(slugify(thread.title)) + '/' elif no_slug is False: - url += django_urlquote(self.slug) + url += django_urlquote(self.slug) + '/' return url elif self.is_comment(): origin_post = self.get_origin_post() diff --git a/askbot/tests/page_load_tests.py b/askbot/tests/page_load_tests.py index 558ee617..ebfba0c3 100644 --- a/askbot/tests/page_load_tests.py +++ b/askbot/tests/page_load_tests.py @@ -553,19 +553,17 @@ class QuestionPageRedirectTests(AskbotTestCase): url = reverse('question', kwargs={'id': self.q.id}) resp = self.client.get(url) - url = url + self.q.slug - self.assertRedirects(resp, expected_url=url) - - resp = self.client.get(url) - self.assertEqual(200, resp.status_code) - self.assertEqual(self.q, resp.context['question']) + self.assertRedirects( + resp, + expected_url=self.q.get_absolute_url() + ) url = reverse('question', kwargs={'id': 101}) resp = self.client.get(url) - url = reverse('question', kwargs={'id': self.q.id}) + self.q.slug # redirect uses the new question.id ! + url = reverse('question', kwargs={'id': self.q.id}) + self.q.slug + '/'# redirect uses the new question.id ! self.assertRedirects(resp, expected_url=url) - url = reverse('question', kwargs={'id': 101}) + self.q.slug + url = reverse('question', kwargs={'id': 101}) + self.q.slug + '/' resp = self.client.get(url) self.assertEqual(200, resp.status_code) self.assertEqual(self.q, resp.context['question']) @@ -578,7 +576,7 @@ class QuestionPageRedirectTests(AskbotTestCase): url = reverse('question', kwargs={'id': self.q.id}) resp = self.client.get(url, data={'answer': self.a.id}) - url = url + self.q.slug + url = self.q.get_absolute_url() self.assertRedirects(resp, expected_url=url + '?answer=%d' % self.a.id) resp = self.client.get(url, data={'answer': self.a.id}) @@ -586,7 +584,8 @@ class QuestionPageRedirectTests(AskbotTestCase): self.assertEqual(self.q, resp.context['question']) self.assertEqual(self.a, resp.context['show_post']) - url = reverse('question', kwargs={'id': 101}) + self.q.slug + #test redirect from old question + url = reverse('question', kwargs={'id': 101}) + self.q.slug + '/' resp = self.client.get(url, data={'answer': 201}) self.assertRedirects(resp, expected_url=self.a.get_absolute_url()) @@ -597,10 +596,9 @@ class QuestionPageRedirectTests(AskbotTestCase): self.assertEqual(self.a, resp.context['show_post']) self.assertEqual(self.c, resp.context['show_comment']) - url = reverse('question', kwargs={'id': self.q.id}) + url = self.q.get_absolute_url() resp = self.client.get(url, data={'comment': self.c.id}) - url = url + self.q.slug - self.assertRedirects(resp, expected_url=url + '?comment=%d' % self.c.id) + self.assertEqual(200, resp.status_code) resp = self.client.get(url, data={'comment': self.c.id}) self.assertEqual(200, resp.status_code) @@ -608,6 +606,7 @@ class QuestionPageRedirectTests(AskbotTestCase): self.assertEqual(self.a, resp.context['show_post']) self.assertEqual(self.c, resp.context['show_comment']) - url = reverse('question', kwargs={'id': 101}) + self.q.slug - resp = self.client.get(url, data={'comment': 301}) - self.assertRedirects(resp, expected_url=self.c.get_absolute_url()) + url = self.q.get_absolute_url() + #point to a non-existing comment + resp = self.client.get(url, data={'comment': 100301}) + self.assertRedirects(resp, expected_url = self.q.get_absolute_url()) diff --git a/askbot/tests/post_model_tests.py b/askbot/tests/post_model_tests.py index 06bceca1..dd1399c1 100644 --- a/askbot/tests/post_model_tests.py +++ b/askbot/tests/post_model_tests.py @@ -167,17 +167,17 @@ class PostModelTests(AskbotTestCase): th.title = 'lala-x-lala' p = Post(id=3, post_type='question') p._thread_cache = th # cannot assign non-Thread instance directly - self.assertEqual('/question/3/lala-x-lala', p.get_absolute_url(thread=th)) + self.assertEqual('/question/3/lala-x-lala/', p.get_absolute_url(thread=th)) self.assertTrue(p._thread_cache is th) - self.assertEqual('/question/3/lala-x-lala', p.get_absolute_url(thread=th)) + self.assertEqual('/question/3/lala-x-lala/', p.get_absolute_url(thread=th)) def test_cached_get_absolute_url_2(self): p = Post(id=3, post_type='question') th = lambda:1 th.title = 'lala-x-lala' - self.assertEqual('/question/3/lala-x-lala', p.get_absolute_url(thread=th)) + self.assertEqual('/question/3/lala-x-lala/', p.get_absolute_url(thread=th)) self.assertTrue(p._thread_cache is th) - self.assertEqual('/question/3/lala-x-lala', p.get_absolute_url(thread=th)) + self.assertEqual('/question/3/lala-x-lala/', p.get_absolute_url(thread=th)) class ThreadTagModelsTests(AskbotTestCase): @@ -673,4 +673,4 @@ class ThreadRenderCacheUpdateTests(AskbotTestCase): # TODO: (in spare time - those cases should pass without changing anything in code but we should have them eventually for completness) # - Publishing anonymous questions / answers # - Re-posting question as answer and vice versa -# - Management commands (like post_emailed_questions) \ No newline at end of file +# - Management commands (like post_emailed_questions) diff --git a/askbot/urls.py b/askbot/urls.py index f4768412..799cc346 100644 --- a/askbot/urls.py +++ b/askbot/urls.py @@ -367,6 +367,8 @@ urlpatterns = patterns('', ), ) +#todo - this url below won't work, because it is defined above +#therefore the stackexchange urls feature won't work if getattr(settings, 'ASKBOT_USE_STACKEXCHANGE_URLS', False): urlpatterns += (url( r'^%s(?P\d+)/' % _('questions/'), diff --git a/askbot/views/readers.py b/askbot/views/readers.py index a75a8967..3259cddd 100644 --- a/askbot/views/readers.py +++ b/askbot/views/readers.py @@ -359,7 +359,7 @@ def question(request, id):#refactor - long subroutine. display question body, an return HttpResponseRedirect(reverse('index')) #redirect if slug in the url is wrong - if request.path.split('/')[-1] != question_post.slug: + if request.path.split('/')[-2] != question_post.slug: logging.debug('no slug match!') question_url = '?'.join(( question_post.get_absolute_url(), @@ -392,7 +392,7 @@ def question(request, id):#refactor - long subroutine. display question body, an 'deleted and is no longer accessible' ) request.user.message_set.create(message = error_message) - return HttpResponseRedirect(reverse('question', kwargs = {'id': id})) + return HttpResponseRedirect(question_post.thread.get_absolute_url()) if str(show_comment.thread._question_post().id) != str(id): return HttpResponseRedirect(show_comment.get_absolute_url()) -- cgit v1.2.3-1-g7c22