krz/keycask

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

Tests/KeycaskCoreTests/KeycaskErrorTests.swift

v0.1.0
keycask/Tests/KeycaskCoreTests/KeycaskErrorTests.swift history · blame · raw

38 lines · 1773 bytes

 1import Testing
 2
 3@testable import KeycaskCore
 4
 5@Suite struct KeycaskErrorTests {
 6    @Test func exitCodesFollowTheSpec() {
 7        #expect(KeycaskError.failure("x").exitCode == 1)
 8        #expect(KeycaskError.io("x").exitCode == 1)
 9        #expect(KeycaskError.corrupt("x").exitCode == 1)
10        #expect(KeycaskError.vaultExists("x").exitCode == 1)
11        #expect(KeycaskError.duplicateID(EntryID("abcd2345")!).exitCode == 1)
12        #expect(KeycaskError.usage("x").exitCode == 2)
13        #expect(KeycaskError.notFound("x").exitCode == 3)
14        #expect(KeycaskError.noVault("/p").exitCode == 3)
15        #expect(KeycaskError.cannotDecrypt.exitCode == 4)
16        #expect(KeycaskError.ambiguous(name: "gh", candidates: []).exitCode == 5)
17    }
18
19    @Test func messagesNameTheSubject() {
20        #expect(KeycaskError.notFound("gh").message == "gh: not found")
21        #expect(KeycaskError.noVault("/v").message == "vault /v not found (run `keycask init`)")
22        #expect(KeycaskError.vaultExists("/v").message == "vault /v already exists")
23        #expect(
24            KeycaskError.cannotDecrypt.message
25                == "cannot decrypt: wrong passphrase or damaged vault")
26        #expect(KeycaskError.corrupt("bad json").message == "vault is corrupt: bad json")
27    }
28
29    @Test func ambiguousListsCandidateIDs() {
30        let a = Entry(id: EntryID("aaaa2222")!, name: "gh", username: "one", password: "p")
31        let b = Entry(id: EntryID("bbbb3333")!, name: "gh", password: "p", url: "https://x")
32        let m = KeycaskError.ambiguous(name: "gh", candidates: [a, b]).message
33        #expect(m.hasPrefix("gh: ambiguous, use an id:\n"))
34        #expect(m.contains("aaaa2222"))
35        #expect(m.contains("bbbb3333"))
36        #expect(m.contains("https://x"))
37    }
38}