func testHumanQueryWithDotInFieldArgumentFromCache()

in ApolloTests/CachePersistenceTests.swift [8:72]


    func testHumanQueryWithDotInFieldArgumentFromCache() {
        let directoryURL = FileManager
            .default
            .temporaryDirectory
            .appendingPathComponent(UUID().uuidString)

        try! FileManager.default.createDirectory(at: directoryURL,
                                                 withIntermediateDirectories: true,
                                                 attributes: nil)

        let fileURL = directoryURL.appendingPathComponent("queries.db")

        print("Testing with cache DB at:\n\(fileURL.path)")

        SQLiteTestCacheProvider.withCache(fileURL: fileURL) { cache in
            let networkTransport = MockNetworkTransport(body: [
                "data": [
                    "human": [
                        "__typename": "Human",
                        "name": "Test person 1",
                        "mass": 90,
                        "friendsFilteredById": [
                            [
                                "__typename": "Human",
                                "id": "100.2",
                                "name": "Test person 2",
                            ]
                        ]
                    ]
                ]
                ])

            let store = ApolloStore(cache: cache)
            let client = ApolloClient(networkTransport: networkTransport, store: store)

            let query = HumanFriendsFilteredByIdQuery(id: "100.1", friendId: "100.2")
            // populate cache by fetching from server
            let fetchFromServer = self.expectation(description: "Fetching query from server")
            client.fetch(query: query, cachePolicy: .fetchIgnoringCacheData) { (result, error) in
                defer { fetchFromServer.fulfill() }

                guard let result = result else { XCTFail("No query result");  return }

                XCTAssertEqual(result.data?.human?.name, "Test person 1")
                XCTAssertEqual(result.data?.human?.friendsFilteredById?[0]?.id, "100.2")
                XCTAssertEqual(result.data?.human?.friendsFilteredById?[0]?.name, "Test person 2")
            }

            self.wait(for: [fetchFromServer], timeout: 5.0)

            // read from cache
            let fetchFromCache = self.expectation(description: "Fetching query from cache")
            client.fetch(query: query, cachePolicy: .returnCacheDataDontFetch) { (result, error) in
                defer { fetchFromCache.fulfill() }

                guard let result = result else { XCTFail("No query result");  return }

                XCTAssertEqual(result.data?.human?.name, "Test person 1")
                XCTAssertEqual(result.data?.human?.friendsFilteredById?[0]?.id, "100.2")
                XCTAssertEqual(result.data?.human?.friendsFilteredById?[0]?.name, "Test person 2")
            }

            self.wait(for: [fetchFromCache], timeout: 5.0)
        }
    }