103 lines
3.4 KiB
Python
103 lines
3.4 KiB
Python
from discgolf.models import DiscGolfCourse, DiscGolfLogData
|
|
from scrobbles.dataclasses import BaseLogData
|
|
|
|
|
|
class TestDiscGolfCourseModel:
|
|
def test_create_course(self, db):
|
|
course = DiscGolfCourse.objects.create(
|
|
title="Maple Hill",
|
|
layout_name="Mountains",
|
|
number_of_holes=18,
|
|
par_total=54,
|
|
par_per_hole={"hole_1": 3, "hole_2": 3},
|
|
)
|
|
assert course.uuid is not None
|
|
assert str(course) == "Maple Hill (Mountains)"
|
|
assert course.subtitle == "Mountains"
|
|
|
|
def test_subtitle_fallback(self, db):
|
|
course = DiscGolfCourse.objects.create(title="Maple Hill")
|
|
assert course.subtitle == ""
|
|
|
|
def test_logdata_cls(self, db):
|
|
course = DiscGolfCourse.objects.create(title="Maple Hill")
|
|
assert course.logdata_cls is DiscGolfLogData
|
|
assert issubclass(course.logdata_cls, BaseLogData)
|
|
|
|
def test_strings(self, db):
|
|
course = DiscGolfCourse.objects.create(title="Maple Hill")
|
|
assert course.strings.verb == "Playing"
|
|
assert course.strings.tags == "golf"
|
|
|
|
def test_primary_image_url(self, db):
|
|
course = DiscGolfCourse.objects.create(title="Maple Hill")
|
|
assert course.primary_image_url == ""
|
|
|
|
def test_get_absolute_url(self, db):
|
|
course = DiscGolfCourse.objects.create(title="Maple Hill")
|
|
url = course.get_absolute_url()
|
|
assert str(course.uuid) in url
|
|
assert url.startswith("/disc-golf/")
|
|
|
|
def test_find_or_create_new(self, db):
|
|
course = DiscGolfCourse.find_or_create(
|
|
"New Course", layout_name="Default"
|
|
)
|
|
assert course.title == "New Course"
|
|
assert course.layout_name == "Default"
|
|
|
|
def test_find_or_create_existing(self, db):
|
|
created = DiscGolfCourse.objects.create(
|
|
title="Existing", layout_name="Alpha"
|
|
)
|
|
found = DiscGolfCourse.find_or_create("Existing", layout_name="Beta")
|
|
assert found.id == created.id
|
|
assert found.layout_name == "Alpha"
|
|
|
|
def test_scrobbles_method(self, db, user):
|
|
from datetime import datetime
|
|
|
|
import pytz
|
|
|
|
from scrobbles.models import Scrobble
|
|
|
|
course = DiscGolfCourse.objects.create(title="Maple Hill")
|
|
dt1 = datetime(2026, 6, 15, 14, 0, 0, tzinfo=pytz.UTC)
|
|
dt2 = datetime(2026, 6, 14, 14, 0, 0, tzinfo=pytz.UTC)
|
|
s1 = Scrobble.objects.create(
|
|
user=user,
|
|
disc_golf_course=course,
|
|
media_type=Scrobble.MediaType.DISC_GOLF,
|
|
timestamp=dt1,
|
|
)
|
|
s2 = Scrobble.objects.create(
|
|
user=user,
|
|
disc_golf_course=course,
|
|
media_type=Scrobble.MediaType.DISC_GOLF,
|
|
timestamp=dt2,
|
|
)
|
|
qs = course.scrobbles(user.id)
|
|
assert list(qs) == [s1, s2]
|
|
|
|
|
|
class TestDiscGolfLogData:
|
|
def test_basic_logdata(self):
|
|
data = DiscGolfLogData()
|
|
assert data.scores is None
|
|
assert data.weather is None
|
|
assert data.fun_factor is None
|
|
assert data.course_name is None
|
|
|
|
def test_logdata_with_scores(self):
|
|
data = DiscGolfLogData(
|
|
scores={"Alice": {"person_id": 1, "total": 9}},
|
|
weather="Sunny",
|
|
fun_factor="High",
|
|
course_name="Maple Hill",
|
|
par=9,
|
|
round_type="Singles",
|
|
)
|
|
assert data.scores["Alice"]["total"] == 9
|
|
assert data.weather == "Sunny"
|
|
assert data.round_type == "Singles"
|