krz/keycask

Password manager: Swift core library, CLI for macOS/Linux/Windows, iOS/macOS app. cli password-manager swift

Commit 7c51198959

7c5119895979a08e825be95e82231a353beedf11

parent: bcbfb8db53

Verified · cmc

cmc <hello@cleberg.net> · 2026-09-17 15:19 UTC

Normalize tags in Vault.add

Layout: unified · split

Sources/KeycaskCore/Vault.swift +3 −1
@@ -13,7 +13,9 @@ public struct Vault: Codable, Equatable, Sendable {
13 13
14 public mutating func add(_ entry: Entry) throws { 14 public mutating func add(_ entry: Entry) throws {
15 guard self.entry(id: entry.id) == nil else { throw KeycaskError.duplicateID(entry.id) } 15 guard self.entry(id: entry.id) == nil else { throw KeycaskError.duplicateID(entry.id) }
16 entries.append(entry) 16 var normalized = entry
17 normalized.tags = Entry.normalize(tags: entry.tags)
18 entries.append(normalized)
17 } 19 }
18 20
19 public mutating func remove(id: EntryID) throws { 21 public mutating func remove(id: EntryID) throws {
Tests/KeycaskCoreTests/VaultTests.swift +8
@@ -77,4 +77,12 @@ import Testing
77 try v.add(Entry(id: EntryID("cccc4444")!, name: "Alpha", password: "p")) 77 try v.add(Entry(id: EntryID("cccc4444")!, name: "Alpha", password: "p"))
78 #expect(v.sortedEntries.map(\.id.rawValue) == ["cccc4444", "aaaa2222", "bbbb3333"]) 78 #expect(v.sortedEntries.map(\.id.rawValue) == ["cccc4444", "aaaa2222", "bbbb3333"])
79 } 79 }
80
81 @Test func addNormalizesTagsSetAfterInit() throws {
82 var e = Entry(id: idA(), name: "gh", password: "p")
83 e.tags = ["z", "A", "a", " b "]
84 var v = Vault()
85 try v.add(e)
86 #expect(v.entry(id: idA())!.tags == ["A", "b", "z"])
87 }
80} 88}