- save_json() now writes to a temp file then uses os.replace() for atomic writes - Replace hardcoded "batch_data", "history_tree", "prompt_history", "sequence_number" strings with constants (KEY_BATCH_DATA, etc.) across all modules - Add 29 unit tests for history_tree, utils, and json_loader - Add type hints to public functions in utils.py, json_loader.py, history_tree.py - Remove ALLOWED_BASE_DIR restriction that blocked navigating outside app CWD - Fix path text input not updating on navigation by using session state key - Add unpin button (❌) for removing pinned folders Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
69 lines
1.7 KiB
Python
69 lines
1.7 KiB
Python
import json
|
|
import os
|
|
|
|
import pytest
|
|
|
|
from json_loader import to_float, to_int, get_batch_item, read_json_data
|
|
|
|
|
|
class TestToFloat:
|
|
def test_valid(self):
|
|
assert to_float("3.14") == 3.14
|
|
assert to_float(5) == 5.0
|
|
|
|
def test_invalid(self):
|
|
assert to_float("abc") == 0.0
|
|
|
|
def test_none(self):
|
|
assert to_float(None) == 0.0
|
|
|
|
|
|
class TestToInt:
|
|
def test_valid(self):
|
|
assert to_int("7") == 7
|
|
assert to_int(3.9) == 3
|
|
|
|
def test_invalid(self):
|
|
assert to_int("xyz") == 0
|
|
|
|
def test_none(self):
|
|
assert to_int(None) == 0
|
|
|
|
|
|
class TestGetBatchItem:
|
|
def test_valid_index(self):
|
|
data = {"batch_data": [{"a": 1}, {"a": 2}, {"a": 3}]}
|
|
assert get_batch_item(data, 2) == {"a": 2}
|
|
|
|
def test_clamp_high(self):
|
|
data = {"batch_data": [{"a": 1}, {"a": 2}]}
|
|
assert get_batch_item(data, 99) == {"a": 2}
|
|
|
|
def test_clamp_low(self):
|
|
data = {"batch_data": [{"a": 1}, {"a": 2}]}
|
|
assert get_batch_item(data, 0) == {"a": 1}
|
|
|
|
def test_no_batch_data(self):
|
|
data = {"key": "val"}
|
|
assert get_batch_item(data, 1) == data
|
|
|
|
|
|
class TestReadJsonData:
|
|
def test_missing_file(self, tmp_path):
|
|
assert read_json_data(str(tmp_path / "nope.json")) == {}
|
|
|
|
def test_invalid_json(self, tmp_path):
|
|
p = tmp_path / "bad.json"
|
|
p.write_text("{broken")
|
|
assert read_json_data(str(p)) == {}
|
|
|
|
def test_non_dict_json(self, tmp_path):
|
|
p = tmp_path / "list.json"
|
|
p.write_text(json.dumps([1, 2, 3]))
|
|
assert read_json_data(str(p)) == {}
|
|
|
|
def test_valid(self, tmp_path):
|
|
p = tmp_path / "ok.json"
|
|
p.write_text(json.dumps({"key": "val"}))
|
|
assert read_json_data(str(p)) == {"key": "val"}
|