@@ -26,8 +26,8 @@ class InitialSyncOperationTests: XCTestCase {
26
26
/// - It reads sync metadata from storage
27
27
func testReadsMetadata( ) {
28
28
let responder = QueryRequestListenerResponder< PaginatedList< AnyModel>> { _, listener in
29
- let startedAt = Int ( Date ( ) . timeIntervalSince1970)
30
- let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: startedAt )
29
+ let startDateMilliseconds = Int ( Date ( ) . timeIntervalSince1970) * 1_000
30
+ let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: startDateMilliseconds )
31
31
let event : GraphQLOperation < PaginatedList < AnyModel > > . Event = . completed( . success( list) )
32
32
listener ? ( event)
33
33
return nil
@@ -63,8 +63,8 @@ class InitialSyncOperationTests: XCTestCase {
63
63
func testQueriesAPI( ) {
64
64
let apiWasQueried = expectation ( description: " API was queried for a PaginatedList of AnyModel " )
65
65
let responder = QueryRequestListenerResponder< PaginatedList< AnyModel>> { _, listener in
66
- let startedAt = Int ( Date ( ) . timeIntervalSince1970)
67
- let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: startedAt )
66
+ let startDateMilliseconds = Int ( Date ( ) . timeIntervalSince1970) * 1_000
67
+ let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: startDateMilliseconds )
68
68
let event : GraphQLOperation < PaginatedList < AnyModel > > . Event = . completed( . success( list) )
69
69
listener ? ( event)
70
70
apiWasQueried. fulfill ( )
@@ -97,8 +97,8 @@ class InitialSyncOperationTests: XCTestCase {
97
97
/// - The method invokes a completion callback when complete
98
98
func testInvokesCompletionCallback( ) {
99
99
let responder = QueryRequestListenerResponder< PaginatedList< AnyModel>> { _, listener in
100
- let startedAt = Int ( Date ( ) . timeIntervalSince1970)
101
- let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: startedAt )
100
+ let startDateMilliseconds = Int ( Date ( ) . timeIntervalSince1970) * 1_000
101
+ let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: startDateMilliseconds )
102
102
let event : GraphQLOperation < PaginatedList < AnyModel > > . Event = . completed( . success( list) )
103
103
listener ? ( event)
104
104
return nil
@@ -173,15 +173,15 @@ class InitialSyncOperationTests: XCTestCase {
173
173
/// - The method submits the returned data to the reconciliation queue
174
174
func testSubmitsToReconciliationQueue( ) {
175
175
let responder = QueryRequestListenerResponder< PaginatedList< AnyModel>> { _, listener in
176
- let startedAt = Int ( Date ( ) . timeIntervalSince1970)
176
+ let startedAtMilliseconds = Int ( Date ( ) . timeIntervalSince1970) * 1_000
177
177
let model = MockSynced ( id: " 1 " )
178
178
let anyModel = AnyModel ( model)
179
179
let metadata = MutationSyncMetadata ( id: " 1 " ,
180
180
deleted: false ,
181
181
lastChangedAt: Int ( Date ( ) . timeIntervalSince1970) ,
182
182
version: 1 )
183
183
let mutationSync = MutationSync ( model: anyModel, syncMetadata: metadata)
184
- let list = PaginatedList < AnyModel > ( items: [ mutationSync] , nextToken: nil , startedAt: startedAt )
184
+ let list = PaginatedList < AnyModel > ( items: [ mutationSync] , nextToken: nil , startedAt: startedAtMilliseconds )
185
185
let event : GraphQLOperation < PaginatedList < AnyModel > > . Event = . completed( . success( list) )
186
186
listener ? ( event)
187
187
return nil
@@ -221,9 +221,9 @@ class InitialSyncOperationTests: XCTestCase {
221
221
/// - Then:
222
222
/// - The method submits the returned data to the reconciliation queue
223
223
func testUpdatesSyncMetadata( ) throws {
224
- let startDateSeconds = Int ( Date ( ) . timeIntervalSince1970)
224
+ let startDateMilliseconds = Int ( Date ( ) . timeIntervalSince1970) * 1_000
225
225
let responder = QueryRequestListenerResponder< PaginatedList< AnyModel>> { _, listener in
226
- let startedAt = startDateSeconds
226
+ let startedAt = startDateMilliseconds
227
227
let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: startedAt)
228
228
let event : GraphQLOperation < PaginatedList < AnyModel > > . Event = . completed( . success( list) )
229
229
listener ? ( event)
@@ -256,7 +256,7 @@ class InitialSyncOperationTests: XCTestCase {
256
256
return
257
257
}
258
258
259
- XCTAssertEqual ( syncMetadata. lastSync, startDateSeconds )
259
+ XCTAssertEqual ( syncMetadata. lastSync, startDateMilliseconds )
260
260
}
261
261
262
262
/// - Given: An InitialSyncOperation in a system with previous sync metadata
@@ -266,12 +266,12 @@ class InitialSyncOperationTests: XCTestCase {
266
266
/// - It performs a sync query against the API category with a "lastSync" time from the last start time of
267
267
/// the stored metadata
268
268
func testQueriesFromLastSync( ) throws {
269
- let startDateSeconds = Int ( Date ( ) . timeIntervalSince1970) - 100
269
+ let startDateMilliseconds = ( Int ( Date ( ) . timeIntervalSince1970) - 100 ) * 1_000
270
270
271
271
let storageAdapter = try SQLiteStorageEngineAdapter ( connection: Connection ( . inMemory) )
272
272
try storageAdapter. setUp ( models: StorageEngine . systemModels + [ MockSynced . self] )
273
273
274
- let syncMetadata = ModelSyncMetadata ( id: MockSynced . modelName, lastSync: startDateSeconds )
274
+ let syncMetadata = ModelSyncMetadata ( id: MockSynced . modelName, lastSync: startDateMilliseconds )
275
275
let syncMetadataSaved = expectation ( description: " Sync metadata saved " )
276
276
storageAdapter. save ( syncMetadata) { result in
277
277
switch result {
@@ -286,7 +286,7 @@ class InitialSyncOperationTests: XCTestCase {
286
286
let apiWasQueried = expectation ( description: " API was queried for a PaginatedList of AnyModel " )
287
287
let responder = QueryRequestListenerResponder< PaginatedList< AnyModel>> { request, listener in
288
288
let lastSync = request. variables ? [ " lastSync " ] as? Int
289
- XCTAssertEqual ( lastSync, startDateSeconds )
289
+ XCTAssertEqual ( lastSync, startDateMilliseconds )
290
290
291
291
let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: nil )
292
292
let event : GraphQLOperation < PaginatedList < AnyModel > > . Event = . completed( . success( list) )
@@ -310,4 +310,52 @@ class InitialSyncOperationTests: XCTestCase {
310
310
311
311
wait ( for: [ apiWasQueried] , timeout: 1.0 )
312
312
}
313
+
314
+ func testBaseQueryWhenExpiredLastSync( ) throws {
315
+ //Set start date to 100 seconds in the past
316
+ let startDateMilliSeconds = ( Int ( Date ( ) . timeIntervalSince1970) - 100 ) * 1_000
317
+
318
+ let storageAdapter = try SQLiteStorageEngineAdapter ( connection: Connection ( . inMemory) )
319
+ try storageAdapter. setUp ( models: StorageEngine . systemModels + [ MockSynced . self] )
320
+
321
+ let syncMetadata = ModelSyncMetadata ( id: MockSynced . modelName, lastSync: startDateMilliSeconds)
322
+ let syncMetadataSaved = expectation ( description: " Sync metadata saved " )
323
+ storageAdapter. save ( syncMetadata) { result in
324
+ switch result {
325
+ case . failure( let dataStoreError) :
326
+ XCTAssertNil ( dataStoreError)
327
+ case . success:
328
+ syncMetadataSaved. fulfill ( )
329
+ }
330
+ }
331
+ wait ( for: [ syncMetadataSaved] , timeout: 1.0 )
332
+
333
+ let apiWasQueried = expectation ( description: " API was queried for a PaginatedList of AnyModel " )
334
+ let responder = QueryRequestListenerResponder< PaginatedList< AnyModel>> { request, listener in
335
+ let lastSync = request. variables ? [ " lastSync " ] as? Int
336
+ XCTAssertNil ( lastSync)
337
+
338
+ let list = PaginatedList < AnyModel > ( items: [ ] , nextToken: nil , startedAt: nil )
339
+ let event : GraphQLOperation < PaginatedList < AnyModel > > . Event = . completed( . success( list) )
340
+ listener ? ( event)
341
+ apiWasQueried. fulfill ( )
342
+ return nil
343
+ }
344
+
345
+ let apiPlugin = MockAPICategoryPlugin ( )
346
+ apiPlugin. responders [ . queryRequestListener] = responder
347
+
348
+ let reconciliationQueue = MockReconciliationQueue ( )
349
+ let configuration = DataStoreConfiguration . custom ( syncInterval: 60 )
350
+ let operation = InitialSyncOperation (
351
+ modelType: MockSynced . self,
352
+ api: apiPlugin,
353
+ reconciliationQueue: reconciliationQueue,
354
+ storageAdapter: storageAdapter,
355
+ dataStoreConfiguration: configuration) { _ in }
356
+
357
+ operation. main ( )
358
+
359
+ wait ( for: [ apiWasQueried] , timeout: 1.0 )
360
+ }
313
361
}
0 commit comments