100 lines
3.3 KiB
Swift
100 lines
3.3 KiB
Swift
//
|
|
// Copyright Amazon.com Inc. or its affiliates.
|
|
// All Rights Reserved.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
import XCTest
|
|
import SQLite
|
|
|
|
@testable import Amplify
|
|
@testable import AmplifyTestCommon
|
|
@testable import AWSDataStorePlugin
|
|
@testable import AWSPluginsCore
|
|
|
|
class MutationSyncMetadataMigrationTestBase: XCTestCase {
|
|
var storageAdapter: SQLiteStorageEngineAdapter!
|
|
var modelSchemas: [ModelSchema]!
|
|
|
|
override func setUp() {
|
|
super.setUp()
|
|
Amplify.Logging.logLevel = .debug
|
|
do {
|
|
let connection = try Connection(.inMemory)
|
|
storageAdapter = try SQLiteStorageEngineAdapter(connection: connection)
|
|
modelSchemas = [Restaurant.schema, Menu.schema, Dish.schema]
|
|
} catch {
|
|
XCTFail(String(describing: error))
|
|
return
|
|
}
|
|
}
|
|
|
|
func setUpAllModels() throws {
|
|
try storageAdapter.setUp(modelSchemas: StorageEngine.systemModelSchemas)
|
|
|
|
ModelRegistry.register(modelType: Restaurant.self)
|
|
ModelRegistry.register(modelType: Menu.self)
|
|
ModelRegistry.register(modelType: Dish.self)
|
|
do {
|
|
try storageAdapter.setUp(modelSchemas: modelSchemas)
|
|
} catch {
|
|
XCTFail("Failed to setup storage engine")
|
|
}
|
|
}
|
|
|
|
// MARK: - Helpers
|
|
|
|
func save<M: Model>(_ model: M) {
|
|
let saveSuccess = expectation(description: "Save successful")
|
|
storageAdapter.save(model) { result in
|
|
switch result {
|
|
case .success: saveSuccess.fulfill()
|
|
case .failure(let error): XCTFail("\(error.errorDescription)")
|
|
}
|
|
}
|
|
wait(for: [saveSuccess], timeout: 1)
|
|
}
|
|
|
|
func saveMutationSyncMetadata(_ metadata: MutationSyncMetadata) {
|
|
let saveMetadataSuccess = expectation(description: "Save metadata successful")
|
|
storageAdapter.save(metadata) { result in
|
|
switch result {
|
|
case .success: saveMetadataSuccess.fulfill()
|
|
case .failure(let error): XCTFail("\(error.errorDescription)")
|
|
}
|
|
}
|
|
wait(for: [saveMetadataSuccess], timeout: 1)
|
|
}
|
|
|
|
func queryMutationSyncMetadata() -> [MutationSyncMetadata]? {
|
|
let firstQueryModelSyncMetadata = expectation(description: "query successful")
|
|
var result: [MutationSyncMetadata]?
|
|
storageAdapter.query(MutationSyncMetadata.self) {
|
|
switch $0 {
|
|
case .success(let mutationSyncMetadatas):
|
|
result = mutationSyncMetadatas
|
|
firstQueryModelSyncMetadata.fulfill()
|
|
case .failure(let error): XCTFail("\(error.errorDescription)")
|
|
}
|
|
}
|
|
wait(for: [firstQueryModelSyncMetadata], timeout: 1)
|
|
return result
|
|
}
|
|
|
|
func queryModelSyncMetadata() -> [ModelSyncMetadata]? {
|
|
let queryModelSyncMetadata = expectation(description: "query model sync metadata successful")
|
|
var result: [ModelSyncMetadata]?
|
|
storageAdapter.query(ModelSyncMetadata.self) {
|
|
switch $0 {
|
|
case .success(let modelSyncMetadatas):
|
|
result = modelSyncMetadatas
|
|
queryModelSyncMetadata.fulfill()
|
|
case .failure(let error): XCTFail("\(error.errorDescription)")
|
|
}
|
|
}
|
|
wait(for: [queryModelSyncMetadata], timeout: 1)
|
|
return result
|
|
}
|
|
}
|