{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/tests\/unit\/domain\/test_crawl_entity.py",
"content": "from __future__ import annotations\n\nfrom datetime import datetime, timedelta\n\nimport pytest\n\nfrom src.domain.entities.crawl import Crawl\nfrom src.domain.value_objects.enums import CrawlMode, CrawlStatus, TriggerSource\n\n\ndef _crawl(**overrides: object) -> Crawl:\n start = datetime(2026, 4, 21, 12, 0, 0)\n defaults: dict[str, object] = {\n \"id\": None,\n \"base_url\": \"https:\/\/x\",\n \"mode\": CrawlMode.FAST,\n \"started_at\": start,\n \"finished_at\": None,\n \"status\": CrawlStatus.RUNNING,\n \"trigger_source\": TriggerSource.CLI,\n \"config\": {},\n }\n defaults.update(overrides)\n return Crawl(**defaults) # type: ignore[arg-type]\n\n\ndef test_finished_before_start_raises() -> None:\n start = datetime(2026, 4, 21, 12, 0, 0)\n with pytest.raises(ValueError):\n _crawl(finished_at=start - timedelta(seconds=1))\n\n\ndef test_negative_counters_raise() -> None:\n with pytest.raises(ValueError):\n _crawl(total_urls=-1)\n\n\ndef test_is_finished_flag_for_terminal_states() -> None:\n for status in (CrawlStatus.COMPLETED, CrawlStatus.FAILED, CrawlStatus.ABORTED):\n assert _crawl(status=status).is_finished\n assert not _crawl(status=CrawlStatus.RUNNING).is_finished\n"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/tests\/unit\/domain\/test_crawl_entity.py",
"content": "from __future__ import annotations\n\nfrom datetime import datetime, timedelta\n\nimport pytest\n\nfrom src.domain.entities.crawl import Crawl\nfrom src.domain.value_objects.enums import CrawlMode, CrawlStatus, TriggerSource\n\n\ndef _crawl(**overrides: object) -> Crawl:\n start = datetime(2026, 4, 21, 12, 0, 0)\n defaults: dict[str, object] = {\n \"id\": None,\n \"base_url\": \"https:\/\/x\",\n \"mode\": CrawlMode.FAST,\n \"started_at\": start,\n \"finished_at\": None,\n \"status\": CrawlStatus.RUNNING,\n \"trigger_source\": TriggerSource.CLI,\n \"config\": {},\n }\n defaults.update(overrides)\n return Crawl(**defaults) # type: ignore[arg-type]\n\n\ndef test_finished_before_start_raises() -> None:\n start = datetime(2026, 4, 21, 12, 0, 0)\n with pytest.raises(ValueError):\n _crawl(finished_at=start - timedelta(seconds=1))\n\n\ndef test_negative_counters_raise() -> None:\n with pytest.raises(ValueError):\n _crawl(total_urls=-1)\n\n\ndef test_is_finished_flag_for_terminal_states() -> None:\n for status in (CrawlStatus.COMPLETED, CrawlStatus.FAILED, CrawlStatus.ABORTED):\n assert _crawl(status=status).is_finished\n assert not _crawl(status=CrawlStatus.RUNNING).is_finished\n",
"structuredPatch": [],
"originalFile": null,
"userModified": false
}
}