Spaces:
Running
Running
File size: 3,229 Bytes
1d3bf6d | 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import json
from pathlib import Path
import tempfile
import unittest
from unittest.mock import patch
from engine import static_files, prompt_builder
class StaticFilesTests(unittest.TestCase):
def setUp(self):
self.directory = tempfile.TemporaryDirectory()
self.addCleanup(self.directory.cleanup)
self.path = Path(self.directory.name) / 'character.json'
static_files._CACHE.clear()
self.addCleanup(static_files._CACHE.clear)
def test_character_reads_once_and_returns_independent_nested_data(self):
self.path.write_text('{"personality": ["curious"]}')
original = Path.read_text
with patch.object(prompt_builder, 'CHARACTERS_DIR', self.path.parent), patch.object(
Path, 'read_text', autospec=True, side_effect=original
) as read:
first = prompt_builder.load_character('character')
first['personality'].append('changed')
self.assertEqual(prompt_builder.load_character('character')['personality'], ['curious'])
self.assertEqual(read.call_count, 1)
def test_edit_replace_delete_and_invalid_json_do_not_return_stale_data(self):
self.path.write_text('{"name":"a"}')
self.assertEqual(static_files.load_static_json(self.path), {'name': 'a'})
self.path.write_text('{"name":"updated"}')
self.assertEqual(static_files.load_static_json(self.path), {'name': 'updated'})
replacement = self.path.with_suffix('.new')
replacement.write_text('{"name":"replacement"}')
replacement.replace(self.path)
self.assertEqual(static_files.load_static_json(self.path), {'name': 'replacement'})
self.path.write_text('{invalid')
with self.assertRaises(json.JSONDecodeError):
static_files.load_static_json(self.path)
self.path.unlink()
with self.assertRaises(FileNotFoundError):
static_files.load_static_json(self.path)
self.path.write_text('{}')
self.assertEqual(static_files.load_static_json(self.path), {})
def test_prompt_text_is_cached_and_refreshes(self):
self.path.write_text(' Türkçe\n')
original = Path.read_text
with patch.object(Path, 'read_text', autospec=True, side_effect=original) as read:
for _ in range(2):
self.assertEqual(static_files.load_static_text(self.path), ' Türkçe\n')
self.assertEqual(read.call_count, 1)
self.path.write_text('New prompt')
self.assertEqual(static_files.load_static_text(self.path), 'New prompt')
self.assertEqual(read.call_count, 2)
def test_cache_evicts_least_recently_used_file(self):
with patch.object(static_files, '_MAX_ENTRIES', 2):
paths = [self.path.with_name(str(i)) for i in range(3)]
for path in paths:
path.write_text(path.name)
for path in paths[:2]:
static_files.load_static_text(path)
static_files.load_static_text(paths[0])
static_files.load_static_text(paths[2])
self.assertEqual(len(static_files._CACHE), 2)
self.assertNotIn((paths[1].resolve(), False), static_files._CACHE)
|