64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
"""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()
|