@@ -66,6 +66,67 @@ class CachePersistenceTests: XCTestCase {
6666 }
6767 }
6868
69+ func testFetchAndPersistWithPeriodArguments( ) throws {
70+ let query = SearchQuery ( term: " Luke.Skywalker " )
71+ let sqliteFileURL = SQLiteTestCacheProvider . temporarySQLiteFileURL ( )
72+
73+ try SQLiteTestCacheProvider . withCache ( fileURL: sqliteFileURL) { ( cache) in
74+ let store = ApolloStore ( cache: cache)
75+
76+ let server = MockGraphQLServer ( )
77+ let networkTransport = MockNetworkTransport ( server: server, store: store)
78+
79+ let client = ApolloClient ( networkTransport: networkTransport, store: store)
80+
81+ _ = server. expect ( SearchQuery . self) { request in
82+ [
83+ " data " : [
84+ " search " : [
85+ [
86+ " id " : " 1000 " ,
87+ " name " : " Luke Skywalker " ,
88+ " __typename " : " Human "
89+ ]
90+ ]
91+ ]
92+ ]
93+ }
94+ let networkExpectation = self . expectation ( description: " Fetching query from network " )
95+ let newCacheExpectation = self . expectation ( description: " Fetch query from new cache " )
96+
97+ client. fetch ( query: query, cachePolicy: . fetchIgnoringCacheData) { outerResult in
98+ defer { networkExpectation. fulfill ( ) }
99+
100+ switch outerResult {
101+ case . failure( let error) :
102+ XCTFail ( " Unexpected error: \( error) " )
103+ return
104+ case . success( let graphQLResult) :
105+ XCTAssertEqual ( graphQLResult. data? . search? . first?? . asHuman? . name, " Luke Skywalker " )
106+ // Do another fetch from cache to ensure that data is cached before creating new cache
107+ client. fetch ( query: query, cachePolicy: . returnCacheDataDontFetch) { innerResult in
108+ try ! SQLiteTestCacheProvider . withCache ( fileURL: sqliteFileURL) { cache in
109+ let newStore = ApolloStore ( cache: cache)
110+ let newClient = ApolloClient ( networkTransport: networkTransport, store: newStore)
111+ newClient. fetch ( query: query, cachePolicy: . returnCacheDataDontFetch) { newClientResult in
112+ defer { newCacheExpectation. fulfill ( ) }
113+ switch newClientResult {
114+ case . success( let newClientGraphQLResult) :
115+ XCTAssertEqual ( newClientGraphQLResult. data? . search? . first?? . asHuman? . name, " Luke Skywalker " )
116+ case . failure( let error) :
117+ XCTFail ( " Unexpected error with new client: \( error) " )
118+ }
119+ _ = newClient // Workaround for a bug - ensure that newClient is retained until this block is run
120+ }
121+ }
122+ }
123+ }
124+ }
125+
126+ self . waitForExpectations ( timeout: 2 , handler: nil )
127+ }
128+ }
129+
69130 func testPassInConnectionDoesNotThrow( ) {
70131 do {
71132 let database = try SQLiteDotSwiftDatabase ( connection: Connection ( ) )
0 commit comments