Skip to content

Commit

Permalink
Fix dobrodruzstvi redirects (fixes #444)
Browse files Browse the repository at this point in the history
  • Loading branch information
Almad committed Mar 1, 2024
1 parent 7d4f203 commit 3d86f94
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 3 deletions.
2 changes: 1 addition & 1 deletion ddcz/templates/creative-pages/quest-list.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ <h1 class="page-heading">{{ heading }}</h1>
<ul class="article-list">
{% for a in articles %}
<li class="creation-detail">
<h2><a href="{% url 'ddcz:quest-view' quest_id=a.id %}">{{ a.name }}</a>{% creation_rating a.rating skin %}</h2>
<h2><a href="{% url 'ddcz:quest-view' quest_id=a.id quest_slug=a.get_slug %}">{{ a.name }}</a>{% creation_rating a.rating skin %}</h2>
<p>{{ a.abstract }}</p>

<div class="table-like">
Expand Down
24 changes: 24 additions & 0 deletions ddcz/tests/test_integration/test_legacy_redirects.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from unittest import TestCase

from django.template import Context, Template
from django.test import Client

from ddcz.models import Quest


class TestDobrodruztviRedirect(TestCase):
def setUp(self):
self.quest = Quest.objects.create(
id=21,
name="Test quest",
abstract="yolo",
keywords="test, quest",
)
self.client = Client()

def test_dobrodruzstvi_without_suffix(self):
response = self.client.get(f"/dobrodruzstvi/{self.quest.id}/")
self.assertEquals(response.status_code, 301)
self.assertEquals(
response.url, f"/dobrodruzstvi/{self.quest.id}-{self.quest.get_slug()}/"
)
7 changes: 6 additions & 1 deletion ddcz/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,12 @@
# Those are for executing redirect to download/quest location
path("download/<int:download_id>/", views.download_file, name="download-file"),
path(
"dobrodruzstvi/<int:quest_id>-?<quest-slug>?/",
"dobrodruzstvi/<int:quest_id>/",
views.quest_view_redirect,
name="quest-view-legacy-redirect",
),
re_path(
"dobrodruzstvi/(?P<quest_id>\d+)-(?P<quest_slug>[a-zA-Z0-9_-]+)/$",
views.quest_view_redirect,
name="quest-view",
),
Expand Down
10 changes: 9 additions & 1 deletion ddcz/views/creations.py
Original file line number Diff line number Diff line change
Expand Up @@ -319,8 +319,16 @@ def download_file(request, download_id):


@require_http_methods(["HEAD", "GET"])
def quest_view_redirect(request, quest_id, dash_slug=None):
def quest_view_redirect(request, quest_id, quest_slug=None):
quest = get_object_or_404(Quest, pk=quest_id)
if quest_slug is None:
return HttpResponsePermanentRedirect(
reverse(
"ddcz:quest-view",
kwargs={"quest_id": quest_id, "quest_slug": quest.get_slug()},
)
)

quest.read += 1
quest.save()
return HttpResponseRedirect(quest.get_final_url())
Expand Down

0 comments on commit 3d86f94

Please sign in to comment.