Skip to content

Commit 09feefb

Browse files
committed
Add test_query_pagination
1 parent e32d698 commit 09feefb

File tree

1 file changed

+73
-9
lines changed

1 file changed

+73
-9
lines changed

Tests/AppTests/CustomCollectionControllerTests.swift

Lines changed: 73 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,21 @@ import XCTest
1717
@testable import App
1818

1919
import Dependencies
20+
import Fluent
2021
import Vapor
2122

2223

2324
class CustomCollectionControllerTests: AppTestCase {
2425

2526
func test_query() async throws {
2627
// setup
27-
let pkg = Package(id: .id0, url: "1".asGithubUrl.url)
28-
try await pkg.save(on: app.db)
29-
try await Repository(package: pkg, name: "1", owner: "owner").save(on: app.db)
30-
try await Version(package: pkg, latest: .defaultBranch).save(on: app.db)
31-
let collection = CustomCollection(id: .id1, .init(key: "list",
32-
name: "List",
33-
url: "https://github.com/foo/bar/list.json"))
34-
try await collection.save(on: app.db)
35-
try await collection.$packages.attach([pkg], on: app.db)
28+
try await CustomCollection.save(
29+
on: app.db,
30+
key: "list",
31+
name: "List",
32+
url: "https://github.com/foo/bar/list.json",
33+
packages: [( id: .id0, url: "https://github.com/foo/1", owner: "foo", name: "1" )]
34+
)
3635

3736
// MUT
3837
let page = try await CustomCollectionsController.query(on: app.db,
@@ -45,4 +44,69 @@ class CustomCollectionControllerTests: AppTestCase {
4544
XCTAssertEqual(page.hasMoreResults, false)
4645
}
4746

47+
func test_query_pagination() async throws {
48+
// setup
49+
let pkgInfo = [UUID.id0, .id1, .id2, .id3, .id4].enumerated().shuffled().map { (idx, id) in
50+
(id, URL(string: "https://github.com/foo/\(idx)")!, "foo", "\(idx)")
51+
}
52+
try await CustomCollection.save(
53+
on: app.db,
54+
key: "list",
55+
name: "List",
56+
url: "https://github.com/foo/bar/list.json",
57+
packages: pkgInfo
58+
)
59+
60+
do { // first page
61+
// MUT
62+
let page = try await CustomCollectionsController.query(on: app.db,
63+
key: "list",
64+
page: 1,
65+
pageSize: 2)
66+
// validate
67+
XCTAssertEqual(page.results.map(\.repository.name), ["0", "1"])
68+
XCTAssertEqual(page.hasMoreResults, true)
69+
}
70+
71+
do { // second page
72+
// MUT
73+
let page = try await CustomCollectionsController.query(on: app.db,
74+
key: "list",
75+
page: 2,
76+
pageSize: 2)
77+
// validate
78+
XCTAssertEqual(page.results.map(\.repository.name), ["2", "3"])
79+
XCTAssertEqual(page.hasMoreResults, true)
80+
}
81+
82+
do { // first page
83+
// MUT
84+
let page = try await CustomCollectionsController.query(on: app.db,
85+
key: "list",
86+
page: 3,
87+
pageSize: 2)
88+
// validate
89+
XCTAssertEqual(page.results.map(\.repository.name), ["4"])
90+
XCTAssertEqual(page.hasMoreResults, false)
91+
}
92+
}
93+
94+
}
95+
96+
97+
private extension CustomCollection {
98+
@discardableResult
99+
static func save(on database: Database, key: String, name: String, url: URL, packages: [(id: Package.Id, url: URL, owner: String, name: String)]) async throws -> CustomCollection {
100+
let packages = try await packages.mapAsync {
101+
let pkg = Package(id: $0.id, url: $0.url)
102+
try await pkg.save(on: database)
103+
try await Repository(package: pkg, name: $0.name, owner: $0.owner).save(on: database)
104+
try await Version(package: pkg, latest: .defaultBranch).save(on: database)
105+
return pkg
106+
}
107+
let collection = CustomCollection(id: .id1, .init(key: key, name: name, url: url))
108+
try await collection.save(on: database)
109+
try await collection.$packages.attach(packages, on: database)
110+
return collection
111+
}
48112
}

0 commit comments

Comments
 (0)