"""Tests for core/models.py — domain dataclasses.""" import time import pytest from core.models import ( Bounty, GroupBounty, PersonalBounty, TrackedBounty, GroupData, TrackingData, UserData, ) class TestBounty: def test_create_bounty(self): b = Bounty( id=1, text="Fix the bug", link="https://github.com/example/repo/issues/1", due_date_ts=1735689600, created_at=1735603200, ) assert b.id == 1 assert b.text == "Fix the bug" assert b.link == "https://github.com/example/repo/issues/1" assert b.due_date_ts == 1735689600 assert b.created_at == 1735603200 def test_bounty_optional_fields_can_be_none(self): b = Bounty( id=1, text=None, link=None, due_date_ts=None, created_at=0, ) assert b.text is None assert b.link is None assert b.due_date_ts is None def test_bounty_comparison(self): b1 = Bounty(id=1, text="a", link=None, due_date_ts=None, created_at=0) b2 = Bounty(id=1, text="a", link=None, due_date_ts=None, created_at=0) assert b1 == b2 class TestGroupBounty: def test_create_group_bounty(self): gb = GroupBounty( id=1, text="Group task", link=None, due_date_ts=None, created_at=0, created_by_user_id=123456, ) assert gb.id == 1 assert gb.text == "Group task" assert gb.created_by_user_id == 123456 def test_group_bounty_inherits_from_bounty(self): gb = GroupBounty( id=1, text="Task", link="https://example.com", due_date_ts=int(time.time()), created_at=0, created_by_user_id=999, ) assert isinstance(gb, Bounty) class TestPersonalBounty: def test_create_personal_bounty(self): pb = PersonalBounty( id=1, text="Personal task", link=None, due_date_ts=None, created_at=0, ) assert pb.id == 1 assert pb.text == "Personal task" def test_personal_bounty_inherits_from_bounty(self): pb = PersonalBounty( id=1, text="Task", link=None, due_date_ts=None, created_at=0, ) assert isinstance(pb, Bounty) class TestTrackedBounty: def test_create_tracked_bounty(self): tb = TrackedBounty(bounty_id=5, created_at=1735600000) assert tb.bounty_id == 5 assert tb.created_at == 1735600000 def test_tracked_bounty_comparison(self): tb1 = TrackedBounty(bounty_id=1, created_at=0) tb2 = TrackedBounty(bounty_id=1, created_at=0) assert tb1 == tb2 class TestGroupData: def test_create_group_data(self): gd = GroupData( group_id=-1001, bounties=[], next_id=1, ) assert gd.group_id == -1001 assert gd.bounties == [] assert gd.next_id == 1 def test_group_data_with_bounties(self): gb = GroupBounty( id=1, text="Task", link=None, due_date_ts=None, created_at=0, created_by_user_id=123, ) gd = GroupData(group_id=-1001, bounties=[gb], next_id=2) assert len(gd.bounties) == 1 assert gd.bounties[0].text == "Task" class TestTrackingData: def test_create_tracking_data(self): td = TrackingData(user_id=123456, tracked=[]) assert td.user_id == 123456 assert td.tracked == [] def test_tracking_data_with_tracked(self): tb = TrackedBounty(bounty_id=5, created_at=0) td = TrackingData(user_id=123, tracked=[tb]) assert len(td.tracked) == 1 assert td.tracked[0].bounty_id == 5 class TestUserData: def test_create_user_data(self): ud = UserData(user_id=123456, bounties=[], next_id=1) assert ud.user_id == 123456 assert ud.bounties == [] assert ud.next_id == 1 def test_user_data_with_bounties(self): pb = PersonalBounty( id=1, text="My task", link=None, due_date_ts=None, created_at=0, ) ud = UserData(user_id=123, bounties=[pb], next_id=2) assert len(ud.bounties) == 1 assert ud.bounties[0].text == "My task"