"""Tests for update_state_store.""" from __future__ import annotations import json import os import tempfile import unittest from app.services.update_state_store import ( mark_failed, mark_in_progress, mark_rolled_back, mark_success, read_update_state, update_state_path, write_update_state, ) class UpdateStateStoreTests(unittest.TestCase): def setUp(self) -> None: self._tmp = tempfile.mkdtemp(prefix="wesp-state-") self.base = self._tmp def tearDown(self) -> None: import shutil shutil.rmtree(self._tmp, ignore_errors=True) def test_write_read_cycle(self) -> None: write_update_state(self.base, {"status": "in_progress", "message": "x"}) st = read_update_state(self.base) self.assertEqual(st["status"], "in_progress") self.assertEqual(st["message"], "x") def test_idle_when_missing(self) -> None: self.assertEqual(read_update_state(self.base)["status"], "idle") def test_corrupt_json_returns_idle(self) -> None: os.makedirs(os.path.join(self.base, "data"), exist_ok=True) with open(update_state_path(self.base), "w", encoding="utf-8") as f: f.write("{not json") self.assertEqual(read_update_state(self.base)["status"], "idle") def test_mark_helpers(self) -> None: mark_in_progress( self.base, target_version="2.0.0", previous_version="1.0.0", backup_path="/tmp/b", ) mark_failed(self.base, message="fail", stage="deps") st = read_update_state(self.base) self.assertEqual(st["status"], "failed") mark_rolled_back(self.base, previous_version="1.0.0", message="rolled") self.assertEqual(read_update_state(self.base)["status"], "rolled_back") mark_success(self.base, target_version="2.0.0") self.assertEqual(read_update_state(self.base)["status"], "success") if __name__ == "__main__": unittest.main()