import sys
from pathlib import Path
from tempfile import TemporaryDirectory
from cryptography.fernet import Fernet

sys.path.append(str(Path(__file__).resolve().parents[1]))

from password_manager.encryption import EncryptionManager
from password_manager.entry_management import EntryManager
from password_manager.vault import Vault


def test_add_and_retrieve_entry():
    with TemporaryDirectory() as tmpdir:
        key = Fernet.generate_key()
        enc_mgr = EncryptionManager(key, Path(tmpdir))
        vault = Vault(enc_mgr, Path(tmpdir))
        entry_mgr = EntryManager(vault, Path(tmpdir))

        index = entry_mgr.add_entry("example.com", 12, "user")
        entry = entry_mgr.retrieve_entry(index)

        assert entry == {
            "website": "example.com",
            "length": 12,
            "username": "user",
            "url": "",
            "blacklisted": False,
        }

        data = enc_mgr.load_json_data(entry_mgr.index_file)
        assert str(index) in data.get("passwords", {})
        assert data["passwords"][str(index)] == entry
