in ApolloTests/WatchQueryTests.swift [133:193]
func testWatchedQueryDoesNotRefetchAfterUnrelatedQuery() throws {
let initialRecords: RecordSet = [
"QUERY_ROOT": ["hero": Reference(key: "QUERY_ROOT.hero")],
"QUERY_ROOT.hero": [
"name": "R2-D2",
"__typename": "Droid",
"friends": [
Reference(key: "QUERY_ROOT.hero.friends.0"),
Reference(key: "QUERY_ROOT.hero.friends.1"),
Reference(key: "QUERY_ROOT.hero.friends.2")
]
],
"QUERY_ROOT.hero.friends.0": ["__typename": "Human", "name": "Luke Skywalker"],
"QUERY_ROOT.hero.friends.1": ["__typename": "Human", "name": "Han Solo"],
"QUERY_ROOT.hero.friends.2": ["__typename": "Human", "name": "Leia Organa"],
]
withCache(initialRecords: initialRecords) { (cache) in
let networkTransport = MockNetworkTransport(body: [
"data": [
"hero": [
"name": "Artoo",
"__typename": "Droid"
]
]
])
let store = ApolloStore(cache: cache)
let client = ApolloClient(networkTransport: networkTransport, store: store)
let query = HeroAndFriendsNamesQuery()
var verifyResult: OperationResultHandler<HeroAndFriendsNamesQuery>
verifyResult = { (result, error) in
XCTAssertNil(error)
XCTAssertNil(result?.errors)
guard let data = result?.data else { XCTFail(); return }
XCTAssertEqual(data.hero?.name, "R2-D2")
let friendsNames = data.hero?.friends?.compactMap { $0?.name }
XCTAssertEqual(friendsNames, ["Luke Skywalker", "Han Solo", "Leia Organa"])
}
let expectation = self.expectation(description: "Fetching query")
_ = client.watch(query: query) { (result, error) in
verifyResult(result, error)
expectation.fulfill()
}
waitForExpectations(timeout: 5, handler: nil)
verifyResult = { (result, error) in
XCTFail()
}
client.fetch(query: HeroNameQuery(episode: .empire), cachePolicy: .fetchIgnoringCacheData)
waitFor(timeInterval: 1.0)
}
}