Skip to content

Commit 6286e72

Browse files
Merge pull request #8513 from woocommerce/feat/8496-delete-on-switch-store
[REST API] Delete application password on switch store
2 parents b79972d + 1aadd31 commit 6286e72

File tree

3 files changed

+77
-1
lines changed

3 files changed

+77
-1
lines changed

WooCommerce/Classes/Yosemite/DefaultStoresManager.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ class DefaultStoresManager: StoresManager {
157157
/// Prepares for changing the selected store and remains Authenticated.
158158
///
159159
func removeDefaultStore() {
160+
sessionManager.deleteApplicationPassword()
160161
ServiceLocator.analytics.refreshUserData()
161162
ZendeskProvider.shared.reset()
162163
ServiceLocator.pushNotesManager.unregisterForRemoteNotifications()

WooCommerce/WooCommerceTests/System/SessionManagerTests.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,29 @@ class SessionManagerTests: XCTestCase {
6262
XCTAssertEqual(retrieved, Settings.wporgCredentials)
6363
}
6464

65+
/// Verifies that application password is deleted upon calling `deleteApplicationPassword`
66+
///
67+
func test_deleteApplicationPassword_deletes_password_from_keychain() {
68+
// Given
69+
manager.defaultCredentials = Settings.wporgCredentials
70+
let storage = ApplicationPasswordStorage(keychain: Keychain(service: Settings.keychainServiceName))
71+
let password = ApplicationPassword(wpOrgUsername: "username", password: Secret("pass"))
72+
73+
// When
74+
storage.saveApplicationPassword(password)
75+
76+
// Then
77+
XCTAssertNotNil(storage.applicationPassword)
78+
79+
// When
80+
manager.deleteApplicationPassword()
81+
82+
// Then
83+
waitUntil {
84+
storage.applicationPassword == nil
85+
}
86+
}
87+
6588
/// Verifies that application password is deleted upon reset
6689
///
6790
func test_application_password_is_deleted_upon_reset() {

WooCommerce/WooCommerceTests/Yosemite/StoresManagerTests.swift

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Combine
33
import XCTest
44
import Networking
55
@testable import WooCommerce
6-
6+
import Yosemite
77

88
/// StoresManager Unit Tests
99
///
@@ -252,6 +252,18 @@ final class StoresManagerTests: XCTestCase {
252252
// Then
253253
XCTAssertTrue(mockProductImageUploader.resetWasCalled)
254254
}
255+
256+
func test_removing_default_store_invokes_delete_application_password() {
257+
// Given
258+
let mockSessionManager = MockSessionManager()
259+
let sut = DefaultStoresManager(sessionManager: mockSessionManager)
260+
261+
// When
262+
sut.removeDefaultStore()
263+
264+
// Then
265+
XCTAssertTrue(mockSessionManager.deleteApplicationPasswordInvoked)
266+
}
255267
}
256268

257269

@@ -274,3 +286,43 @@ final class MockAuthenticationManager: AuthenticationManager {
274286
return UIViewController()
275287
}
276288
}
289+
290+
final class MockSessionManager: SessionManagerProtocol {
291+
private(set) var deleteApplicationPasswordInvoked: Bool = false
292+
293+
var defaultAccount: Yosemite.Account? = nil
294+
295+
var defaultAccountID: Int64? = nil
296+
297+
var defaultSite: Yosemite.Site? = nil
298+
299+
let site = PassthroughSubject<Yosemite.Site?, Never>()
300+
301+
var defaultSitePublisher: AnyPublisher<Yosemite.Site?, Never> {
302+
site.eraseToAnyPublisher()
303+
}
304+
305+
var defaultStoreID: Int64? = nil
306+
307+
var defaultStoreURL: String? = nil
308+
309+
var defaultRoles: [Yosemite.User.Role] = []
310+
311+
let storeID = PassthroughSubject<Int64?, Never>()
312+
313+
var defaultStoreIDPublisher: AnyPublisher<Int64?, Never> {
314+
storeID.eraseToAnyPublisher()
315+
}
316+
317+
var anonymousUserID: String? = nil
318+
319+
var defaultCredentials: Yosemite.Credentials? = nil
320+
321+
func reset() {
322+
// Do nothing
323+
}
324+
325+
func deleteApplicationPassword() {
326+
deleteApplicationPasswordInvoked = true
327+
}
328+
}

0 commit comments

Comments
 (0)