diff --git a/plants/tests/test_views.py b/plants/tests/test_views.py index d2c387a..b074f47 100644 --- a/plants/tests/test_views.py +++ b/plants/tests/test_views.py @@ -266,6 +266,26 @@ class TestUploadCardPhoto: assert resp.templates[0].name == 'plants/partials/card_gallery.html' +@pytest.mark.django_db +class TestDeleteCardPhoto: + def test_delete_removes_record(self, client): + plant = Plant.objects.create(name='Fern') + photo = PlantCardPhoto.objects.create(plant=plant, image='plants/cards/card.jpg') + resp = client.post(reverse('delete_card_photo', args=[photo.pk])) + assert resp.status_code == 200 + assert not PlantCardPhoto.objects.filter(pk=photo.pk).exists() + + def test_returns_card_gallery_partial(self, client): + plant = Plant.objects.create(name='Fern') + photo = PlantCardPhoto.objects.create(plant=plant, image='plants/cards/card.jpg') + resp = client.post(reverse('delete_card_photo', args=[photo.pk])) + assert resp.templates[0].name == 'plants/partials/card_gallery.html' + + def test_404_for_missing_photo(self, client): + resp = client.post(reverse('delete_card_photo', args=[9999])) + assert resp.status_code == 404 + + @pytest.mark.django_db class TestPruningCalendar: def test_returns_200(self, client): diff --git a/plants/urls.py b/plants/urls.py index 1a4c5cb..b9b0020 100644 --- a/plants/urls.py +++ b/plants/urls.py @@ -12,6 +12,7 @@ urlpatterns = [ path('plants//log-pruning/', plants.log_pruning, name='log_pruning'), path('plants//upload-photo/', plants.upload_photo, name='upload_photo'), path('plants//card-photos/upload/', plants.upload_card_photo, name='upload_card_photo'), + path('card-photos//delete/', plants.delete_card_photo, name='delete_card_photo'), path('photos//set-thumbnail/', plants.set_thumbnail, name='set_thumbnail'), path('photos//delete/', plants.delete_photo, name='delete_photo'), path('pruning/', pruning.pruning_calendar, name='pruning_calendar'), diff --git a/plants/views/plants.py b/plants/views/plants.py index 3786468..2e46daa 100644 --- a/plants/views/plants.py +++ b/plants/views/plants.py @@ -131,6 +131,16 @@ def upload_card_photo(request, pk): return render(request, 'plants/partials/card_gallery.html', {'plant': plant}) +@require_POST +def delete_card_photo(request, card_photo_pk): + card_photo = get_object_or_404(PlantCardPhoto, pk=card_photo_pk) + plant_pk = card_photo.plant_id + card_photo.image.delete(save=False) + card_photo.delete() + plant = Plant.objects.prefetch_related('card_photos').get(pk=plant_pk) + return render(request, 'plants/partials/card_gallery.html', {'plant': plant}) + + @require_POST def upload_photo(request, pk): plant = get_object_or_404(Plant.objects.prefetch_related('photos'), pk=pk)