71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
import tempfile
|
|
|
|
import pytest
|
|
from birds.models import (
|
|
Bird,
|
|
BirdSightingEntry,
|
|
BirdSightingLogData,
|
|
BirdingLocation,
|
|
)
|
|
from django.contrib.auth import get_user_model
|
|
from scrobbles.models import Scrobble
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
@pytest.fixture
|
|
def user(db):
|
|
return User.objects.create(email="birder@example.com")
|
|
|
|
|
|
@pytest.fixture
|
|
def bird(db):
|
|
return Bird.objects.create(
|
|
common_name="Northern Cardinal",
|
|
scientific_name="Cardinalis cardinalis",
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def birding_location(db):
|
|
return BirdingLocation.objects.create(title="Test Park")
|
|
|
|
|
|
@pytest.fixture
|
|
def birding_csv_content():
|
|
return """Species,Count,Location,Observation Type,Observation Date,Start Time,Duration,Distance,Area,Party Size,Complete Checklist,# of species,Details
|
|
Canada Goose,6,Test Park,Stationary,"May 10, 2026",4:15 PM,9 minute(s),,,4,true,4 species,
|
|
Northern Cardinal,2,Test Park,Stationary,"May 10, 2026",4:15 PM,9 minute(s),,,4,true,4 species,At the feeder
|
|
"""
|
|
|
|
|
|
@pytest.fixture
|
|
def birding_csv_file(birding_csv_content):
|
|
with tempfile.NamedTemporaryFile(
|
|
mode="w", suffix=".csv", delete=False, encoding="utf-8"
|
|
) as f:
|
|
f.write(birding_csv_content)
|
|
return f.name
|
|
|
|
|
|
@pytest.fixture
|
|
def scrobble_with_sightings(user, birding_location, bird):
|
|
return Scrobble.objects.create(
|
|
user=user,
|
|
birding_location=birding_location,
|
|
media_type=Scrobble.MediaType.BIRDING_LOCATION,
|
|
timestamp="2026-05-10 16:15:00+00:00",
|
|
played_to_completion=True,
|
|
log={
|
|
"birds": [
|
|
BirdSightingEntry(
|
|
bird_id=bird.id, quantity=2, sighting_notes="At the feeder"
|
|
).asdict
|
|
],
|
|
"duration_minutes": 9,
|
|
"observation_type": "Stationary",
|
|
"party_size": 4,
|
|
"complete_checklist": True,
|
|
},
|
|
)
|