diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 52582a235..af8a6dc3f 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -1,9 +1,11 @@ """ test for app action functionality """ import json from unittest.mock import patch +import dateutil from django.core.exceptions import PermissionDenied from django.test import TestCase, TransactionTestCase from django.test.client import RequestFactory +from django.utils import timezone from bookwyrm import forms, models, views from bookwyrm.views.status import find_mentions, find_or_create_hashtags @@ -167,6 +169,37 @@ class StatusViews(TestCase): self.assertEqual(status.rating, 4.0) self.assertIsNone(status.edited_date) + def test_create_status_progress(self, *_): + """create a status that updates a readthrough""" + start_date = timezone.make_aware(dateutil.parser.parse("2024-07-27")) + readthrough = models.ReadThrough.objects.create( + book=self.book, user=self.local_user, start_date=start_date + ) + + self.assertEqual(start_date, readthrough.start_date) + self.assertIsNone(readthrough.progress) + + view = views.CreateStatus.as_view() + form = forms.CommentForm( + { + "progress": 1, + "progress_mode": "PG", + "content": "I started the book", + "id": readthrough.id, + "book": self.book.id, + "user": self.local_user.id, + "privacy": "public", + } + ) + request = self.factory.post("", form.data) + request.user = self.local_user + + view(request, "comment") + readthrough.refresh_from_db() + + self.assertEqual(1, readthrough.progress) + self.assertEqual(start_date, readthrough.start_date) # not overwritten + def test_create_status_wrong_user(self, *_): """You can't compose statuses for someone else""" view = views.CreateStatus.as_view() diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 1935c916b..99401431b 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -201,12 +201,11 @@ def edit_readthrough(request): # TODO: remove this, it duplicates the code in the ReadThrough view readthrough = get_object_or_404(models.ReadThrough, id=request.POST.get("id")) - readthrough.start_date = load_date_in_user_tz_as_utc( - request.POST.get("start_date"), request.user - ) - readthrough.finish_date = load_date_in_user_tz_as_utc( - request.POST.get("finish_date"), request.user - ) + if start_date := request.POST.get("start_date"): + readthrough.start_date = load_date_in_user_tz_as_utc(start_date, request.user) + + if finish_date := request.POST.get("finish_date"): + readthrough.finish_date = load_date_in_user_tz_as_utc(finish_date, request.user) progress = request.POST.get("progress") try: