OPEN SOURCE
software/tests/test_orchestration_models.py
このサイトで読み、必要なファイルを保存できます。
日常訳はAIを用いて作成された翻訳です。人間の聖書学・原語の専門家による全訳の検証は確認されていません。既存の翻訳や原語資料と照らし合わせてお読みください。
1"""Tests for orchestration models."""23from __future__ import annotations45from datetime import datetime67import pytest89from src.orchestration.models import (10ALL_BOOKS,11NEW_TESTAMENT_BOOKS,12OLD_TESTAMENT_BOOKS,13BibleJob,14BookJob,15BookResult,16JobResult,17JobStatus,18VerseJob,19)202122class TestJobStatus:23"""Tests for JobStatus enum."""2425def test_status_values(self) -> None:26"""Test that all expected status values exist."""27assert JobStatus.PENDING == "pending"28assert JobStatus.IN_PROGRESS == "in_progress"29assert JobStatus.COMPLETED == "completed"30assert JobStatus.FAILED == "failed"31assert JobStatus.CANCELLED == "cancelled"3233def test_status_is_string_enum(self) -> None:34"""Test that status values can be used as strings."""35assert str(JobStatus.PENDING) == "JobStatus.PENDING"36assert JobStatus.PENDING.value == "pending"373839class TestVerseJob:40"""Tests for VerseJob dataclass."""4142def test_default_values(self) -> None:43"""Test default values for VerseJob."""44job = VerseJob(book="john", chapter=1, verse=1)45assert job.book == "john"46assert job.chapter == 147assert job.verse == 148assert job.status == JobStatus.PENDING49assert job.attempts == 050assert job.last_error is None51assert job.worker_pid is None52assert job.started_at is None53assert job.completed_at is None5455def test_reference_str(self) -> None:56"""Test reference_str property."""57job = VerseJob(book="john", chapter=3, verse=16)58assert job.reference_str == "john:3:16"5960def test_with_values(self) -> None:61"""Test VerseJob with all values set."""62now = datetime.utcnow()63job = VerseJob(64book="genesis",65chapter=1,66verse=1,67status=JobStatus.IN_PROGRESS,68attempts=2,69last_error="Rate limit exceeded",70worker_pid=12345,71started_at=now,72)73assert job.status == JobStatus.IN_PROGRESS74assert job.attempts == 275assert job.last_error == "Rate limit exceeded"76assert job.worker_pid == 1234577assert job.started_at == now787980class TestBookJob:81"""Tests for BookJob dataclass."""8283def test_default_values(self) -> None:84"""Test default values for BookJob."""85job = BookJob(book="john")86assert job.book == "john"87assert job.status == JobStatus.PENDING88assert job.total_verses == 089assert job.completed_verses == 090assert job.failed_verses == 091assert job.worker_pid is None92assert job.started_at is None93assert job.completed_at is None94assert job.error_message is None9596def test_pending_verses(self) -> None:97"""Test pending_verses property."""98job = BookJob(99book="john",100total_verses=100,101completed_verses=50,102failed_verses=10,103)104assert job.pending_verses == 40105106def test_progress_percentage(self) -> None:107"""Test progress_percentage property."""108job = BookJob(109book="john",110total_verses=100,111completed_verses=75,112)113assert job.progress_percentage == 75.0114115def test_progress_percentage_zero_total(self) -> None:116"""Test progress_percentage with zero total."""117job = BookJob(book="john", total_verses=0)118assert job.progress_percentage == 0.0119120121class TestBibleJob:122"""Tests for BibleJob dataclass."""123124def test_default_values(self) -> None:125"""Test default values for BibleJob."""126job = BibleJob()127assert job.job_id is not None128assert len(job.job_id) == 36 # UUID format129assert job.books == []130assert job.status == JobStatus.PENDING131assert job.config_snapshot == {}132assert job.created_at is not None133assert job.started_at is None134assert job.completed_at is None135assert job.total_verses == 0136assert job.completed_verses == 0137assert job.failed_verses == 0138139def test_pending_verses(self) -> None:140"""Test pending_verses property."""141job = BibleJob(142total_verses=1000,143completed_verses=500,144failed_verses=50,145)146assert job.pending_verses == 450147148def test_progress_percentage(self) -> None:149"""Test progress_percentage property."""150job = BibleJob(151total_verses=1000,152completed_verses=250,153)154assert job.progress_percentage == 25.0155156def test_progress_percentage_zero_total(self) -> None:157"""Test progress_percentage with zero total."""158job = BibleJob(total_verses=0)159assert job.progress_percentage == 0.0160161def test_with_books(self) -> None:162"""Test BibleJob with books list."""163job = BibleJob(164books=["john", "matthew", "luke"],165config_snapshot={"model": "test-model"},166)167assert job.books == ["john", "matthew", "luke"]168assert job.config_snapshot == {"model": "test-model"}169170171class TestBookResult:172"""Tests for BookResult dataclass."""173174def test_successful_result(self) -> None:175"""Test successful book result."""176result = BookResult(177book="john",178success=True,179verses_translated=879,180verses_failed=0,181duration_seconds=3600.5,182)183assert result.book == "john"184assert result.success is True185assert result.verses_translated == 879186assert result.verses_failed == 0187assert result.duration_seconds == 3600.5188assert result.error_message is None189190def test_failed_result(self) -> None:191"""Test failed book result."""192result = BookResult(193book="genesis",194success=False,195verses_translated=100,196verses_failed=50,197duration_seconds=1800.0,198error_message="Network error",199)200assert result.success is False201assert result.error_message == "Network error"202203204class TestJobResult:205"""Tests for JobResult dataclass."""206207def test_successful_result(self) -> None:208"""Test successful job result."""209book_results = [210BookResult(211book="john",212success=True,213verses_translated=879,214verses_failed=0,215duration_seconds=3600.0,216),217BookResult(218book="matthew",219success=True,220verses_translated=1071,221verses_failed=5,222duration_seconds=4000.0,223),224]225result = JobResult(226job_id="test-job-123",227success=True,228books_completed=2,229books_failed=0,230total_verses_translated=1950,231total_verses_failed=5,232duration_seconds=7600.0,233book_results=book_results,234)235assert result.job_id == "test-job-123"236assert result.success is True237assert result.books_completed == 2238assert result.books_failed == 0239assert len(result.book_results) == 2240241242class TestBookConstants:243"""Tests for book constants."""244245def test_old_testament_count(self) -> None:246"""Test that OT has 39 books."""247assert len(OLD_TESTAMENT_BOOKS) == 39248249def test_new_testament_count(self) -> None:250"""Test that NT has 27 books."""251assert len(NEW_TESTAMENT_BOOKS) == 27252253def test_all_books_count(self) -> None:254"""Test that all books is 66."""255assert len(ALL_BOOKS) == 66256257def test_all_books_is_ot_plus_nt(self) -> None:258"""Test that ALL_BOOKS = OT + NT."""259assert ALL_BOOKS == OLD_TESTAMENT_BOOKS + NEW_TESTAMENT_BOOKS260261def test_no_duplicate_books(self) -> None:262"""Test there are no duplicate books."""263assert len(set(ALL_BOOKS)) == len(ALL_BOOKS)264265def test_common_ot_books_present(self) -> None:266"""Test that common OT books are present."""267assert "genesis" in OLD_TESTAMENT_BOOKS268assert "exodus" in OLD_TESTAMENT_BOOKS269assert "psalms" in OLD_TESTAMENT_BOOKS270assert "isaiah" in OLD_TESTAMENT_BOOKS271272def test_common_nt_books_present(self) -> None:273"""Test that common NT books are present."""274assert "matthew" in NEW_TESTAMENT_BOOKS275assert "john" in NEW_TESTAMENT_BOOKS276assert "acts" in NEW_TESTAMENT_BOOKS277assert "romans" in NEW_TESTAMENT_BOOKS278assert "revelation" in NEW_TESTAMENT_BOOKS279