Tests/KeycaskCoreTests/KeycaskErrorTests.swift
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}