import pytest from django.core.files.uploadedfile import SimpleUploadedFile from plants.models import Location from django.test import Client from django.urls import reverse @pytest.mark.django_db def test_location_cover_photo_field_exists(): """Location can be saved with and without a cover_photo.""" loc = Location.objects.create(name='Test Garden') assert loc.cover_photo.name == '' or loc.cover_photo.name is None fake_img = SimpleUploadedFile('cover.jpg', b'fake-image-data', content_type='image/jpeg') loc.cover_photo = fake_img loc.save() loc.refresh_from_db() assert loc.cover_photo.name.startswith('locations/') @pytest.fixture def client(): return Client() @pytest.mark.django_db def test_location_detail_view_returns_200(client): loc = Location.objects.create(name='My Terrace') resp = client.get(reverse('location_detail', kwargs={'pk': loc.pk})) assert resp.status_code == 200 assert b'My Terrace' in resp.content @pytest.mark.django_db def test_location_edit_with_cover_photo(client): import io from PIL import Image loc = Location.objects.create(name='Balcony') buf = io.BytesIO() Image.new('RGB', (1, 1), color=(0, 255, 0)).save(buf, format='JPEG') buf.seek(0) fake_img = SimpleUploadedFile('cover.jpg', buf.read(), content_type='image/jpeg') resp = client.post( reverse('location_edit', kwargs={'pk': loc.pk}), {'name': 'Balcony Updated', 'cover_photo': fake_img}, ) assert resp.status_code == 302 loc.refresh_from_db() assert loc.name == 'Balcony Updated' assert loc.cover_photo.name.startswith('locations/')