test_jobs.py (2341B)
1 import os 2 import shutil 3 import unittest 4 import uuid 5 from datetime import datetime 6 from pathlib import Path 7 8 from lazier.core.jobs import JobStore, build_job_artifact_path, build_job_output_dir 9 10 11 class JobStoreTests(unittest.TestCase): 12 def setUp(self): 13 self.temp_dir = Path(os.getcwd()) / ".tmp-tests" / f"jobs-{uuid.uuid4().hex[:8]}" 14 self.temp_dir.mkdir(parents=True, exist_ok=True) 15 os.environ["LAZIER_DATA_DIR"] = str(self.temp_dir) 16 os.environ["LAZIER_OUTPUT_DIR"] = str(self.temp_dir) 17 self.store = JobStore(self.temp_dir / "jobs.db") 18 19 def tearDown(self): 20 shutil.rmtree(self.temp_dir, ignore_errors=True) 21 22 def test_persists_and_marks_incomplete_jobs_as_interrupted(self): 23 self.store.create_job( 24 { 25 "id": "job-1", 26 "mode": "transcribe", 27 "status": "processing", 28 "progress": 42, 29 "format": "txt", 30 "source_name": "arquivo.mp3", 31 "created_at": "2026-03-31T12:00:00", 32 } 33 ) 34 35 interrupted = self.store.mark_incomplete_as_interrupted() 36 job = self.store.get_job("job-1") 37 38 self.assertEqual(interrupted, 1) 39 self.assertEqual(job["status"], "interrupted") 40 self.assertEqual(job["progress"], 42) 41 self.assertIn("reinicializacao", job["error"]) 42 43 def test_builds_output_paths_with_date_job_and_expected_names(self): 44 created_at = datetime(2026, 3, 31, 15, 45, 0) 45 output_dir = build_job_output_dir( 46 job_id="abc12345-xyz", 47 source_name="Minha Reunião.mp3", 48 created_at=created_at, 49 output_root=self.temp_dir, 50 ) 51 summary_path = build_job_artifact_path( 52 job_id="abc12345-xyz", 53 source_name="Minha Reunião.mp3", 54 format_type="txt", 55 artifact_kind="summary", 56 created_at=created_at, 57 output_root=self.temp_dir, 58 metadata={"title": "Minha Reunião"}, 59 ) 60 61 self.assertIn("2026", str(output_dir)) 62 self.assertIn("03", str(output_dir)) 63 self.assertIn("31", str(output_dir)) 64 self.assertTrue(output_dir.name.startswith("minha-reuniao-abc12345")) 65 self.assertEqual(summary_path.name, "Minha Reunião - sumario.txt")