File size: 2,460 Bytes
e3fa7c4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
import pytest
from database.database_layer import Database, DatabaseError
from core.domain import PlanBlock, PlanDraft, Priority, TaskCreate, TaskStatus
TZ = ZoneInfo("Europe/Istanbul")
@pytest.fixture
def database(tmp_path):
db = Database(tmp_path / "planner.db")
db.initialize()
return db
def make_task(title: str = "Sunum") -> TaskCreate:
return TaskCreate(
title=title,
deadline=datetime(2026, 8, 7, 17, 0, tzinfo=TZ),
estimated_minutes=120,
priority=Priority.HIGH,
)
def test_crud_and_session_isolation(database):
task = database.create_task("session-a", make_task())
assert [item.id for item in database.list_tasks("session-a")] == [task.id]
assert database.list_tasks("session-b") == []
assert database.get_task("session-b", task.id) is None
completed = database.update_task_status(
"session-a", task.id, TaskStatus.COMPLETED
)
assert completed.status is TaskStatus.COMPLETED
with pytest.raises(DatabaseError):
database.update_task_status("session-b", task.id, TaskStatus.ACTIVE)
def test_plan_is_saved_atomically(database):
task = database.create_task("session-a", make_task())
start = datetime(2026, 8, 3, 9, 0, tzinfo=TZ)
draft = PlanDraft(
week_start=datetime(2026, 8, 3, tzinfo=TZ),
blocks=[
PlanBlock(
task_id=task.id,
title=task.title,
start=start,
end=start + timedelta(minutes=120),
)
],
unscheduled=[],
)
saved = database.save_plan("session-a", draft)
assert saved[0].scheduled_start == start
assert saved[0].scheduled_end == start + timedelta(minutes=120)
def test_plan_rejects_task_from_another_session(database):
task = database.create_task("session-a", make_task())
start = datetime(2026, 8, 3, 9, 0, tzinfo=TZ)
draft = PlanDraft(
week_start=datetime(2026, 8, 3, tzinfo=TZ),
blocks=[
PlanBlock(
task_id=task.id,
title=task.title,
start=start,
end=start + timedelta(minutes=120),
)
],
unscheduled=[],
)
with pytest.raises(DatabaseError):
database.save_plan("session-b", draft)
assert database.get_task("session-a", task.id).scheduled_start is None
|