[PM-30840] Migrate user personal vault on accept (#2257)

This commit is contained in:
André Bispo 2026-01-16 16:25:36 +00:00 committed by GitHub
parent 9ebeb99e70
commit c191738368
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 43 additions and 4 deletions

View File

@ -89,10 +89,17 @@ final class MigrateToMyItemsProcessor: StateProcessor<
private func acceptTransfer() async {
coordinator.showLoadingOverlay(LoadingOverlayState(title: Localizations.loading))
// TODO: PM-29709 Implement accept transfer API call
defer { coordinator.hideLoadingOverlay() }
coordinator.navigate(to: .dismiss())
do {
try await services.vaultRepository.migratePersonalVault(to: state.organizationId)
coordinator.hideLoadingOverlay()
coordinator.navigate(to: .dismiss())
} catch {
coordinator.hideLoadingOverlay()
await coordinator.showErrorAlert(error: error, onDismissed: {
self.coordinator.navigate(to: .dismiss())
})
services.errorReporter.log(error: error)
}
}
/// Leaves the organization after declining the item transfer.

View File

@ -46,6 +46,38 @@ class MigrateToMyItemsProcessorTests: BitwardenTestCase {
vaultRepository = nil
}
// MARK: Tests - AcceptTransferTapped Effect
/// `perform(_:)` with `.acceptTransferTapped` migrates the personal vault and dismisses.
@MainActor
func test_perform_acceptTransferTapped_success() async {
vaultRepository.migratePersonalVaultResult = .success(())
await subject.perform(.acceptTransferTapped)
XCTAssertEqual(vaultRepository.migratePersonalVaultOrganizationId, "org-123")
XCTAssertEqual(coordinator.routes.last, .dismiss())
XCTAssertTrue(coordinator.alertShown.isEmpty)
}
/// `perform(_:)` with `.acceptTransferTapped` shows an error alert and dismisses when migration fails.
@MainActor
func test_perform_acceptTransferTapped_error() async {
vaultRepository.migratePersonalVaultResult = .failure(BitwardenTestError.example)
await subject.perform(.acceptTransferTapped)
XCTAssertEqual(vaultRepository.migratePersonalVaultOrganizationId, "org-123")
XCTAssertEqual(coordinator.errorAlertsShown.count, 1)
XCTAssertEqual(coordinator.errorAlertsShown.last as? BitwardenTestError, .example)
XCTAssertEqual(errorReporter.errors.last as? BitwardenTestError, .example)
// Simulate alert dismissal to trigger the dismiss navigation.
coordinator.alertOnDismissed?()
XCTAssertEqual(coordinator.routes.last, .dismiss())
}
// MARK: Tests - Appeared Effect
/// `perform(_:)` with `.appeared` loads the organization name from the vault repository.