From 527312117bc1faf65d5941bf7d6d7ab655983278 Mon Sep 17 00:00:00 2001 From: Nik Nyby Date: Wed, 22 Mar 2017 12:00:09 -0400 Subject: [PATCH] Make base_url an optional argument for cloning This will allow me too create a more user-friendly clone form in UELC - PMT #110243 --- pagetree/forms.py | 8 ++++++++ pagetree/templates/pagetree/clone_hierarchy.html | 1 + pagetree/tests/test_forms.py | 12 ++++++++++++ 3 files changed, 21 insertions(+) diff --git a/pagetree/forms.py b/pagetree/forms.py index 3d61a7c..82a851a 100644 --- a/pagetree/forms.py +++ b/pagetree/forms.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals from django import forms +from django.utils.text import slugify from treebeard.forms import movenodeform_factory from pagetree.models import Hierarchy, Section @@ -16,10 +17,17 @@ class Media: } js = ('pagetree/js/src/clone-loading.js',) + base_url = forms.CharField( + required=False, label='Base URL (optional)') + def clean(self): cleaned_data = super(CloneHierarchyForm, self).clean() name = cleaned_data.get('name') base_url = cleaned_data.get('base_url') + if not base_url: + # If there's no base_url, derive it from the name. + cleaned_data['base_url'] = slugify(name) + base_url = cleaned_data['base_url'] if Hierarchy.objects.filter(name=name).exists(): raise forms.ValidationError( diff --git a/pagetree/templates/pagetree/clone_hierarchy.html b/pagetree/templates/pagetree/clone_hierarchy.html index bb5d672..a998350 100644 --- a/pagetree/templates/pagetree/clone_hierarchy.html +++ b/pagetree/templates/pagetree/clone_hierarchy.html @@ -29,6 +29,7 @@

Clone {{ hierarchy.name }}

The Base URL field will be used as part of the clone's URL. This should be something like: my-clone + If left blank, it will be derived from the name.

diff --git a/pagetree/tests/test_forms.py b/pagetree/tests/test_forms.py index c14276e..9b594fa 100644 --- a/pagetree/tests/test_forms.py +++ b/pagetree/tests/test_forms.py @@ -22,6 +22,18 @@ def test_clean(self): self.assertEqual(new_hier.name, 'new name') self.assertEqual(new_hier.base_url, 'new') + def test_clean_no_base_url(self): + h = HierarchyFactory() + f = CloneHierarchyForm({ + 'name': 'new name', + 'base_url': '', + }, + instance=h) + self.assertTrue(f.is_valid()) + new_hier = f.save() + self.assertEqual(new_hier.name, 'new name') + self.assertEqual(new_hier.base_url, 'new-name') + def test_clean_prevents_duplicate_name(self): h = HierarchyFactory() f = CloneHierarchyForm({