diff --git a/tcms/templates/run/new.html b/tcms/templates/run/new.html
index 4db34669fe..21d0fadff1 100644
--- a/tcms/templates/run/new.html
+++ b/tcms/templates/run/new.html
@@ -103,7 +103,8 @@
Create New Test Run
{% empty%}
- Environment group must be set for this test plan ({{ test_plan.product.name }}:{{ test_plan.product_version.value }}:{{ test_plan }}) before you will be able to select environments for this test run.If you do not have permission to edit this plan, please contact the author of this plan
+ Environment group must be set for this test plan ({{ test_plan.product.name }}:{{ test_plan.product_version.value }}:
+ {{ test_plan }}) before you will be able to select environments for this test run.If you do not have permission to edit this plan, please contact the author of this plan
{{ test_plan.author.username }}
diff --git a/tcms/testcases/tests/test_views.py b/tcms/testcases/tests/test_views.py
index bd1bf1b152..953623980c 100644
--- a/tcms/testcases/tests/test_views.py
+++ b/tcms/testcases/tests/test_views.py
@@ -3,6 +3,7 @@
import json
import unittest
+from uuslug import slugify
from http import HTTPStatus
import xml.etree.ElementTree # nosec:B405:blacklist
from datetime import datetime
@@ -411,12 +412,10 @@ def assert_list_case_plans(self, response, case):
plan = case_plan_rel.plan
self.assertContains(
response,
- '
{1}'.format(plan.get_full_url(), plan.pk),
- html=True)
-
- self.assertContains(
- response,
- '
{}'.format(plan.get_full_url(), plan.name),
+ '
TP-{1}: {2}'.format(
+ reverse('test_plan_url', args=[plan.pk, slugify(plan.name)]),
+ plan.pk,
+ plan.name),
html=True)
def test_list_plans(self):
diff --git a/tcms/testplans/tests/tests.py b/tcms/testplans/tests/tests.py
index 2c5221a9ba..3575c467e0 100644
--- a/tcms/testplans/tests/tests.py
+++ b/tcms/testplans/tests/tests.py
@@ -154,7 +154,8 @@ def test_plan_treeview(self):
data = json.loads(str(response.content, encoding=settings.DEFAULT_CHARSET))
self.assertEqual(1, len(data))
self.assertEqual(self.test_plan.pk, data[0]['pk'])
- self.assertEqual(self.test_plan.get_full_url(), data[0]['get_full_url'])
+ self.assertEqual(reverse('test_plan_url_short', args=[self.test_plan.pk]),
+ data[0]['plan_url'])
self.assertEqual(None, data[0]['parent'])
self.assertEqual(1, data[0]['num_children'])
@@ -704,7 +705,9 @@ def test_search_all_runs(self):
self.assertEqual(TestPlan.objects.count(), data['iTotalDisplayRecords'])
for i, plan in enumerate(TestPlan.objects.all().order_by('pk')):
self.assertEqual(
- "
{}".format(plan.get_full_url(), plan.pk),
+ "
{}".format(
+ reverse('test_plan_url', args=[plan.pk, slugify(plan.name)]),
+ plan.pk),
data['aaData'][i]['0'])
def test_emtpy_plans(self):
@@ -734,7 +737,9 @@ def test_get_first_page_order_by_pk(self):
for i, plan in enumerate(expected_plans):
self.assertEqual(
- "
{}".format(plan.get_full_url(), plan.pk),
+ "
{}".format(
+ reverse('test_plan_url', args=[plan.pk, slugify(plan.name)]),
+ plan.pk),
data['aaData'][i]['0'])
def test_get_last_page_order_by_name(self):
@@ -759,7 +764,9 @@ def test_get_last_page_order_by_name(self):
for i, plan in enumerate(expected_plans):
self.assertEqual(
- "
{}".format(plan.get_full_url(), plan.pk),
+ "
{}".format(
+ reverse('test_plan_url', args=[plan.pk, slugify(plan.name)]),
+ plan.pk),
data['aaData'][i]['0'])
def test_get_second_page_order_by_pk_desc(self):
@@ -782,5 +789,7 @@ def test_get_second_page_order_by_pk_desc(self):
for i, plan in enumerate(expected_plans):
self.assertEqual(
- "
{}".format(plan.get_full_url(), plan.pk),
+ "
{}".format(
+ reverse('test_plan_url', args=[plan.pk, slugify(plan.name)]),
+ plan.pk),
data['aaData'][i]['0'])
diff --git a/tcms/testplans/views.py b/tcms/testplans/views.py
index 0f7427746e..d4c7aeb1fb 100644
--- a/tcms/testplans/views.py
+++ b/tcms/testplans/views.py
@@ -162,7 +162,7 @@ def get_all(request, template_name='plan/all.html'):
for attr in ['pk', 'num_cases', 'num_cases', 'num_runs', 'num_children']:
dict_obj[attr] = getattr(obj, attr)
- dict_obj['get_full_url'] = obj.get_full_url()
+ dict_obj['plan_url'] = reverse('test_plan_url_short', args=[obj.pk])
results.append(dict_obj)
return JsonResponse(results, safe=False)
@@ -342,9 +342,9 @@ def get(request, plan_id, slug=None, template_name='plan/get.html'):
except ObjectDoesNotExist:
raise Http404
- # redirect if has a cheated slug
- if slug != slugify(test_plan.name):
- return HttpResponsePermanentRedirect(test_plan.get_full_url())
+ if slug is None:
+ return HttpResponsePermanentRedirect(reverse('test_plan_url',
+ args=[plan_id, slugify(test_plan.name)]))
# Initial the case counter
confirm_status_name = 'CONFIRMED'