Skip to content

Commit 48792f4

Browse files
authored
fix(Datastore): paginationInput not passed down in query (#647)
* fixed missing paginationInput issue and added an integration test * 1st fixed PR comments
1 parent ff8e86c commit 48792f4

File tree

4 files changed

+134
-0
lines changed

4 files changed

+134
-0
lines changed

AmplifyPlugins/DataStore/AWSDataStoreCategoryPlugin/Storage/SQLite/StorageEngineAdapter+SQLite.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ final class SQLiteStorageEngineAdapter: StorageEngineAdapter {
192192
completion: DataStoreCallback<[M]>) {
193193
query(modelType,
194194
predicate: predicate,
195+
paginationInput: paginationInput,
195196
additionalStatements: nil,
196197
completion: completion)
197198
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
//
2+
// Copyright 2018-2020 Amazon.com,
3+
// Inc. or its affiliates. All Rights Reserved.
4+
//
5+
// SPDX-License-Identifier: Apache-2.0
6+
//
7+
8+
import XCTest
9+
10+
import AmplifyPlugins
11+
import AWSPluginsCore
12+
13+
@testable import Amplify
14+
@testable import AmplifyTestCommon
15+
@testable import AWSDataStoreCategoryPlugin
16+
17+
class DataStoreLocalStoreTests: LocalStoreIntegrationTestBase {
18+
19+
/// - Given: 15 posts that has been saved
20+
/// - When:
21+
/// - query with pagination input given a page number and limit 10
22+
/// - Then:
23+
/// - first page returns the 10 (the defined limit) of 15 posts
24+
/// - second page returns the remaining 5 posts
25+
/// - the 15 retrieved posts have unique identifiers
26+
func testQueryWithPaginationInput() throws {
27+
_ = setUpLocalStore(numberOfPosts: 15)
28+
var posts = [Post]()
29+
let queryFirstTimeSuccess = expectation(description: "Query post completed")
30+
31+
Amplify.DataStore.query(Post.self,
32+
paginate: .page(0, limit: 10)) { result in
33+
switch result {
34+
case .success(let returnPosts):
35+
posts.append(contentsOf: returnPosts)
36+
queryFirstTimeSuccess.fulfill()
37+
case .failure(let error):
38+
XCTFail("Error querying posts: \(error)")
39+
}
40+
}
41+
wait(for: [queryFirstTimeSuccess], timeout: 10)
42+
43+
XCTAssertEqual(posts.count, 10)
44+
45+
let querySecondTimeSuccess = expectation(description: "Query post completed")
46+
Amplify.DataStore.query(Post.self,
47+
paginate: .page(1, limit: 10)) { result in
48+
switch result {
49+
case .success(let returnPosts):
50+
posts.append(contentsOf: returnPosts)
51+
querySecondTimeSuccess.fulfill()
52+
case .failure(let error):
53+
XCTFail("Error querying posts: \(error)")
54+
}
55+
}
56+
wait(for: [querySecondTimeSuccess], timeout: 10)
57+
58+
XCTAssertEqual(posts.count, 15)
59+
60+
let idSet = Set(posts.map { $0.id })
61+
62+
XCTAssertEqual(idSet.count, 15)
63+
}
64+
65+
func setUpLocalStore(numberOfPosts: Int) -> [Post] {
66+
var savedPosts = [Post]()
67+
for _ in 0 ..< numberOfPosts {
68+
let saveSuccess = expectation(description: "Save post completed")
69+
let post = Post(title: "title\(Int.random(in: 0 ... 5))",
70+
content: "content",
71+
createdAt: .now(),
72+
rating: Double(Int.random(in: 0 ... 5)))
73+
savedPosts.append(post)
74+
Amplify.DataStore.save(post) { result in
75+
switch result {
76+
case .success:
77+
saveSuccess.fulfill()
78+
case .failure(let error):
79+
XCTFail("Error saving post, \(error)")
80+
}
81+
}
82+
wait(for: [saveSuccess], timeout: 10)
83+
}
84+
return savedPosts
85+
}
86+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// Copyright 2018-2020 Amazon.com,
3+
// Inc. or its affiliates. All Rights Reserved.
4+
//
5+
// SPDX-License-Identifier: Apache-2.0
6+
//
7+
8+
import XCTest
9+
10+
import AmplifyPlugins
11+
12+
@testable import Amplify
13+
@testable import AmplifyTestCommon
14+
@testable import AWSDataStoreCategoryPlugin
15+
16+
class LocalStoreIntegrationTestBase: XCTestCase {
17+
18+
override func setUp() {
19+
super.setUp()
20+
21+
continueAfterFailure = false
22+
23+
Amplify.reset()
24+
Amplify.Logging.logLevel = .verbose
25+
26+
do {
27+
try Amplify.add(plugin: AWSDataStorePlugin(modelRegistration: TestModelRegistration()))
28+
try Amplify.configure(AmplifyConfiguration(dataStore: nil))
29+
} catch {
30+
XCTFail(String(describing: error))
31+
return
32+
}
33+
}
34+
35+
override func tearDown() {
36+
Amplify.DataStore.clear(completion: { _ in })
37+
}
38+
39+
}

AmplifyPlugins/DataStore/DataStoreCategoryPlugin.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@
9595
B9FAA140238C600A009414B4 /* ListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9FAA13F238C600A009414B4 /* ListTests.swift */; };
9696
B9FAA142238C6082009414B4 /* BaseDataStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9FAA141238C6082009414B4 /* BaseDataStoreTests.swift */; };
9797
D80064F62499297800935DA3 /* MockFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80064F52499297800935DA3 /* MockFileManager.swift */; };
98+
D80B86BF24BF913100B82FD0 /* DataStoreLocalStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80B86BE24BF913100B82FD0 /* DataStoreLocalStoreTests.swift */; };
99+
D80B86C124BF91E100B82FD0 /* LocalStoreIntegrationTestBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80B86C024BF91E100B82FD0 /* LocalStoreIntegrationTestBase.swift */; };
98100
D8B90862249839D4002593F5 /* amplifyconfiguration.json in Resources */ = {isa = PBXBuildFile; fileRef = 21233DD7247591D100039337 /* amplifyconfiguration.json */; };
99101
D8C5BA59249815A6007C3A68 /* DataStoreConfigurationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8C5BA58249815A6007C3A68 /* DataStoreConfigurationTests.swift */; };
100102
FA0427C82396C27400D25AB0 /* SyncEngineStartupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0427C72396C27400D25AB0 /* SyncEngineStartupTests.swift */; };
@@ -306,6 +308,8 @@
306308
D4BB518039D7C264E092363E /* Pods-HostApp-AWSDataStoreCategoryPluginIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HostApp-AWSDataStoreCategoryPluginIntegrationTests.release.xcconfig"; path = "Target Support Files/Pods-HostApp-AWSDataStoreCategoryPluginIntegrationTests/Pods-HostApp-AWSDataStoreCategoryPluginIntegrationTests.release.xcconfig"; sourceTree = "<group>"; };
307309
D59B63DF64CCA73C910ADD66 /* Pods-HostApp-AWSDataStoreCategoryPluginIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HostApp-AWSDataStoreCategoryPluginIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-HostApp-AWSDataStoreCategoryPluginIntegrationTests/Pods-HostApp-AWSDataStoreCategoryPluginIntegrationTests.debug.xcconfig"; sourceTree = "<group>"; };
308310
D80064F52499297800935DA3 /* MockFileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFileManager.swift; sourceTree = "<group>"; };
311+
D80B86BE24BF913100B82FD0 /* DataStoreLocalStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStoreLocalStoreTests.swift; sourceTree = "<group>"; };
312+
D80B86C024BF91E100B82FD0 /* LocalStoreIntegrationTestBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalStoreIntegrationTestBase.swift; sourceTree = "<group>"; };
309313
D8C5BA58249815A6007C3A68 /* DataStoreConfigurationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStoreConfigurationTests.swift; sourceTree = "<group>"; };
310314
DCC3AA75D77D0DB916EC42DB /* Pods-HostApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HostApp.release.xcconfig"; path = "Target Support Files/Pods-HostApp/Pods-HostApp.release.xcconfig"; sourceTree = "<group>"; };
311315
EA320D973669D3843FDF755E /* Pods_HostApp_AWSDataStoreCategoryPluginAuthIntegrationTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HostApp_AWSDataStoreCategoryPluginAuthIntegrationTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -591,6 +595,7 @@
591595
21233DD7247591D100039337 /* amplifyconfiguration.json */,
592596
FA6B0EA9249445D50062AA59 /* AWSDataStorePluginConfigurationTests.swift */,
593597
FAB571412395A3E80006A5F8 /* DataStoreEndToEndTests.swift */,
598+
D80B86BE24BF913100B82FD0 /* DataStoreLocalStoreTests.swift */,
594599
D8C5BA58249815A6007C3A68 /* DataStoreConfigurationTests.swift */,
595600
2149E62123886CEE00873955 /* Info.plist */,
596601
213481BE24213E13001966DE /* README.md */,
@@ -755,6 +760,7 @@
755760
isa = PBXGroup;
756761
children = (
757762
FAB5713F23958C210006A5F8 /* SyncEngineIntegrationTestBase.swift */,
763+
D80B86C024BF91E100B82FD0 /* LocalStoreIntegrationTestBase.swift */,
758764
FAD2BDF5239583B2006EB065 /* TestModelRegistration.swift */,
759765
);
760766
path = TestSupport;
@@ -1573,6 +1579,8 @@
15731579
D8C5BA59249815A6007C3A68 /* DataStoreConfigurationTests.swift in Sources */,
15741580
2149E62D23886D3900873955 /* SyncMetadataTests.swift in Sources */,
15751581
FAD2BDF6239583B2006EB065 /* TestModelRegistration.swift in Sources */,
1582+
D80B86BF24BF913100B82FD0 /* DataStoreLocalStoreTests.swift in Sources */,
1583+
D80B86C124BF91E100B82FD0 /* LocalStoreIntegrationTestBase.swift in Sources */,
15761584
FA3841EB23889D6C0070AD5B /* SubscriptionEndToEndTests.swift in Sources */,
15771585
FAB571422395A3E80006A5F8 /* DataStoreEndToEndTests.swift in Sources */,
15781586
FAB5714023958C210006A5F8 /* SyncEngineIntegrationTestBase.swift in Sources */,

0 commit comments

Comments
 (0)