Skip to content

Commit c621b02

Browse files
[PM-15416] Change pull-to-refresh to not force a sync (#1172)
1 parent 4d9d912 commit c621b02

File tree

11 files changed

+38
-33
lines changed

11 files changed

+38
-33
lines changed

BitwardenShared/Core/Tools/Repositories/SendRepository.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ public protocol SendRepository: AnyObject {
4444
/// Performs an API request to sync the user's send data. The publishers in the repository can
4545
/// be used to subscribe to the send data, which are updated as a result of the request.
4646
///
47-
/// - Parameter isManualRefresh: Whether the sync is being performed as a manual refresh.
47+
/// - Parameter forceSync: Whether the sync should be forced.
4848
///
49-
func fetchSync(isManualRefresh: Bool) async throws
49+
func fetchSync(forceSync: Bool) async throws
5050

5151
/// Performs an API request to remove the password on the provided send.
5252
///
@@ -216,10 +216,10 @@ class DefaultSendRepository: SendRepository {
216216

217217
// MARK: API Methods
218218

219-
func fetchSync(isManualRefresh: Bool) async throws {
219+
func fetchSync(forceSync: Bool) async throws {
220220
let allowSyncOnRefresh = try await stateService.getAllowSyncOnRefresh()
221-
if !isManualRefresh || allowSyncOnRefresh {
222-
try await syncService.fetchSync(forceSync: isManualRefresh)
221+
if !forceSync || allowSyncOnRefresh {
222+
try await syncService.fetchSync(forceSync: forceSync)
223223
}
224224
}
225225

BitwardenShared/Core/Tools/Repositories/SendRepositoryTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,35 +163,35 @@ class SendRepositoryTests: BitwardenTestCase { // swiftlint:disable:this type_bo
163163
XCTAssertFalse(isVerified)
164164
}
165165

166-
/// `fetchSync(isManualRefresh:)` while manual refresh is allowed does perform a sync.
166+
/// `fetchSync(forceSync:)` while manual refresh is allowed does perform a sync.
167167
func test_fetchSync_manualRefreshAllowed_success() async throws {
168168
await stateService.addAccount(.fixture())
169169
stateService.allowSyncOnRefresh = ["1": true]
170170
syncService.fetchSyncResult = .success(())
171171

172-
try await subject.fetchSync(isManualRefresh: true)
172+
try await subject.fetchSync(forceSync: true)
173173

174174
XCTAssertTrue(syncService.didFetchSync)
175175
}
176176

177-
/// `fetchSync(isManualRefresh:)` while manual refresh is not allowed does not perform a sync.
177+
/// `fetchSync(forceSync:)` while manual refresh is not allowed does not perform a sync.
178178
func test_fetchSync_manualRefreshNotAllowed_success() async throws {
179179
await stateService.addAccount(.fixture())
180180
stateService.allowSyncOnRefresh = [:]
181181
syncService.fetchSyncResult = .success(())
182182

183-
try await subject.fetchSync(isManualRefresh: true)
183+
try await subject.fetchSync(forceSync: true)
184184

185185
XCTAssertFalse(syncService.didFetchSync)
186186
}
187187

188-
/// `fetchSync(isManualRefresh:)` and a failure performs a sync and throws the error.
188+
/// `fetchSync(forceSync:)` and a failure performs a sync and throws the error.
189189
func test_fetchSync_failure() async throws {
190190
await stateService.addAccount(.fixture())
191191
stateService.allowSyncOnRefresh = ["1": true]
192192
syncService.fetchSyncResult = .failure(BitwardenTestError.example)
193193
await assertAsyncThrows {
194-
try await subject.fetchSync(isManualRefresh: true)
194+
try await subject.fetchSync(forceSync: true)
195195
}
196196
XCTAssertTrue(syncService.didFetchSync)
197197
}

BitwardenShared/Core/Tools/Repositories/TestHelpers/MockSendRepository.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class MockSendRepository: SendRepository {
1414
var doesActiveAccountHaveVerifiedEmailResult: Result<Bool, Error> = .success(true)
1515

1616
var fetchSyncCalled = false
17-
var fetchSyncIsManualRefresh: Bool?
17+
var fetchSyncForceSync: Bool?
1818
var fetchSyncResult: Result<Void, Error> = .success(())
1919

2020
var searchSendSearchText: String?
@@ -81,9 +81,9 @@ class MockSendRepository: SendRepository {
8181
try doesActiveAccountHaveVerifiedEmailResult.get()
8282
}
8383

84-
func fetchSync(isManualRefresh: Bool) async throws {
84+
func fetchSync(forceSync: Bool) async throws {
8585
fetchSyncCalled = true
86-
fetchSyncIsManualRefresh = isManualRefresh
86+
fetchSyncForceSync = forceSync
8787
try fetchSyncResult.get()
8888
}
8989

BitwardenShared/Core/Vault/Repositories/TestHelpers/MockVaultRepository.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class MockVaultRepository: VaultRepository {
4444
var fetchFoldersResult: Result<[FolderView], Error> = .success([])
4545

4646
var fetchSyncCalled = false
47+
var fetchSyncForceSync: Bool?
4748
var fetchSyncResult: Result<[VaultListSection]?, Error> = .success([])
4849

4950
var getActiveAccountIdResult: Result<String, StateServiceError> = .failure(.noActiveAccount)
@@ -182,10 +183,11 @@ class MockVaultRepository: VaultRepository {
182183
}
183184

184185
func fetchSync(
185-
isManualRefresh _: Bool,
186+
forceSync: Bool,
186187
filter _: VaultFilterType
187188
) async throws -> [VaultListSection]? {
188189
fetchSyncCalled = true
190+
fetchSyncForceSync = forceSync
189191
return try fetchSyncResult.get()
190192
}
191193

BitwardenShared/Core/Vault/Repositories/VaultRepository.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public protocol VaultRepository: AnyObject {
1717
/// - Returns: If a sync is performed without error, this returns `[VaultListSection]` to display.
1818
///
1919
@discardableResult
20-
func fetchSync(isManualRefresh: Bool, filter: VaultFilterType) async throws -> [VaultListSection]?
20+
func fetchSync(forceSync: Bool, filter: VaultFilterType) async throws -> [VaultListSection]?
2121

2222
// MARK: Data Methods
2323

@@ -928,10 +928,10 @@ extension DefaultVaultRepository: VaultRepository {
928928
// MARK: API Methods
929929

930930
@discardableResult
931-
func fetchSync(isManualRefresh: Bool, filter: VaultFilterType) async throws -> [VaultListSection]? {
931+
func fetchSync(forceSync: Bool, filter: VaultFilterType) async throws -> [VaultListSection]? {
932932
let allowSyncOnRefresh = try await stateService.getAllowSyncOnRefresh()
933-
guard !isManualRefresh || allowSyncOnRefresh else { return nil }
934-
try await syncService.fetchSync(forceSync: isManualRefresh)
933+
guard !forceSync || allowSyncOnRefresh else { return nil }
934+
try await syncService.fetchSync(forceSync: forceSync)
935935
let ciphers = try await cipherService.fetchAllCiphers()
936936
let collections = try await collectionService.fetchAllCollections(includeReadOnly: true)
937937
let folders = try await folderService.fetchAllFolders()

BitwardenShared/Core/Vault/Repositories/VaultRepositoryTests.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -807,13 +807,13 @@ class VaultRepositoryTests: BitwardenTestCase { // swiftlint:disable:this type_b
807807
XCTAssertEqual(clientService.mockVault.clientFolders.decryptedFolders, folders)
808808
}
809809

810-
/// `fetchSync(isManualRefresh:)` only syncs when expected.
810+
/// `fetchSync(forceSync:)` only syncs when expected.
811811
func test_fetchSync() async throws {
812812
stateService.activeAccount = .fixture()
813813

814814
// If it's not a manual refresh, it should sync.
815815
let automaticSections = try await subject.fetchSync(
816-
isManualRefresh: false,
816+
forceSync: false,
817817
filter: .allVaults
818818
)
819819
XCTAssertTrue(syncService.didFetchSync)
@@ -824,7 +824,7 @@ class VaultRepositoryTests: BitwardenTestCase { // swiftlint:disable:this type_b
824824
syncService.didFetchSync = false
825825
stateService.allowSyncOnRefresh["1"] = true
826826
let manualSections = try await subject.fetchSync(
827-
isManualRefresh: true,
827+
forceSync: true,
828828
filter: .myVault
829829
)
830830
XCTAssertTrue(syncService.didFetchSync)
@@ -834,7 +834,10 @@ class VaultRepositoryTests: BitwardenTestCase { // swiftlint:disable:this type_b
834834
// it should not sync.
835835
syncService.didFetchSync = false
836836
stateService.allowSyncOnRefresh["1"] = false
837-
let nilSections = try await subject.fetchSync(isManualRefresh: true, filter: .allVaults)
837+
let nilSections = try await subject.fetchSync(
838+
forceSync: true,
839+
filter: .allVaults
840+
)
838841
XCTAssertFalse(syncService.didFetchSync)
839842
XCTAssertNil(nilSections)
840843
}

BitwardenShared/UI/Tools/Send/Send/SendList/SendListProcessor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ final class SendListProcessor: StateProcessor<SendListState, SendListAction, Sen
114114
///
115115
private func refresh() async {
116116
do {
117-
try await services.sendRepository.fetchSync(isManualRefresh: true)
117+
try await services.sendRepository.fetchSync(forceSync: false)
118118
} catch {
119119
let alert = Alert.networkResponseError(error) { [weak self] in
120120
await self?.refresh()

BitwardenShared/UI/Tools/Send/Send/SendList/SendListProcessorTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,12 @@ class SendListProcessorTests: BitwardenTestCase { // swiftlint:disable:this type
6161
XCTAssertTrue(subject.state.isSendDisabled)
6262
}
6363

64-
/// `perform(_:)` with `refresh` calls the refresh method.
64+
/// `perform(_:)` with `refresh` requests a fetch sync update, but does not force a sync.
6565
func test_perform_refresh() async {
6666
await subject.perform(.refresh)
6767

6868
XCTAssertTrue(sendRepository.fetchSyncCalled)
69+
XCTAssertEqual(sendRepository.fetchSyncForceSync, false)
6970
}
7071

7172
/// `perform(_:)` with `search(_:)` and an empty search query returns early.

BitwardenShared/UI/Vault/Vault/VaultGroup/VaultGroupProcessor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ final class VaultGroupProcessor: StateProcessor<
203203
///
204204
private func refreshVaultGroup() async {
205205
do {
206-
try await services.vaultRepository.fetchSync(isManualRefresh: true, filter: state.vaultFilterType)
206+
try await services.vaultRepository.fetchSync(forceSync: true, filter: state.vaultFilterType)
207207
} catch {
208208
coordinator.showAlert(.networkResponseError(error))
209209
services.errorReporter.log(error: error)

BitwardenShared/UI/Vault/Vault/VaultList/VaultListProcessor.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ final class VaultListProcessor: StateProcessor<
6565
override func perform(_ effect: VaultListEffect) async {
6666
switch effect {
6767
case .appeared:
68-
await refreshVault(isManualRefresh: false)
68+
await refreshVault()
6969
await handleNotifications()
7070
await checkPendingLoginRequests()
7171
await checkPersonalOwnershipPolicy()
@@ -86,7 +86,7 @@ final class VaultListProcessor: StateProcessor<
8686
case .refreshAccountProfiles:
8787
await refreshProfileState()
8888
case .refreshVault:
89-
await refreshVault(isManualRefresh: true)
89+
await refreshVault()
9090
case let .search(text):
9191
state.searchResults = await searchVault(for: text)
9292
case .streamAccountSetupProgress:
@@ -195,12 +195,10 @@ extension VaultListProcessor {
195195

196196
/// Refreshes the vault's contents.
197197
///
198-
/// - Parameter isManualRefresh: Whether the sync is being performed as a manual refresh.
199-
///
200-
private func refreshVault(isManualRefresh: Bool) async {
198+
private func refreshVault() async {
201199
do {
202200
guard let sections = try await services.vaultRepository.fetchSync(
203-
isManualRefresh: isManualRefresh,
201+
forceSync: false,
204202
filter: state.vaultFilterType
205203
) else { return }
206204
state.loadingState = .data(sections)

BitwardenShared/UI/Vault/Vault/VaultList/VaultListProcessorTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,12 +421,13 @@ class VaultListProcessorTests: BitwardenTestCase { // swiftlint:disable:this typ
421421
XCTAssertEqual(subject.state.url, url)
422422
}
423423

424-
/// `perform(_:)` with `.refreshed` requests a fetch sync update with the vault repository.
424+
/// `perform(_:)` with `.refreshed` requests a fetch sync update, but does not force a sync.
425425
@MainActor
426426
func test_perform_refresh() async {
427427
await subject.perform(.refreshVault)
428428

429429
XCTAssertTrue(vaultRepository.fetchSyncCalled)
430+
XCTAssertEqual(vaultRepository.fetchSyncForceSync, false)
430431
}
431432

432433
/// `perform(_:)` with `.refreshed` records an error if applicable.

0 commit comments

Comments
 (0)