mirror of
https://github.com/simon987/Simple-Incremental-Search-Tool.git
synced 2025-04-10 05:56:44 +00:00
237 lines
7.6 KiB
Python
237 lines
7.6 KiB
Python
from unittest import TestCase
|
|
from storage import LocalStorage, Directory, DuplicateDirectoryException, User, DuplicateUserException, Option, Task
|
|
import os
|
|
|
|
dir_name = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
class LocalStorageTest(TestCase):
|
|
|
|
def setUp(self):
|
|
if os.path.exists(dir_name + "/test_database.db"):
|
|
os.remove(dir_name + "/test_database.db")
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
s.init_db(dir_name + "/../database.sql")
|
|
|
|
def test_save_and_retrieve_dir(self):
|
|
|
|
storage = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
d = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val2")], "An excellent name")
|
|
|
|
dir_id = storage.save_directory(d)
|
|
|
|
self.assertEqual(storage.dirs()[dir_id].enabled, True)
|
|
self.assertEqual(storage.dirs()[dir_id].options[0].key, "key1")
|
|
self.assertEqual(storage.dirs()[dir_id].options[0].value, "val1")
|
|
self.assertEqual(storage.dirs()[dir_id].options[0].dir_id, 1)
|
|
|
|
def test_save_and_retrieve_dir_persistent(self):
|
|
|
|
s1 = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
d = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val2")], "An excellent name")
|
|
|
|
dir_id = s1.save_directory(d)
|
|
|
|
s2 = LocalStorage(dir_name + "/test_database.db")
|
|
self.assertEqual(s2.dirs()[dir_id].enabled, True)
|
|
|
|
self.assertEqual(s2.dirs()[dir_id].options[0].key, "key1")
|
|
self.assertEqual(s2.dirs()[dir_id].options[0].value, "val1")
|
|
self.assertEqual(s2.dirs()[dir_id].options[0].dir_id, 1)
|
|
|
|
def test_reject_duplicate_path(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
d1 = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val2")], "An excellent name")
|
|
d2 = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val2")], "An excellent name")
|
|
|
|
s.save_directory(d1)
|
|
|
|
with self.assertRaises(DuplicateDirectoryException) as e:
|
|
s.save_directory(d2)
|
|
|
|
def test_remove_dir(self):
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
d = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val3")], "An excellent name")
|
|
dir_id = s.save_directory(d)
|
|
|
|
s.remove_directory(dir_id)
|
|
|
|
with self.assertRaises(KeyError):
|
|
_ = s.dirs()[dir_id]
|
|
|
|
def test_save_and_retrieve_user(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
u = User("bob", b"anHashedPassword", True)
|
|
|
|
s.save_user(u)
|
|
|
|
self.assertEqual(s.users()["bob"].username, "bob")
|
|
self.assertEqual(s.users()["bob"].admin, True)
|
|
|
|
def test_return_none_with_unknown_user(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
with self.assertRaises(KeyError) as e:
|
|
_ = s.users()["unknown_user"]
|
|
|
|
def test_auth_user(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
u = User("bob", b'$2b$10$RakMb.3n/tl76sK7iVahJuklNYkR7f2Y4dsf73tPANwYBkp4VuJ7.', True)
|
|
|
|
s.save_user(u)
|
|
|
|
self.assertTrue(s.auth_user("bob", "test"))
|
|
self.assertFalse(s.auth_user("bob", "wrong"))
|
|
|
|
pass
|
|
|
|
def test_reject_duplicate_user(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
u1 = User("user1", b"anHashedPassword", True)
|
|
u2 = User("user1", b"anotherHashedPassword", True)
|
|
|
|
s.save_user(u1)
|
|
|
|
with self.assertRaises(DuplicateUserException) as e:
|
|
s.save_user(u2)
|
|
|
|
def test_update_user(self):
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
u = User("neil", b"anHashedPassword", True)
|
|
|
|
s.save_user(u)
|
|
|
|
u.admin = False
|
|
s.update_user(u)
|
|
|
|
self.assertFalse(s.users()["neil"].admin)
|
|
|
|
def test_remove_user(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
u = User("martin", b"anHashedPassword", True)
|
|
s.save_user(u)
|
|
|
|
s.remove_user(u.username)
|
|
|
|
with self.assertRaises(KeyError):
|
|
_ = s.users()["martin"]
|
|
|
|
def test_update_directory(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
d = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val2")], "An excellent name")
|
|
|
|
dir_id = s.save_directory(d)
|
|
|
|
d.name = "A modified name"
|
|
d.enabled = False
|
|
d.path = "/another/directory"
|
|
d.id = dir_id
|
|
|
|
s.update_directory(d)
|
|
|
|
s2 = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
self.assertEqual(s2.dirs()[dir_id].name, "A modified name")
|
|
self.assertEqual(len(s2.dirs()[dir_id].options), 2)
|
|
self.assertEqual(s2.dirs()[dir_id].path, "/another/directory")
|
|
self.assertEqual(s2.dirs()[dir_id].enabled, 0) # enabled = false
|
|
|
|
def test_save_option(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
d = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val2")], "An excellent name")
|
|
dir_id = s.save_directory(d)
|
|
|
|
opt_id = s.save_option(Option("key3", "val3", dir_id))
|
|
|
|
self.assertEqual(s.dirs()[dir_id].options[2].key, "key3")
|
|
self.assertEqual(s.dirs()[dir_id].options[2].value, "val3")
|
|
self.assertEqual(s.dirs()[dir_id].options[2].dir_id, dir_id)
|
|
self.assertEqual(opt_id, 3)
|
|
|
|
def test_del_option(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
d = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val2")], "An excellent name")
|
|
dir_id = s.save_directory(d)
|
|
s.del_option(1)
|
|
|
|
self.assertEqual(len(s.dirs()[dir_id].options), 1)
|
|
self.assertEqual(s.dirs()[dir_id].options[0].key, "key2")
|
|
self.assertEqual(s.dirs()[dir_id].options[0].value, "val2")
|
|
self.assertEqual(s.dirs()[dir_id].options[0].dir_id, 1)
|
|
|
|
def test_update_option(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
d = Directory("/some/directory", True, [Option("key1", "val1"), Option("key2", "val2")], "An excellent name")
|
|
dir_id = s.save_directory(d)
|
|
|
|
s.update_option(Option("key1", "newVal", dir_id, 1))
|
|
|
|
self.assertEqual(s.dirs()[dir_id].options[0].value, "newVal")
|
|
|
|
def test_save_task(self):
|
|
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
dir_id = s.save_directory(Directory("/some/dir", True, [], "my dir"))
|
|
task_id = s.save_task(Task(0, dir_id))
|
|
|
|
self.assertEqual(s.tasks()[task_id].dir_id, dir_id)
|
|
self.assertEqual(task_id, 1)
|
|
|
|
def test_del_task(self):
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
dir_id = s.save_directory(Directory("/some/dir", True, [], "my dir"))
|
|
task_id = s.save_task(Task(0, dir_id))
|
|
|
|
s2 = LocalStorage(dir_name + "/test_database.db")
|
|
s2.tasks()
|
|
s2.del_task(task_id)
|
|
|
|
self.assertEqual(len(s2.tasks()), 0)
|
|
|
|
with self.assertRaises(KeyError):
|
|
_ = s2.tasks()[task_id]
|
|
|
|
def test_set_access(self):
|
|
s = LocalStorage(dir_name + "/test_database.db")
|
|
|
|
dir_id = s.save_directory(Directory("/some/dir", True, [], "my dir"))
|
|
dir_id2 = s.save_directory(Directory("/some/dir2", True, [], "my dir2"))
|
|
dir_id3 = s.save_directory(Directory("/some/dir3", True, [], "my dir3"))
|
|
s.save_user(User("bob", b"", False))
|
|
|
|
s.set_access("bob", dir_id, True)
|
|
s.set_access("bob", dir_id2, True)
|
|
s.set_access("bob", dir_id3, True)
|
|
s.set_access("bob", dir_id3, False)
|
|
|
|
self.assertEqual(s.get_access("bob"), [dir_id, dir_id2])
|
|
|
|
|
|
|