summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--askbot/models/post.py8
-rw-r--r--askbot/tests/page_load_tests.py31
-rw-r--r--askbot/tests/post_model_tests.py10
-rw-r--r--askbot/urls.py2
-rw-r--r--askbot/views/readers.py4
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<id>\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())