summaryrefslogtreecommitdiff
path: root/tests/test_persistence.py
blob: d8ae25749b4cfac7418b34f1e9229324bffa6136 (plain)
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
from datetime import datetime, timezone
from pathlib import Path
import tempfile
import unittest

from parley.persistence import save_transcript


class PersistenceTests(unittest.TestCase):
    def setUp(self) -> None:
        self.temporary = tempfile.TemporaryDirectory()
        self.directory = Path(self.temporary.name) / "transcripts"
        self.now = datetime(2026, 7, 24, 12, 34, 56, 123456, timezone.utc)

    def tearDown(self) -> None:
        self.temporary.cleanup()

    def test_writes_utf8_with_one_final_newline(self) -> None:
        path = save_transcript("héllo\n\n", self.directory, clock=lambda: self.now)
        self.assertEqual(path.read_text(encoding="utf-8"), "héllo\n")
        self.assertEqual(path.name, "transcript_2026-07-24_12-34-56_123456+0000.txt")

    def test_uses_counter_on_collision(self) -> None:
        first = save_transcript("one", self.directory, clock=lambda: self.now)
        second = save_transcript("two", self.directory, clock=lambda: self.now)
        self.assertNotEqual(first, second)
        self.assertEqual(second.stem[-2:], "_1")
        self.assertEqual(first.read_text(), "one\n")
        self.assertEqual(second.read_text(), "two\n")

    def test_leaves_no_temporary_file(self) -> None:
        save_transcript("text", self.directory, clock=lambda: self.now)
        self.assertFalse(
            any(path.suffix == ".tmp" for path in self.directory.iterdir())
        )


if __name__ == "__main__":
    unittest.main()