Files
vrobbler/tests/birds_tests/test_dataclasses.py
Colin Powell f160f5a7b8
Some checks failed
build & deploy / test (push) Failing after 1m19s
build & deploy / build-and-deploy (push) Has been skipped
[birds] Add much better bird importing
2026-05-15 12:10:20 -04:00

97 lines
3.3 KiB
Python

from birds.models import BirdSightingEntry, BirdSightingLogData
class TestBirdSightingEntry:
def test_create_entry(self, db, bird):
entry = BirdSightingEntry(bird_id=bird.id, quantity=3)
assert entry.bird_id == bird.id
assert entry.quantity == 3
assert entry.sighting_notes is None
def test_entry_default_quantity(self, db, bird):
entry = BirdSightingEntry(bird_id=bird.id)
assert entry.quantity == 1
def test_entry_str(self, db, bird):
entry = BirdSightingEntry(
bird_id=bird.id, quantity=2, sighting_notes="in the tree"
)
expected = f"{bird.common_name} x2 (in the tree)"
assert str(entry) == expected
def test_entry_str_no_notes(self, db, bird):
entry = BirdSightingEntry(bird_id=bird.id, quantity=1)
expected = f"{bird.common_name} x1"
assert str(entry) == expected
def test_entry_bird_property(self, db, bird):
entry = BirdSightingEntry(bird_id=bird.id)
assert entry.bird == bird
def test_entry_bird_property_none(self, db):
entry = BirdSightingEntry(bird_id=None)
assert entry.bird is None
def test_entry_asdict(self, db, bird):
entry = BirdSightingEntry(
bird_id=bird.id, quantity=4, sighting_notes="flying south"
)
d = entry.asdict
assert d["bird_id"] == bird.id
assert d["quantity"] == 4
assert d["sighting_notes"] == "flying south"
class TestBirdSightingLogData:
def test_empty_logdata(self):
logdata = BirdSightingLogData()
assert logdata.birds is None
assert logdata.duration_minutes is None
assert logdata.observation_type is None
assert logdata.party_size is None
assert logdata.complete_checklist is None
def test_with_birds(self, db, bird):
entry = BirdSightingEntry(bird_id=bird.id, quantity=2).asdict
logdata = BirdSightingLogData(
birds=[entry],
duration_minutes=15,
observation_type="Traveling",
party_size=3,
complete_checklist=True,
)
assert len(logdata.birds) == 1
assert logdata.duration_minutes == 15
assert logdata.observation_type == "Traveling"
assert logdata.party_size == 3
assert logdata.complete_checklist is True
def test_bird_list_property(self, db, bird):
entry = BirdSightingEntry(bird_id=bird.id, quantity=2).asdict
logdata = BirdSightingLogData(birds=[entry])
assert bird.common_name in logdata.bird_list
def test_bird_list_empty(self):
logdata = BirdSightingLogData()
assert logdata.bird_list == ""
def test_as_html_with_all_fields(self, db, bird):
entry = BirdSightingEntry(bird_id=bird.id, quantity=2).asdict
logdata = BirdSightingLogData(
birds=[entry],
observation_type="Stationary",
distance="2 km",
area="Woodland",
party_size=4,
complete_checklist=True,
weather="Sunny",
)
html = logdata.as_html()
assert "Stationary" in html
assert "2 km" in html
assert "Woodland" in html
assert "Party size: 4" in html
assert "Complete checklist: True" in html
assert "Sunny" in html
assert bird.common_name in html