amplify-swift/AmplifyPlugins/DataStore/Tests/AWSDataStorePluginTests/Sync/InitialSync/ReadyEventEmitterTests.swift

51 lines
1.6 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import Foundation
import XCTest
import SQLite
import Combine
@testable import Amplify
@testable import AmplifyTestCommon
@testable import AWSPluginsCore
@testable import AWSDataStorePlugin
class ReadyEventEmitterTests: XCTestCase {
var stateMachine: MockStateMachine<RemoteSyncEngine.State, RemoteSyncEngine.Action>!
var readyEventEmitter: ReadyEventEmitter?
var readyEventSink: AnyCancellable?
override func setUp() {
super.setUp()
}
func testReadyEventReceived() throws {
let readyReceived = expectation(description: "ready received")
readyReceived.assertForOverFulfill = false
let remoteSyncTopicPublisher = PassthroughSubject<RemoteSyncEngineEvent, DataStoreError>()
readyEventEmitter =
ReadyEventEmitter(remoteSyncEnginePublisher: remoteSyncTopicPublisher.eraseToAnyPublisher())
readyEventSink = readyEventEmitter?.publisher.sink(receiveCompletion: { _ in
XCTFail("Should not receive completion")
}, receiveValue: { event in
switch event {
case .readyEvent:
readyReceived.fulfill()
}
})
remoteSyncTopicPublisher.send(.syncStarted)
let syncQueriesReadyEventPayload = HubPayload(eventName: HubPayload.EventName.DataStore.syncQueriesReady)
Amplify.Hub.dispatch(to: .dataStore, payload: syncQueriesReadyEventPayload)
wait(for: [readyReceived], timeout: 1)
readyEventSink?.cancel()
}
}