Show internet connection warning when uploading keys on log out. (#4027)

* Show the key upload progress when waiting to log out.

Add some basic view model tests too.

* Show a network suggestion if key upload doesn't report any progress during logout.
This commit is contained in:
Doug
2025-04-15 16:47:31 +01:00
committed by GitHub
parent 5ea95913e8
commit c5bb960234
27 changed files with 270 additions and 83 deletions
@@ -14154,15 +14154,15 @@ class SecureBackupControllerMock: SecureBackupControllerProtocol, @unchecked Sen
}
//MARK: - waitForKeyBackupUpload
var waitForKeyBackupUploadUnderlyingCallsCount = 0
var waitForKeyBackupUploadCallsCount: Int {
var waitForKeyBackupUploadUploadStateSubjectUnderlyingCallsCount = 0
var waitForKeyBackupUploadUploadStateSubjectCallsCount: Int {
get {
if Thread.isMainThread {
return waitForKeyBackupUploadUnderlyingCallsCount
return waitForKeyBackupUploadUploadStateSubjectUnderlyingCallsCount
} else {
var returnValue: Int? = nil
DispatchQueue.main.sync {
returnValue = waitForKeyBackupUploadUnderlyingCallsCount
returnValue = waitForKeyBackupUploadUploadStateSubjectUnderlyingCallsCount
}
return returnValue!
@@ -14170,27 +14170,29 @@ class SecureBackupControllerMock: SecureBackupControllerProtocol, @unchecked Sen
}
set {
if Thread.isMainThread {
waitForKeyBackupUploadUnderlyingCallsCount = newValue
waitForKeyBackupUploadUploadStateSubjectUnderlyingCallsCount = newValue
} else {
DispatchQueue.main.sync {
waitForKeyBackupUploadUnderlyingCallsCount = newValue
waitForKeyBackupUploadUploadStateSubjectUnderlyingCallsCount = newValue
}
}
}
}
var waitForKeyBackupUploadCalled: Bool {
return waitForKeyBackupUploadCallsCount > 0
var waitForKeyBackupUploadUploadStateSubjectCalled: Bool {
return waitForKeyBackupUploadUploadStateSubjectCallsCount > 0
}
var waitForKeyBackupUploadUploadStateSubjectReceivedUploadStateSubject: CurrentValueSubject<SecureBackupSteadyState, Never>?
var waitForKeyBackupUploadUploadStateSubjectReceivedInvocations: [CurrentValueSubject<SecureBackupSteadyState, Never>] = []
var waitForKeyBackupUploadUnderlyingReturnValue: Result<Void, SecureBackupControllerError>!
var waitForKeyBackupUploadReturnValue: Result<Void, SecureBackupControllerError>! {
var waitForKeyBackupUploadUploadStateSubjectUnderlyingReturnValue: Result<Void, SecureBackupControllerError>!
var waitForKeyBackupUploadUploadStateSubjectReturnValue: Result<Void, SecureBackupControllerError>! {
get {
if Thread.isMainThread {
return waitForKeyBackupUploadUnderlyingReturnValue
return waitForKeyBackupUploadUploadStateSubjectUnderlyingReturnValue
} else {
var returnValue: Result<Void, SecureBackupControllerError>? = nil
DispatchQueue.main.sync {
returnValue = waitForKeyBackupUploadUnderlyingReturnValue
returnValue = waitForKeyBackupUploadUploadStateSubjectUnderlyingReturnValue
}
return returnValue!
@@ -14198,22 +14200,26 @@ class SecureBackupControllerMock: SecureBackupControllerProtocol, @unchecked Sen
}
set {
if Thread.isMainThread {
waitForKeyBackupUploadUnderlyingReturnValue = newValue
waitForKeyBackupUploadUploadStateSubjectUnderlyingReturnValue = newValue
} else {
DispatchQueue.main.sync {
waitForKeyBackupUploadUnderlyingReturnValue = newValue
waitForKeyBackupUploadUploadStateSubjectUnderlyingReturnValue = newValue
}
}
}
}
var waitForKeyBackupUploadClosure: (() async -> Result<Void, SecureBackupControllerError>)?
var waitForKeyBackupUploadUploadStateSubjectClosure: ((CurrentValueSubject<SecureBackupSteadyState, Never>) async -> Result<Void, SecureBackupControllerError>)?
func waitForKeyBackupUpload() async -> Result<Void, SecureBackupControllerError> {
waitForKeyBackupUploadCallsCount += 1
if let waitForKeyBackupUploadClosure = waitForKeyBackupUploadClosure {
return await waitForKeyBackupUploadClosure()
func waitForKeyBackupUpload(uploadStateSubject: CurrentValueSubject<SecureBackupSteadyState, Never>) async -> Result<Void, SecureBackupControllerError> {
waitForKeyBackupUploadUploadStateSubjectCallsCount += 1
waitForKeyBackupUploadUploadStateSubjectReceivedUploadStateSubject = uploadStateSubject
DispatchQueue.main.async {
self.waitForKeyBackupUploadUploadStateSubjectReceivedInvocations.append(uploadStateSubject)
}
if let waitForKeyBackupUploadUploadStateSubjectClosure = waitForKeyBackupUploadUploadStateSubjectClosure {
return await waitForKeyBackupUploadUploadStateSubjectClosure(uploadStateSubject)
} else {
return waitForKeyBackupUploadReturnValue
return waitForKeyBackupUploadUploadStateSubjectReturnValue
}
}
}