@@ -51,6 +51,32 @@ class KeychainAccessTokenStoreTests: XCTestCase {
51
51
)
52
52
}
53
53
54
+ func test_accessToken_cachesValueFromKeychain( ) throws {
55
+ let store = KeychainAccessTokenStore ( keychain: mockKeychain)
56
+ mockKeychain. copyMatchingResult = " the-token " . data ( using: . utf8) as CFTypeRef
57
+ mockKeychain. deleteReturnVal = 0
58
+
59
+ _ = store. accessToken // fetch from keychain
60
+ _ = store. accessToken // use in-memory cache
61
+
62
+ XCTAssertEqual ( mockKeychain. copyMatchingCalls. count, 1 )
63
+
64
+ try store. save ( token: " new-token " )
65
+ mockKeychain. copyMatchingResult = " new-token " . data ( using: . utf8) as CFTypeRef
66
+ XCTAssertEqual ( store. accessToken, " new-token " )
67
+ XCTAssertEqual ( store. accessToken, " new-token " )
68
+ XCTAssertEqual ( mockKeychain. copyMatchingCalls. count, 2 )
69
+
70
+ try store. delete ( )
71
+ mockKeychain. copyMatchingResult = nil
72
+ XCTAssertEqual ( store. accessToken, nil )
73
+ XCTAssertEqual ( mockKeychain. copyMatchingCalls. count, 3 )
74
+
75
+ mockKeychain. copyMatchingResult = " even-newer-token " . data ( using: . utf8) as CFTypeRef
76
+ XCTAssertEqual ( store. accessToken, " even-newer-token " )
77
+ XCTAssertEqual ( mockKeychain. copyMatchingCalls. count, 4 )
78
+ }
79
+
54
80
func test_accessToken_whenCopyMatchingSucceeds_returnsDecodedToken( ) {
55
81
mockKeychain. copyMatchingResult = " the-token " . data ( using: . utf8) as CFTypeRef
56
82
let store = KeychainAccessTokenStore ( keychain: mockKeychain)
0 commit comments