in AmplifyPlugins/DataStore/AWSDataStoreCategoryPluginIntegrationTests/TransformerV2/DataStoreConnectionScenario8V2Tests.swift [220:309]
func testDeleteRegistration() throws {
try startAmplifyAndWaitForSync()
guard let attendee = saveAttendee(),
let meeting = saveMeeting(),
let registration = saveRegistration(meeting: meeting, attendee: attendee) else {
XCTFail("Could not create attendee, meeting, registration")
return
}
let createReceived = expectation(description: "Create notification received")
createReceived.expectedFulfillmentCount = 3 // 3 models (1 attendee and 1 meeting and 1 registration)
let deleteRegistrationRecieved = expectation(description: "Delete registration received")
let hubListener = Amplify.Hub.listen(
to: .dataStore,
eventName: HubPayload.EventName.DataStore.syncReceived) { payload in
guard let mutationEvent = payload.data as? MutationEvent
else {
XCTFail("Can't cast payload as mutation event")
return
}
if let attendeeEvent = try? mutationEvent.decodeModel() as? Attendee8V2,
attendeeEvent.id == attendee.id {
if mutationEvent.mutationType == GraphQLMutationType.create.rawValue {
XCTAssertEqual(mutationEvent.version, 1)
createReceived.fulfill()
return
}
}
if let meetingEvent = try? mutationEvent.decodeModel() as? Meeting8V2, meetingEvent.id == meeting.id {
if mutationEvent.mutationType == GraphQLMutationType.create.rawValue {
XCTAssertEqual(meetingEvent.title, meeting.title)
XCTAssertEqual(mutationEvent.version, 1)
createReceived.fulfill()
return
}
}
if let registrationEvent = try? mutationEvent.decodeModel() as? Registration8V2,
registrationEvent.id == registration.id {
if mutationEvent.mutationType == GraphQLMutationType.create.rawValue {
XCTAssertEqual(mutationEvent.version, 1)
createReceived.fulfill()
return
} else if mutationEvent.mutationType == GraphQLMutationType.delete.rawValue {
XCTAssertEqual(mutationEvent.version, 2)
deleteRegistrationRecieved.fulfill()
}
}
}
guard try HubListenerTestUtilities.waitForListener(with: hubListener, timeout: 5.0) else {
XCTFail("Listener not registered for hub")
return
}
wait(for: [createReceived], timeout: TestCommonConstants.networkTimeout)
let deleteCompleted = expectation(description: "delete completed")
Amplify.DataStore.delete(Registration8V2.self, withId: registration.id) { result in
switch result {
case .success:
deleteCompleted.fulfill()
case .failure(let response): XCTFail("Failed with: \(response)")
}
}
wait(for: [deleteCompleted, deleteRegistrationRecieved], timeout: TestCommonConstants.networkTimeout)
let getAttendeeCompleted = expectation(description: "get attendee completed")
Amplify.DataStore.query(Attendee8V2.self, byId: attendee.id) { result in
switch result {
case .success(let queriedAttendeeOptional):
guard let queriedAttendee = queriedAttendeeOptional else {
XCTFail("Could not get attendee")
return
}
XCTAssertEqual(queriedAttendee.meetings?.count, 0)
getAttendeeCompleted.fulfill()
case .failure(let response): XCTFail("Failed with: \(response)")
}
}
wait(for: [getAttendeeCompleted], timeout: TestCommonConstants.networkTimeout)
let getMeetingCompleted = expectation(description: "get meeting completed")
Amplify.DataStore.query(Meeting8V2.self, byId: meeting.id) { result in
switch result {
case .success(let queriedMeetingOptional):
guard let queriedMeeting = queriedMeetingOptional else {
XCTFail("Could not get meeting")
return
}
XCTAssertEqual(queriedMeeting.attendees?.count, 0)
getMeetingCompleted.fulfill()
case .failure(let response): XCTFail("Failed with: \(response)")
}
}
wait(for: [getMeetingCompleted], timeout: TestCommonConstants.networkTimeout)
}