Initial commit
This commit is contained in:
146
Bot/jsonwrapper/tests.py
Normal file
146
Bot/jsonwrapper/tests.py
Normal file
@@ -0,0 +1,146 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user