"""Tests for the keepass password manager.""" import tempfile import unittest from pathlib import Path from typing import override from sshecret.types import BasePasswordReader, PasswordContext from sshecret.keepass import KeepassManager TEST_PASSWORD = "test_password" class Rot13PasswordReader(BasePasswordReader): """This password reader returns the identifier backwards.""" @override def get_password(self, identifier: str, repeated: bool = False) -> str: """Get password.""" return identifier[::-1] class TestKeepass(unittest.TestCase): """Test the keepass password manager.""" def __init__(self, methodName: str = "runTest") -> None: super().__init__(methodName) self.reader_context: PasswordContext @override def setUp(self) -> None: """Set up testing.""" self.reader_context = PasswordContext(Rot13PasswordReader()) def test_db_create(self) -> None: """Test db creation.""" with tempfile.TemporaryDirectory() as testdir: testdbfile = Path(testdir) / "test.kdbx" testdb = KeepassManager.create_database(str(testdbfile.absolute()), self.reader_context) self.assertTrue(testdbfile.exists()) # Close the file and reopen testdb.close_database() with self.assertRaises(RuntimeError): testdb.keepass.version testdb.open_database(self.reader_context) self.assertIsNotNone(testdb.keepass) def test_password_creation(self) -> None: """Test password creation.""" with tempfile.TemporaryDirectory() as testdir: testdbfile = Path(testdir) / "test.kdbx" testdb = KeepassManager.create_database(str(testdbfile.absolute()), self.reader_context) password = testdb.generate_password("foobar") testdb.close_database() testdb.open_database(self.reader_context) saved_password = testdb.get_password("foobar") self.assertEqual(saved_password, password) if __name__ == "__main__": unittest.main()