Add key field to key/value entries

This commit is contained in:
thePR0M3TH3AN
2025-07-28 15:04:56 -04:00
parent d3f2cb8256
commit 4a20817094
17 changed files with 71 additions and 32 deletions

View File

@@ -26,7 +26,7 @@ class DummyPM:
add_pgp_key=lambda label, seed, index=None, key_type="ed25519", user_id="", notes="": 3,
add_nostr_key=lambda label, index=None, notes="": 4,
add_seed=lambda label, seed, index=None, words_num=24, notes="": 5,
add_key_value=lambda label, value, notes="": 6,
add_key_value=lambda label, key, value, notes="": 6,
add_managed_account=lambda label, seed, index=None, notes="": 7,
modify_entry=lambda *a, **kw: None,
archive_entry=lambda i: None,

View File

@@ -90,8 +90,8 @@ runner = CliRunner()
(
"add-key-value",
"add_key_value",
["Label", "--value", "val", "--notes", "note"],
("Label", "val"),
["Label", "--key", "k1", "--value", "val", "--notes", "note"],
("Label", "k1", "val"),
{"notes": "note"},
"7",
),

View File

@@ -73,7 +73,7 @@ def test_round_trip_entry_types(method, expected_type):
entry_mgr.add_totp("example", TEST_SEED)
index = 0
elif method == "add_key_value":
index = entry_mgr.add_key_value("label", "val")
index = entry_mgr.add_key_value("label", "k1", "val")
else:
if method == "add_ssh_key":
index = entry_mgr.add_ssh_key("ssh", TEST_SEED)
@@ -118,7 +118,7 @@ def test_legacy_entry_defaults_to_password():
("add_pgp_key", ("pgp", TEST_SEED)),
("add_nostr_key", ("nostr",)),
("add_seed", ("seed", TEST_SEED)),
("add_key_value", ("label", "val")),
("add_key_value", ("label", "k1", "val")),
("add_managed_account", ("acct", TEST_SEED)),
],
)

View File

@@ -53,16 +53,18 @@ class FakeEntries:
self.added.append(("nostr", label))
return 1
def add_key_value(self, label, value):
self.added.append(("key_value", label, value))
def add_key_value(self, label, key, value):
self.added.append(("key_value", label, key, value))
return 1
def add_managed_account(self, label):
self.added.append(("managed_account", label))
return 1
def modify_entry(self, entry_id, username=None, url=None, label=None, value=None):
self.modified.append((entry_id, username, url, label, value))
def modify_entry(
self, entry_id, username=None, url=None, label=None, key=None, value=None
):
self.modified.append((entry_id, username, url, label, key, value))
def setup_module(module):
@@ -106,7 +108,7 @@ def test_unlock_creates_main_window():
(EntryType.SEED.value, ("seed", "L")),
(EntryType.PGP.value, ("pgp", "L")),
(EntryType.NOSTR.value, ("nostr", "L")),
(EntryType.KEY_VALUE.value, ("key_value", "L", "val")),
(EntryType.KEY_VALUE.value, ("key_value", "L", "k1", "val")),
(EntryType.MANAGED_ACCOUNT.value, ("managed_account", "L")),
],
)
@@ -123,6 +125,7 @@ def test_entrydialog_add_calls_service(kind, expect):
dlg.username_input.value = "u"
dlg.url_input.value = "x"
dlg.length_input.value = 12
dlg.key_input.value = "k1"
dlg.value_input.value = "val"
dlg.save(None)
@@ -136,9 +139,9 @@ def test_entrydialog_add_calls_service(kind, expect):
@pytest.mark.parametrize(
"kind,expected",
[
(EntryType.PASSWORD.value, (1, "newu", "newx", "New", None)),
(EntryType.KEY_VALUE.value, (1, None, None, "New", "val2")),
(EntryType.TOTP.value, (1, None, None, "New", None)),
(EntryType.PASSWORD.value, (1, "newu", "newx", "New", None, None)),
(EntryType.KEY_VALUE.value, (1, None, None, "New", "k2", "val2")),
(EntryType.TOTP.value, (1, None, None, "New", None, None)),
],
)
def test_entrydialog_edit_calls_service(kind, expected):
@@ -157,6 +160,7 @@ def test_entrydialog_edit_calls_service(kind, expected):
dlg.kind_input.value = kind
dlg.username_input.value = "newu"
dlg.url_input.value = "newx"
dlg.key_input.value = "k2"
dlg.value_input.value = "val2"
dlg.save(None)

View File

@@ -23,12 +23,13 @@ def test_add_and_modify_key_value():
tmp_path = Path(tmpdir)
em = setup_entry_mgr(tmp_path)
idx = em.add_key_value("API", "abc123", notes="token")
idx = em.add_key_value("API entry", "api_key", "abc123", notes="token")
entry = em.retrieve_entry(idx)
assert entry == {
"type": "key_value",
"kind": "key_value",
"label": "API",
"label": "API entry",
"key": "api_key",
"value": "abc123",
"notes": "token",
"archived": False,
@@ -36,8 +37,9 @@ def test_add_and_modify_key_value():
"tags": [],
}
em.modify_entry(idx, value="def456")
em.modify_entry(idx, key="api_key2", value="def456")
updated = em.retrieve_entry(idx)
assert updated["key"] == "api_key2"
assert updated["value"] == "def456"
results = em.search_entries("def456")

View File

@@ -38,7 +38,7 @@ def test_handle_list_entries(monkeypatch, capsys):
entry_mgr.add_totp("Example", TEST_SEED)
entry_mgr.add_entry("example.com", 12)
entry_mgr.add_key_value("API", "abc123")
entry_mgr.add_key_value("API entry", "api", "abc123")
entry_mgr.add_managed_account("acct", TEST_SEED)
inputs = iter(["1", ""]) # list all, then exit
@@ -72,7 +72,7 @@ def test_list_entries_show_details(monkeypatch, capsys):
pm.secret_mode_enabled = False
entry_mgr.add_totp("Example", TEST_SEED)
entry_mgr.add_key_value("API", "val")
entry_mgr.add_key_value("API entry", "api", "val")
entry_mgr.add_managed_account("acct", TEST_SEED)
monkeypatch.setattr(pm.entry_manager, "get_totp_code", lambda *a, **k: "123456")
@@ -353,7 +353,7 @@ def test_show_entry_details_sensitive(monkeypatch, capsys, entry_type):
)
expected = "123456"
elif entry_type == "key_value":
idx = entry_mgr.add_key_value("API", "abc")
idx = entry_mgr.add_key_value("API entry", "api", "abc")
expected = "abc"
else: # managed_account
idx = entry_mgr.add_managed_account("acct", TEST_SEED)
@@ -390,8 +390,8 @@ def test_show_entry_details_with_enum_type(monkeypatch, capsys, entry_type):
)
expect = "Label: Example"
else: # KEY_VALUE
idx = entry_mgr.add_key_value("API", "abc")
expect = "API"
idx = entry_mgr.add_key_value("API entry", "api", "abc")
expect = "API entry"
data = entry_mgr._load_index(force_reload=True)
data["entries"][str(idx)]["type"] = entry_type

View File

@@ -93,7 +93,7 @@ def test_search_key_value_value():
tmp_path = Path(tmpdir)
entry_mgr = setup_entry_manager(tmp_path)
idx = entry_mgr.add_key_value("API", "token123")
idx = entry_mgr.add_key_value("API entry", "api", "token123")
result = entry_mgr.search_entries("token123")
assert result == []