Skip to content

Commit

Permalink
Merge pull request #423 from CTPUG/talk-slug
Browse files Browse the repository at this point in the history
Put an (optional) slug in talk URLs
  • Loading branch information
stefanor authored Apr 14, 2018
2 parents 937877e + 43ad04a commit 20b65c8
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 10 deletions.
9 changes: 8 additions & 1 deletion wafer/talks/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,11 +175,18 @@ class Meta:

kv = models.ManyToManyField(KeyValue)

@property
def slug(self):
return slugify(self.title)

def __str__(self):
return u'%s: %s' % (self.corresponding_author, self.title)

def get_absolute_url(self):
return reverse('wafer_talk', args=(self.talk_id,))
return reverse('wafer_talk', kwargs={
'pk': self.talk_id,
'slug': self.slug,
})

def get_corresponding_author_contact(self):
email = self.corresponding_author.email
Expand Down
17 changes: 13 additions & 4 deletions wafer/talks/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,7 @@ def setUp(self):
def check_talk_view(self, talk, status_code, auth=None):
if auth is not None:
self.client.login(**auth)
response = self.client.get(
reverse('wafer_talk', kwargs={'pk': talk.pk}))
response = self.client.get(talk.get_absolute_url())
self.assertEqual(response.status_code, status_code)

def test_view_accepted_not_logged_in(self):
Expand Down Expand Up @@ -180,6 +179,17 @@ def test_view_consideration_has_view_all_perm(self):
'username': 'reviewer', 'password': 'reviewer_password',
})

def test_view_canonicalizes_url(self):
response = self.client.get(
reverse('wafer_talk', kwargs={'pk': self.talk_a.pk}))
self.assertEqual(response.status_code, 302)

def test_view_canonicalizes_url_correctly(self):
response = self.client.get(
reverse('wafer_talk', kwargs={'pk': self.talk_a.pk}),
follow=True)
self.assertEqual(response.status_code, 200)


class TalkNoteViewTests(TestCase):
def setUp(self):
Expand All @@ -191,8 +201,7 @@ def check_talk_view(self, talk, notes_visible, private_notes_visible,
auth=None):
if auth is not None:
self.client.login(**auth)
response = self.client.get(
reverse('wafer_talk', kwargs={'pk': talk.pk}))
response = self.client.get(talk.get_absolute_url())
if notes_visible:
self.assertTrue('Some notes for talk' in response.rendered_content)
else:
Expand Down
3 changes: 2 additions & 1 deletion wafer/talks/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
url(r'^page/(?P<page>\d+)/$', UsersTalks.as_view(),
name='wafer_users_talks_page'),
url(r'^new/$', TalkCreate.as_view(), name='wafer_talk_submit'),
url(r'^(?P<pk>\d+)/$', TalkView.as_view(), name='wafer_talk'),
url(r'^(?P<pk>\d+)(?:-(?P<slug>[\w-]+))?/$', TalkView.as_view(),
name='wafer_talk'),
url(r'^(?P<pk>\d+)/edit/$', TalkUpdate.as_view(),
name='wafer_talk_edit'),
url(r'^(?P<pk>\d+)/review/$', TalkReview.as_view(),
Expand Down
13 changes: 9 additions & 4 deletions wafer/talks/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,15 @@ class TalkView(DetailView):
def get_object(self, *args, **kwargs):
'''Only talk owners can see talks, unless they've been accepted'''
object_ = super(TalkView, self).get_object(*args, **kwargs)
if object_.can_view(self.request.user):
return object_
else:
if not object_.can_view(self.request.user):
raise PermissionDenied
return object_

def render_to_response(self, *args, **kwargs):
'''Canonicalize the URL if the slug changed'''
if self.request.path != self.object.get_absolute_url():
return HttpResponseRedirect(self.object.get_absolute_url())
return super(TalkView, self).render_to_response(*args, **kwargs)

def get_context_data(self, **kwargs):
context = super(TalkView, self).get_context_data(**kwargs)
Expand Down Expand Up @@ -202,7 +207,7 @@ def form_valid(self, form):
return response

def get_success_url(self):
return reverse('wafer_talk', kwargs={'pk': self.kwargs['pk']})
return self.get_object().talk.get_absolute_url()


class Speakers(ListView):
Expand Down

0 comments on commit 20b65c8

Please sign in to comment.