diff --git a/bookwyrm/templates/shelf.html b/bookwyrm/templates/shelf.html index 4b27e3a49..99e0c678b 100644 --- a/bookwyrm/templates/shelf.html +++ b/bookwyrm/templates/shelf.html @@ -106,6 +106,8 @@ Name: + {% else %} + {% endif %} diff --git a/bookwyrm/tests/test_view_actions.py b/bookwyrm/tests/test_view_actions.py index e97512cea..3547f39c8 100644 --- a/bookwyrm/tests/test_view_actions.py +++ b/bookwyrm/tests/test_view_actions.py @@ -360,7 +360,7 @@ class ViewActions(TestCase): self.assertEqual(resp.template_name, 'edit_author.html') - def test_edit_shelf(self): + def test_edit_shelf_privacy(self): ''' set name or privacy on shelf ''' shelf = self.local_user.shelf_set.get(identifier='to-read') self.assertEqual(shelf.privacy, 'public') @@ -369,11 +369,50 @@ class ViewActions(TestCase): '', { 'privacy': 'unlisted', 'user': self.local_user.id, + 'name': 'To Read', + }) + request.user = self.local_user + actions.edit_shelf(request, shelf.id) + shelf.refresh_from_db() + + self.assertEqual(shelf.privacy, 'unlisted') + + + def test_edit_shelf_name(self): + ''' change the name of an editable shelf ''' + shelf = models.Shelf.objects.create( + name='Test Shelf', user=self.local_user) + self.assertEqual(shelf.privacy, 'public') + + request = self.factory.post( + '', { + 'privacy': 'public', + 'user': self.local_user.id, + 'name': 'cool name' + }) + request.user = self.local_user + actions.edit_shelf(request, shelf.id) + shelf.refresh_from_db() + + self.assertEqual(shelf.name, 'cool name') + self.assertEqual(shelf.identifier, 'testshelf-%d' % shelf.id) + + + def test_edit_shelf_name_not_editable(self): + ''' can't change the name of an non-editable shelf ''' + shelf = self.local_user.shelf_set.get(identifier='to-read') + self.assertEqual(shelf.privacy, 'public') + + request = self.factory.post( + '', { + 'privacy': 'public', + 'user': self.local_user.id, + 'name': 'cool name' }) request.user = self.local_user actions.edit_shelf(request, shelf.id) - self.assertEqual(shelf.privacy, 'unlisted') + self.assertEqual(shelf.name, 'To Read') def test_edit_readthrough(self): diff --git a/bookwyrm/view_actions.py b/bookwyrm/view_actions.py index f1af60ee5..87ed2653f 100644 --- a/bookwyrm/view_actions.py +++ b/bookwyrm/view_actions.py @@ -352,6 +352,8 @@ def edit_shelf(request, shelf_id): shelf = get_object_or_404(models.Shelf, id=shelf_id) if request.user != shelf.user: return HttpResponseBadRequest() + if not shelf.editable and request.POST.get('name') != shelf.name: + return HttpResponseBadRequest() form = forms.ShelfForm(request.POST, instance=shelf) if not form.is_valid():