@@ -16,15 +16,18 @@ import XCTest
16
16
final class CreateKeychainCommandTests : XCTestCase {
17
17
var shell : ShellMock !
18
18
var keychain : KeychainMock !
19
+ var log : LogMock !
19
20
var subject : CreateKeychainCommand !
20
21
21
22
override func setUp( ) {
22
23
super. setUp ( )
23
24
shell = . init( )
24
25
keychain = . init( )
26
+ log = . init( )
25
27
subject = . init(
26
28
shell: shell,
27
29
keychain: keychain,
30
+ log: log,
28
31
keychainName: " keychainName " ,
29
32
keychainPassword: " keychainPassword "
30
33
)
@@ -33,6 +36,7 @@ final class CreateKeychainCommandTests: XCTestCase {
33
36
override func tearDown( ) {
34
37
shell = nil
35
38
keychain = nil
39
+ log = nil
36
40
subject = nil
37
41
super. tearDown ( )
38
42
}
@@ -69,6 +73,21 @@ final class CreateKeychainCommandTests: XCTestCase {
69
73
) . description,
70
74
as: . lines
71
75
)
76
+
77
+ assertSnapshot (
78
+ matching: CreateKeychainCommand . Error. unableToListKeychains (
79
+ output: . init( status: 0 , data: . init( " output " . utf8) , errorData: . init( " errorOutput " . utf8) )
80
+ ) . description,
81
+ as: . lines
82
+ )
83
+
84
+ assertSnapshot (
85
+ matching: CreateKeychainCommand . Error. unableToFindKeychain (
86
+ keychainName: " keychainName " ,
87
+ output: . init( status: 0 , data: . init( " output " . utf8) , errorData: . init( " errorOutput " . utf8) )
88
+ ) . description,
89
+ as: . lines
90
+ )
72
91
}
73
92
74
93
func test_initDecoder( ) throws {
@@ -92,7 +111,8 @@ final class CreateKeychainCommandTests: XCTestCase {
92
111
var executeLaunchPaths : [ ShellOutput ] = [
93
112
. init( status: 1 , data: . init( " createKeychain " . utf8) , errorData: . init( ) ) ,
94
113
. init( status: 0 , data: . init( " updateKeychainLockTimeout " . utf8) , errorData: . init( ) ) ,
95
- . init( status: 0 , data: . init( " unlockKeychain " . utf8) , errorData: . init( ) )
114
+ . init( status: 0 , data: . init( " unlockKeychain " . utf8) , errorData: . init( ) ) ,
115
+ . init( status: 0 , data: . init( " listKeychain " . utf8) , errorData: . init( ) )
96
116
]
97
117
shell. executeLaunchPathHandler = { _, _, _, _ in
98
118
executeLaunchPaths. removeFirst ( )
@@ -119,7 +139,8 @@ final class CreateKeychainCommandTests: XCTestCase {
119
139
var executeLaunchPaths : [ ShellOutput ] = [
120
140
. init( status: 0 , data: . init( " createKeychain " . utf8) , errorData: . init( ) ) ,
121
141
. init( status: 1 , data: . init( " updateKeychainLockTimeout " . utf8) , errorData: . init( ) ) ,
122
- . init( status: 0 , data: . init( " unlockKeychain " . utf8) , errorData: . init( ) )
142
+ . init( status: 0 , data: . init( " unlockKeychain " . utf8) , errorData: . init( ) ) ,
143
+ . init( status: 0 , data: . init( " listKeychain " . utf8) , errorData: . init( ) )
123
144
]
124
145
shell. executeLaunchPathHandler = { _, _, _, _ in
125
146
executeLaunchPaths. removeFirst ( )
@@ -146,7 +167,8 @@ final class CreateKeychainCommandTests: XCTestCase {
146
167
var executeLaunchPaths : [ ShellOutput ] = [
147
168
. init( status: 0 , data: . init( " createKeychain " . utf8) , errorData: . init( ) ) ,
148
169
. init( status: 0 , data: . init( " updateKeychainLockTimeout " . utf8) , errorData: . init( ) ) ,
149
- . init( status: 1 , data: . init( " unlockKeychain " . utf8) , errorData: . init( ) )
170
+ . init( status: 1 , data: . init( " unlockKeychain " . utf8) , errorData: . init( ) ) ,
171
+ . init( status: 0 , data: . init( " listKeychain " . utf8) , errorData: . init( ) ) ,
150
172
]
151
173
shell. executeLaunchPathHandler = { _, _, _, _ in
152
174
executeLaunchPaths. removeFirst ( )
@@ -167,4 +189,60 @@ final class CreateKeychainCommandTests: XCTestCase {
167
189
as: . dump
168
190
)
169
191
}
192
+
193
+ func test_execute_cannotListKeychain( ) throws {
194
+ // GIVEN
195
+ var executeLaunchPaths : [ ShellOutput ] = [
196
+ . init( status: 0 , data: . init( " createKeychain " . utf8) , errorData: . init( ) ) ,
197
+ . init( status: 0 , data: . init( " updateKeychainLockTimeout " . utf8) , errorData: . init( ) ) ,
198
+ . init( status: 0 , data: . init( " unlockKeychain " . utf8) , errorData: . init( ) ) ,
199
+ . init( status: 1 , data: . init( " listKeychain " . utf8) , errorData: . init( ) ) ,
200
+ ]
201
+ shell. executeLaunchPathHandler = { _, _, _, _ in
202
+ executeLaunchPaths. removeFirst ( )
203
+ }
204
+
205
+ // WHEN
206
+ XCTAssertThrowsError ( try subject. run ( ) ) {
207
+ if case CreateKeychainCommand . Error . unableToListKeychains( output: _) = $0 {
208
+ XCTAssertTrue ( true )
209
+ } else {
210
+ XCTFail ( $0. localizedDescription)
211
+ }
212
+ }
213
+
214
+ // THEN
215
+ assertSnapshot (
216
+ matching: shell. executeLaunchPathArgValues,
217
+ as: . dump
218
+ )
219
+ }
220
+
221
+ func test_execute_cannotFindKeychain( ) throws {
222
+ // GIVEN
223
+ var executeLaunchPaths : [ ShellOutput ] = [
224
+ . init( status: 0 , data: . init( " createKeychain " . utf8) , errorData: . init( ) ) ,
225
+ . init( status: 0 , data: . init( " updateKeychainLockTimeout " . utf8) , errorData: . init( ) ) ,
226
+ . init( status: 0 , data: . init( " unlockKeychain " . utf8) , errorData: . init( ) ) ,
227
+ . init( status: 0 , data: . init( " listKeychain " . utf8) , errorData: . init( ) ) ,
228
+ ]
229
+ shell. executeLaunchPathHandler = { _, _, _, _ in
230
+ executeLaunchPaths. removeFirst ( )
231
+ }
232
+
233
+ // WHEN
234
+ XCTAssertThrowsError ( try subject. run ( ) ) {
235
+ if case CreateKeychainCommand . Error . unableToFindKeychain( keychainName: _, output: _) = $0 {
236
+ XCTAssertTrue ( true )
237
+ } else {
238
+ XCTFail ( $0. localizedDescription)
239
+ }
240
+ }
241
+
242
+ // THEN
243
+ assertSnapshot (
244
+ matching: shell. executeLaunchPathArgValues,
245
+ as: . dump
246
+ )
247
+ }
170
248
}
0 commit comments