Files
DeletedPosts/Bot/jsonwrapper/tests.py

147 lines
4.4 KiB
Python
Raw Permalink Normal View History

2026-02-23 22:48:25 +00:00
import os
import json
import unittest
from pathlib import Path
from .autosavedict import AutoSaveDict
BASE_DIR = f'{os.sep}'.join(__file__.split(os.sep)[:-1])
class TestAutoSaveDict(unittest.TestCase):
def setUp(self) -> None:
self.path = Path(BASE_DIR) / 'test.json'
self.default = {'a': 1, 'b': 2}
asd = AutoSaveDict(self.path, **self.default)
asd.init()
return super().setUp()
def tearDown(self) -> None:
os.remove(self.path)
return super().tearDown()
def test_init(self) -> None:
asd = AutoSaveDict(self.path, **self.default)
asd.init()
self.assertTrue(os.path.exists(self.path))
self.assertEqual(asd, self.default)
self.assertEqual(asd._pairs, self.default)
self.assertEqual(asd._read(), self.default)
def test_restore(self) -> None:
asd = AutoSaveDict(self.path, **self.default)
asd['c'] = 3
self.assertIn('c', asd)
asd.restore()
self.assertEqual(asd, self.default)
self.assertEqual(asd._read(), self.default)
self.assertEqual(asd._pairs, self.default)
def test_pop(self) -> None:
asd = AutoSaveDict(self.path, **self.default)
asd.init()
key = tuple(self.default.keys())[0]
asd.pop(key)
self.assertNotIn(key, asd._read())
self.assertNotIn(key, asd._pairs)
self.assertNotIn(key, asd)
def test_popitem(self) -> None:
asd = AutoSaveDict(self.path, **self.default)
asd.init()
key = tuple(asd.keys())[-1]
val = asd[key]
result = asd.popitem()
self.assertEqual(result, (key, val))
self.assertNotIn(key, asd)
self.assertNotIn(key, asd._read())
self.assertNotIn(key, asd._pairs)
def test_update(self) -> None:
asd = AutoSaveDict(self.path, **self.default)
asd.init()
new = {'b': 3}
asd.update(new)
self.assertEqual(asd['b'], new['b'])
self.assertEqual(asd._read()['b'], new['b'])
self.assertEqual(asd._pairs['b'], new['b'])
def test_copy(self) -> None:
copy_path = 'test_copy.json'
asd = AutoSaveDict(self.path, **self.default)
asd_copy = asd.copy(copy_path) # type: ignore
asd.init()
asd_copy.init()
self.assertEqual(asd_copy, asd)
self.assertEqual(asd_copy, asd._read())
self.assertEqual(asd_copy, asd._pairs)
os.remove(copy_path)
def test_fromfile(self) -> None:
file = 'test_fromfile.json'
config = {'b': 3, 'c': 4}
with open(file, mode='w') as f:
json.dump(config, f)
os.remove(self.path)
asd = AutoSaveDict.fromfile(file, self.path) # type: ignore
asd.init()
self.assertEqual(config, asd)
self.assertEqual(config, asd._pairs)
self.assertEqual(config, asd._read())
self.assertIsInstance(asd, AutoSaveDict)
os.remove(file)
def test_frommapping(self) -> None:
path = 'test_frommapping.json'
mapping = (
('a', 1),
('b', 2),
('c', 3),
)
expected = dict(mapping)
asd = AutoSaveDict.frommapping(mapping, path) # type: ignore
asd.init()
self.assertEqual(expected, asd)
self.assertEqual(expected, asd._read())
self.assertEqual(expected, asd._pairs)
os.remove(path)
def test_fromkeys(self) -> None:
path = 'test_fromkeys.json'
keys = 'test'
expected = dict.fromkeys(keys)
asd = AutoSaveDict.fromkeys(keys, file_path=path) # type: ignore
asd.init()
self.assertEqual(asd, expected)
self.assertEqual(asd._read(), expected)
self.assertEqual(asd._pairs, expected)
os.remove(path)
def test_setitem(self) -> None:
expected = {**self.default, "z": 3}
asd = AutoSaveDict(self.path, **self.default)
asd['z'] = 3
self.assertEqual(asd, expected)
self.assertEqual(asd._read(), expected)
self.assertEqual(asd._pairs, expected)
def test_delitem(self) -> None:
config = self.default.copy()
key = tuple(config.keys())[0]
asd = AutoSaveDict(self.path, **config)
asd.init()
del config[key]
del asd[key]
self.assertEqual(asd, config)
self.assertEqual(asd._read(), config)
self.assertEqual(asd._pairs, config)