in AmplifyPlugins/DataStore/AWSDataStoreCategoryPluginFlutterIntegrationTests/Connection/DataStoreConnectionScenario2FlutterTests.swift [94:179]
func testUpdateProjectWithAnotherTeam() throws {
try startAmplifyAndWaitForSync()
let plugin: AWSDataStorePlugin = try Amplify.DataStore.getPlugin(for: "awsDataStorePlugin") as! AWSDataStorePlugin
let team = try TeamWrapper(name: "name1")
var anotherTeam = try TeamWrapper(name: "name1")
let project = try Project2Wrapper(name: "project1", team: team.model, teamID: team.idString())
let expectedUpdatedProject = project.copy() as! Project2Wrapper
try expectedUpdatedProject.setTeam(name: "project1", team: anotherTeam.model, teamID: anotherTeam.idString())
let syncUpdatedProjectReceived = expectation(description: "received updated project from sync path")
let hubListener = Amplify.Hub.listen(to: .dataStore,
eventName: HubPayload.EventName.DataStore.syncReceived) { payload in
guard let mutationEvent = payload.data as? MutationEvent else {
XCTFail("Could not cast payload to mutation event")
return
}
if let syncedUpdatedProject = mutationEvent.modelId as String?,
expectedUpdatedProject.idString() == syncedUpdatedProject {
syncUpdatedProjectReceived.fulfill()
}
}
guard try HubListenerTestUtilities.waitForListener(with: hubListener, timeout: 5.0) else {
XCTFail("Listener not registered for hub")
return
}
let saveTeamCompleted = expectation(description: "save team completed")
plugin.save(team.model, modelSchema: Team2.schema) { result in
switch result {
case .success(let savedTeam):
anotherTeam = TeamWrapper(model: savedTeam)
saveTeamCompleted.fulfill()
case .failure(let error):
XCTFail("failed \(error)")
}
}
wait(for: [saveTeamCompleted], timeout: networkTimeout)
let saveAnotherTeamCompleted = expectation(description: "save team completed")
plugin.save(anotherTeam.model, modelSchema: Team2.schema) { result in
switch result {
case .success:
saveAnotherTeamCompleted.fulfill()
case .failure(let error):
XCTFail("failed \(error)")
}
}
wait(for: [saveAnotherTeamCompleted], timeout: networkTimeout)
let saveProjectCompleted = expectation(description: "save project completed")
plugin.save(project.model, modelSchema: Project2.schema) { result in
switch result {
case .success:
saveProjectCompleted.fulfill()
case .failure(let error):
XCTFail("failed \(error)")
}
}
wait(for: [saveProjectCompleted], timeout: networkTimeout)
let updateProjectCompleted = expectation(description: "save project completed")
try project.setTeam(name: "project1", team: anotherTeam.model, teamID: anotherTeam.idString())
plugin.save(project.model, modelSchema: Project2.schema) { result in
switch result {
case .success:
updateProjectCompleted.fulfill()
case .failure(let error):
XCTFail("failed \(error)")
}
}
wait(for: [updateProjectCompleted], timeout: networkTimeout)
let queriedProjectCompleted = expectation(description: "query project completed")
plugin.query(FlutterSerializedModel.self, modelSchema: Project2.schema, where: Project2.keys.id.eq(project.model.id)) { result in
switch result {
case .success(let queriedProjectList):
guard queriedProjectList.count == 1 else {
XCTFail("project query failed")
return
}
let queriedProject = Project2Wrapper(model: queriedProjectList[0])
XCTAssertEqual(queriedProject.idString(), project.idString())
XCTAssertEqual(queriedProject.teamID(), anotherTeam.id())
queriedProjectCompleted.fulfill()
case .failure(let error):
XCTFail("failed \(error)")
}
}
wait(for: [queriedProjectCompleted, syncUpdatedProjectReceived], timeout: networkTimeout)
}