201 lines
8.3 KiB
Swift
201 lines
8.3 KiB
Swift
//
|
|
// Copyright Amazon.com Inc. or its affiliates.
|
|
// All Rights Reserved.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
import XCTest
|
|
@testable import Amplify
|
|
@testable import AmplifyTestCommon
|
|
|
|
class AutoUnsubscribeOperationTests: XCTestCase {
|
|
|
|
override func setUp() async throws {
|
|
await Amplify.reset()
|
|
|
|
let storageConfiguration =
|
|
StorageCategoryConfiguration(plugins: ["MockDispatchingStoragePlugin": nil])
|
|
let config = AmplifyConfiguration(storage: storageConfiguration)
|
|
do {
|
|
try Amplify.add(plugin: MockDispatchingStoragePlugin())
|
|
try Amplify.configure(config)
|
|
} catch {
|
|
XCTFail("Error setting up Amplify: \(error)")
|
|
}
|
|
}
|
|
|
|
override func tearDown() async throws {
|
|
await Amplify.reset()
|
|
}
|
|
|
|
/// - Given: An Amplify operation class
|
|
/// - When: I pass an event listener with no other options to the operation constructor
|
|
/// - Then: The event listener is unsubscribed when it receives a successful result
|
|
func testOperationUnsubscribesOnSuccess() throws {
|
|
throw XCTSkip("Storage listeners removed")
|
|
// TODO: consider rewriting with async API
|
|
|
|
// let listenerWasInvokedForInProcess = expectation(description: "listener was invoked for in process event")
|
|
// listenerWasInvokedForInProcess.isInverted = true
|
|
//
|
|
// let listenerWasInvokedForCompleted = expectation(description: "listener was invoked for completed event")
|
|
//
|
|
// let listenerWasInvokedForFailed = expectation(description: "listener was invoked for failed event")
|
|
// listenerWasInvokedForFailed.isInverted = true
|
|
//
|
|
// let progressListener: ProgressListener = { _ in listenerWasInvokedForInProcess.fulfill() }
|
|
//
|
|
// let amplifyOperation = Amplify.Storage.downloadData(
|
|
// key: "foo",
|
|
// progressListener: progressListener
|
|
// ) { result in
|
|
// switch result {
|
|
// case .success:
|
|
// listenerWasInvokedForCompleted.fulfill()
|
|
// case .failure:
|
|
// listenerWasInvokedForFailed.fulfill()
|
|
// }
|
|
// }
|
|
//
|
|
// guard let operation = amplifyOperation as? MockDispatchingStorageDownloadDataOperation else {
|
|
// XCTFail("Unable to cast amplifyOperation as MockDispatchingStorageListOperation")
|
|
// return
|
|
// }
|
|
//
|
|
// operation.doMockDispatch()
|
|
// wait(for: [listenerWasInvokedForCompleted], timeout: 0.1)
|
|
//
|
|
// operation.doMockProgress()
|
|
// operation.doMockDispatch(result: .failure(StorageError.accessDenied("", "")))
|
|
// wait(for: [listenerWasInvokedForInProcess, listenerWasInvokedForFailed], timeout: 0.1)
|
|
}
|
|
|
|
/// - Given: An Amplify operation class
|
|
/// - When: I pass an event listener with no other options to the operation constructor
|
|
/// - Then: The event listener is unsubscribed when it receives a terminal event (.error)
|
|
func testOperationUnsubscribesOnError() throws {
|
|
throw XCTSkip("Storage listeners removed")
|
|
// TODO: consider rewriting with async API
|
|
|
|
// let listenerWasInvokedForInProcess = expectation(description: "listener was invoked for in process event")
|
|
// listenerWasInvokedForInProcess.isInverted = true
|
|
//
|
|
// let listenerWasInvokedForCompleted = expectation(description: "listener was invoked for completed event")
|
|
// listenerWasInvokedForCompleted.isInverted = true
|
|
//
|
|
// let listenerWasInvokedForFailed = expectation(description: "listener was invoked for failed event")
|
|
//
|
|
// let progressListener: ProgressListener = { _ in listenerWasInvokedForInProcess.fulfill() }
|
|
//
|
|
// let amplifyOperation = Amplify.Storage.downloadData(
|
|
// key: "foo",
|
|
// progressListener: progressListener
|
|
// ) { result in
|
|
// switch result {
|
|
// case .success:
|
|
// listenerWasInvokedForCompleted.fulfill()
|
|
// case .failure:
|
|
// listenerWasInvokedForFailed.fulfill()
|
|
// }
|
|
// }
|
|
//
|
|
// guard let operation = amplifyOperation as? MockDispatchingStorageDownloadDataOperation else {
|
|
// XCTFail("Unable to cast amplifyOperation as MockDispatchingStorageListOperation")
|
|
// return
|
|
// }
|
|
//
|
|
// operation.doMockDispatch(result: .failure(StorageError.accessDenied("", "")))
|
|
// wait(for: [listenerWasInvokedForFailed], timeout: 0.1)
|
|
//
|
|
// operation.doMockProgress()
|
|
// operation.doMockDispatch()
|
|
// wait(for: [listenerWasInvokedForInProcess, listenerWasInvokedForCompleted], timeout: 0.1)
|
|
}
|
|
|
|
/// - Given: An Amplify operation class
|
|
/// - When: I pass an event listener with no other options to the operation constructor
|
|
/// - Then: The event listener is unsubscribed when it receives a terminal event (.completed) after processing in-
|
|
/// progress events
|
|
func testOperationUnsubscribesOnCompleteAfterProgress() throws {
|
|
throw XCTSkip("Storage listeners removed")
|
|
// TODO: consider rewriting with async API
|
|
|
|
// let listenerWasInvokedForInProcess = expectation(description: "listener was invoked for in process event")
|
|
//
|
|
// let listenerWasInvokedForCompleted = expectation(description: "listener was invoked for completed event")
|
|
//
|
|
// let listenerWasInvokedForFailed = expectation(description: "listener was invoked for failed event")
|
|
// listenerWasInvokedForFailed.isInverted = true
|
|
//
|
|
// let progressListener: ProgressListener = { _ in listenerWasInvokedForInProcess.fulfill() }
|
|
//
|
|
// let amplifyOperation = Amplify.Storage.downloadData(
|
|
// key: "foo",
|
|
// progressListener: progressListener
|
|
// ) { result in
|
|
// switch result {
|
|
// case .success:
|
|
// listenerWasInvokedForCompleted.fulfill()
|
|
// case .failure:
|
|
// listenerWasInvokedForFailed.fulfill()
|
|
// }
|
|
// }
|
|
//
|
|
// guard let operation = amplifyOperation as? MockDispatchingStorageDownloadDataOperation else {
|
|
// XCTFail("Unable to cast amplifyOperation as MockDispatchingStorageListOperation")
|
|
// return
|
|
// }
|
|
//
|
|
// operation.doMockProgress()
|
|
// operation.doMockDispatch()
|
|
// wait(for: [listenerWasInvokedForInProcess, listenerWasInvokedForCompleted], timeout: 0.1)
|
|
//
|
|
// operation.doMockDispatch(result: .failure(StorageError.accessDenied("", "")))
|
|
// wait(for: [listenerWasInvokedForFailed], timeout: 0.1)
|
|
}
|
|
|
|
/// - Given: An Amplify operation class
|
|
/// - When: I pass an event listener with no other options to the operation constructor
|
|
/// - Then: The event listener is unsubscribed when it receives a terminal event (.error) after processing in-
|
|
/// progress events
|
|
func testOperationUnsubscribesOnErrorAfterProgress() throws {
|
|
throw XCTSkip("Storage listeners removed")
|
|
// TODO: consider rewriting with async API
|
|
|
|
// let listenerWasInvokedForInProcess = expectation(description: "listener was invoked for in process event")
|
|
//
|
|
// let listenerWasInvokedForCompleted = expectation(description: "listener was invoked for completed event")
|
|
// listenerWasInvokedForCompleted.isInverted = true
|
|
//
|
|
// let listenerWasInvokedForFailed = expectation(description: "listener was invoked for failed event")
|
|
//
|
|
// let progressListener: ProgressListener = { _ in listenerWasInvokedForInProcess.fulfill() }
|
|
//
|
|
// let amplifyOperation = Amplify.Storage.downloadData(
|
|
// key: "foo",
|
|
// progressListener: progressListener
|
|
// ) { result in
|
|
// switch result {
|
|
// case .success:
|
|
// listenerWasInvokedForCompleted.fulfill()
|
|
// case .failure:
|
|
// listenerWasInvokedForFailed.fulfill()
|
|
// }
|
|
// }
|
|
//
|
|
// guard let operation = amplifyOperation as? MockDispatchingStorageDownloadDataOperation else {
|
|
// XCTFail("Unable to cast amplifyOperation as MockDispatchingStorageListOperation")
|
|
// return
|
|
// }
|
|
//
|
|
// operation.doMockProgress()
|
|
// operation.doMockDispatch(result: .failure(StorageError.accessDenied("", "")))
|
|
// wait(for: [listenerWasInvokedForInProcess, listenerWasInvokedForFailed], timeout: 0.1)
|
|
//
|
|
// operation.doMockProgress()
|
|
// wait(for: [listenerWasInvokedForCompleted], timeout: 0.1)
|
|
}
|
|
|
|
}
|