in AmplifyPlugins/DataStore/AWSDataStoreCategoryPluginTests/Storage/StorageEngineTestsHasMany.swift [53:114]
func testDeleteParentEmitsMutationEventsForParentAndChild() {
let dreamRestaurant = Restaurant(restaurantName: "Dream Cafe")
let lunchSpecialMenu = Menu(name: "Specials", menuType: .lunch, restaurant: dreamRestaurant)
let lunchStandardMenu = Menu(name: "Standard", menuType: .lunch, restaurant: dreamRestaurant)
let oysters = Dish(dishName: "Fried oysters", menu: lunchSpecialMenu)
let katsuCurry = Dish(dishName: "Katsu Curry", menu: lunchStandardMenu)
let uniPasta = Dish(dishName: "Uni Pasta", menu: lunchStandardMenu)
let smoneysRestaurant = Restaurant(restaurantName: "Smoney's")
let smoneysMenu = Menu(name: "official menu", menuType: .breakfast, restaurant: smoneysRestaurant)
let eggsAndSausage = Dish(dishName: "Eggs and Sausage", menu: smoneysMenu)
let mkDonaldsRestaurant = Restaurant(restaurantName: "MkDonald's")
let mkDonaldsMenu = Menu(name: "All day", menuType: .lunch, restaurant: mkDonaldsRestaurant)
let szechuanSauce = Dish(dishName: "10-piece MkNugget and a bunch of the Szechuan Sauce", menu: mkDonaldsMenu)
guard case .success = saveModelSynchronous(model: dreamRestaurant),
case .success = saveModelSynchronous(model: lunchSpecialMenu),
case .success = saveModelSynchronous(model: lunchStandardMenu),
case .success = saveModelSynchronous(model: oysters),
case .success = saveModelSynchronous(model: katsuCurry),
case .success = saveModelSynchronous(model: uniPasta),
case .success = saveModelSynchronous(model: smoneysRestaurant),
case .success = saveModelSynchronous(model: smoneysMenu),
case .success = saveModelSynchronous(model: eggsAndSausage),
case .success = saveModelSynchronous(model: mkDonaldsRestaurant),
case .success = saveModelSynchronous(model: mkDonaldsMenu),
case .success = saveModelSynchronous(model: szechuanSauce) else {
XCTFail("Failed to save hierarchy")
return
}
guard case .success =
querySingleModelSynchronous(modelType: Restaurant.self,
predicate: Restaurant.keys.id == dreamRestaurant.id) else {
XCTFail("Failed to query Restaurant")
return
}
guard case .success =
queryModelSynchronous(modelType: Menu.self, predicate: Menu.keys.restaurant == dreamRestaurant.id) else {
XCTFail("Failed to query Menu")
return
}
guard case .success(let dishes) =
queryModelSynchronous(modelType: Dish.self, predicate: Dish.keys.menu == lunchStandardMenu.id) else {
XCTFail("Failed to query Dishes")
return
}
XCTAssertEqual(dishes.count, 2)
let receivedMutationEvent = expectation(description: "Mutation Events submitted to sync engine")
receivedMutationEvent.expectedFulfillmentCount = 6
syncEngine.setCallbackOnSubmit(callback: { _ in
receivedMutationEvent.fulfill()
})
guard case .success = deleteModelSynchronousOrFailOtherwise(modelType: Restaurant.self,
withId: dreamRestaurant.id) else {
XCTFail("Failed to delete restaurant")
return
}
wait(for: [receivedMutationEvent], timeout: defaultTimeout)
}