Skip to content

Commit 00d0010

Browse files
committed
Convert RecentViewsTests
1 parent 35dce07 commit 00d0010

File tree

1 file changed

+188
-179
lines changed

1 file changed

+188
-179
lines changed

Tests/AppTests/RecentViewsTests.swift

Lines changed: 188 additions & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -12,137 +12,143 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
@testable import App
16-
17-
import XCTVapor
18-
15+
import Foundation
1916

20-
class RecentViewsTests: AppTestCase {
17+
@testable import App
2118

22-
func test_recentPackages() async throws {
23-
// setup
24-
do { // 1st package is eligible
25-
let pkg = Package(id: UUID(), url: "1")
26-
try await pkg.save(on: app.db)
27-
try await Repository(package: pkg,
28-
name: "1",
29-
owner: "foo",
30-
summary: "pkg 1").create(on: app.db)
31-
try await Version(package: pkg, packageName: "1").save(on: app.db)
19+
import Testing
20+
21+
22+
@Suite struct RecentViewsTests {
23+
24+
@Test func recentPackages() async throws {
25+
try await withApp { app in
26+
// setup
27+
do { // 1st package is eligible
28+
let pkg = Package(id: UUID(), url: "1")
29+
try await pkg.save(on: app.db)
30+
try await Repository(package: pkg,
31+
name: "1",
32+
owner: "foo",
33+
summary: "pkg 1").create(on: app.db)
34+
try await Version(package: pkg, packageName: "1").save(on: app.db)
35+
}
36+
do { // 2nd package should not be selected, because it has no package name
37+
let pkg = Package(id: UUID(), url: "2")
38+
try await pkg.save(on: app.db)
39+
try await Repository(package: pkg,
40+
name: "2",
41+
owner: "foo",
42+
summary: "pkg 2").create(on: app.db)
43+
try await Version(package: pkg).save(on: app.db)
44+
}
45+
do { // 3rd package is eligible
46+
let pkg = Package(id: UUID(), url: "3")
47+
try await pkg.save(on: app.db)
48+
try await Repository(package: pkg,
49+
name: "3",
50+
owner: "foo",
51+
summary: "pkg 3").create(on: app.db)
52+
try await Version(package: pkg, packageName: "3").save(on: app.db)
53+
}
54+
// make sure to refresh the materialized view
55+
try await RecentPackage.refresh(on: app.db)
56+
57+
// MUT
58+
let res = try await RecentPackage.fetch(on: app.db)
59+
60+
// validate
61+
#expect(res.map(\.packageName) == ["3", "1"])
62+
#expect(res.map(\.packageSummary) == ["pkg 3", "pkg 1"])
3263
}
33-
do { // 2nd package should not be selected, because it has no package name
34-
let pkg = Package(id: UUID(), url: "2")
35-
try await pkg.save(on: app.db)
36-
try await Repository(package: pkg,
37-
name: "2",
38-
owner: "foo",
39-
summary: "pkg 2").create(on: app.db)
40-
try await Version(package: pkg).save(on: app.db)
41-
}
42-
do { // 3rd package is eligible
43-
let pkg = Package(id: UUID(), url: "3")
44-
try await pkg.save(on: app.db)
45-
try await Repository(package: pkg,
46-
name: "3",
47-
owner: "foo",
48-
summary: "pkg 3").create(on: app.db)
49-
try await Version(package: pkg, packageName: "3").save(on: app.db)
50-
}
51-
// make sure to refresh the materialized view
52-
try await RecentPackage.refresh(on: app.db)
53-
54-
// MUT
55-
let res = try await RecentPackage.fetch(on: app.db)
56-
57-
// validate
58-
XCTAssertEqual(res.map(\.packageName), ["3", "1"])
59-
XCTAssertEqual(res.map(\.packageSummary), ["pkg 3", "pkg 1"])
6064
}
6165

62-
func test_recentReleases() async throws {
63-
// setup
64-
do { // 1st package is eligible
65-
let pkg = Package(id: UUID(), url: "1")
66-
try await pkg.save(on: app.db)
67-
try await Repository(package: pkg,
68-
defaultBranch: "default",
69-
name: "1",
70-
owner: "foo",
71-
summary: "pkg 1").create(on: app.db)
72-
try await Version(package: pkg,
73-
commitDate: Date(timeIntervalSince1970: 0),
74-
packageName: "1",
75-
reference: .tag(.init(1, 2, 3)),
76-
url: "1/release/1.2.3").save(on: app.db)
66+
@Test func recentReleases() async throws {
67+
try await withApp { app in
68+
// setup
69+
do { // 1st package is eligible
70+
let pkg = Package(id: UUID(), url: "1")
71+
try await pkg.save(on: app.db)
72+
try await Repository(package: pkg,
73+
defaultBranch: "default",
74+
name: "1",
75+
owner: "foo",
76+
summary: "pkg 1").create(on: app.db)
77+
try await Version(package: pkg,
78+
commitDate: Date(timeIntervalSince1970: 0),
79+
packageName: "1",
80+
reference: .tag(.init(1, 2, 3)),
81+
url: "1/release/1.2.3").save(on: app.db)
82+
}
83+
do { // 2nd package is ineligible, because it has a branch reference
84+
let pkg = Package(id: UUID(), url: "2")
85+
try await pkg.save(on: app.db)
86+
try await Repository(package: pkg,
87+
defaultBranch: "default",
88+
name: "2",
89+
owner: "foo",
90+
summary: "pkg 2").create(on: app.db)
91+
try await Version(package: pkg,
92+
commitDate: Date(timeIntervalSince1970: 0),
93+
packageName: "2",
94+
reference: .branch("default"),
95+
url: "2/branch/default").save(on: app.db)
96+
}
97+
do { // 3rd package is ineligible, because it has no package name
98+
let pkg = Package(id: UUID(), url: "3")
99+
try await pkg.save(on: app.db)
100+
try await Repository(package: pkg,
101+
defaultBranch: "default",
102+
name: "3",
103+
owner: "foo",
104+
summary: "pkg 3").create(on: app.db)
105+
try await Version(package: pkg,
106+
commitDate: Date(timeIntervalSince1970: 0),
107+
reference: .branch("default"),
108+
url: "2/branch/default").save(on: app.db)
109+
}
110+
do { // 4th package is ineligible, because it has no reference
111+
let pkg = Package(id: UUID(), url: "4")
112+
try await pkg.save(on: app.db)
113+
try await Repository(package: pkg,
114+
defaultBranch: "default",
115+
name: "4",
116+
owner: "foo",
117+
summary: "pkg 4").create(on: app.db)
118+
try await Version(package: pkg,
119+
commitDate: Date(timeIntervalSince1970: 0),
120+
packageName: "4").save(on: app.db)
121+
}
122+
do { // 5th package is eligible - should come before 1st because of more recent commit date
123+
let pkg = Package(id: UUID(), url: "5")
124+
try await pkg.save(on: app.db)
125+
try await Repository(package: pkg,
126+
defaultBranch: "default",
127+
name: "5",
128+
owner: "foo",
129+
summary: "pkg 5").create(on: app.db)
130+
try await Version(package: pkg,
131+
commitDate: Date(timeIntervalSince1970: 1),
132+
packageName: "5",
133+
reference: .tag(.init(2, 0, 0)),
134+
url: "5/release/2.0.0").save(on: app.db)
135+
}
136+
137+
// make sure to refresh the materialized view
138+
try await RecentRelease.refresh(on: app.db)
139+
140+
// MUT
141+
let res = try await RecentRelease.fetch(on: app.db)
142+
143+
// validate
144+
#expect(res.map(\.packageName) == ["5", "1"])
145+
#expect(res.map(\.version) == ["2.0.0", "1.2.3"])
146+
#expect(res.map(\.packageSummary) == ["pkg 5", "pkg 1"])
147+
#expect(res.map(\.releaseUrl) == ["5/release/2.0.0", "1/release/1.2.3"])
77148
}
78-
do { // 2nd package is ineligible, because it has a branch reference
79-
let pkg = Package(id: UUID(), url: "2")
80-
try await pkg.save(on: app.db)
81-
try await Repository(package: pkg,
82-
defaultBranch: "default",
83-
name: "2",
84-
owner: "foo",
85-
summary: "pkg 2").create(on: app.db)
86-
try await Version(package: pkg,
87-
commitDate: Date(timeIntervalSince1970: 0),
88-
packageName: "2",
89-
reference: .branch("default"),
90-
url: "2/branch/default").save(on: app.db)
91-
}
92-
do { // 3rd package is ineligible, because it has no package name
93-
let pkg = Package(id: UUID(), url: "3")
94-
try await pkg.save(on: app.db)
95-
try await Repository(package: pkg,
96-
defaultBranch: "default",
97-
name: "3",
98-
owner: "foo",
99-
summary: "pkg 3").create(on: app.db)
100-
try await Version(package: pkg,
101-
commitDate: Date(timeIntervalSince1970: 0),
102-
reference: .branch("default"),
103-
url: "2/branch/default").save(on: app.db)
104-
}
105-
do { // 4th package is ineligible, because it has no reference
106-
let pkg = Package(id: UUID(), url: "4")
107-
try await pkg.save(on: app.db)
108-
try await Repository(package: pkg,
109-
defaultBranch: "default",
110-
name: "4",
111-
owner: "foo",
112-
summary: "pkg 4").create(on: app.db)
113-
try await Version(package: pkg,
114-
commitDate: Date(timeIntervalSince1970: 0),
115-
packageName: "4").save(on: app.db)
116-
}
117-
do { // 5th package is eligible - should come before 1st because of more recent commit date
118-
let pkg = Package(id: UUID(), url: "5")
119-
try await pkg.save(on: app.db)
120-
try await Repository(package: pkg,
121-
defaultBranch: "default",
122-
name: "5",
123-
owner: "foo",
124-
summary: "pkg 5").create(on: app.db)
125-
try await Version(package: pkg,
126-
commitDate: Date(timeIntervalSince1970: 1),
127-
packageName: "5",
128-
reference: .tag(.init(2, 0, 0)),
129-
url: "5/release/2.0.0").save(on: app.db)
130-
}
131-
132-
// make sure to refresh the materialized view
133-
try await RecentRelease.refresh(on: app.db)
134-
135-
// MUT
136-
let res = try await RecentRelease.fetch(on: app.db)
137-
138-
// validate
139-
XCTAssertEqual(res.map(\.packageName), ["5", "1"])
140-
XCTAssertEqual(res.map(\.version), ["2.0.0", "1.2.3"])
141-
XCTAssertEqual(res.map(\.packageSummary), ["pkg 5", "pkg 1"])
142-
XCTAssertEqual(res.map(\.releaseUrl), ["5/release/2.0.0", "1/release/1.2.3"])
143149
}
144150

145-
func test_Array_RecentReleases_filter() throws {
151+
@Test func Array_RecentReleases_filter() throws {
146152
// List only major releases
147153
// setup
148154
let releases: [RecentRelease] = (1...12).map {
@@ -168,71 +174,74 @@ class RecentViewsTests: AppTestCase {
168174
let pre = releases.filter(by: [.pre])
169175

170176
// validate
171-
XCTAssertEqual(
172-
all.map(\.version),
173-
["0.1.1", "0.2.0", "1.0.1", "1.1.0", "1.2.1", "2.0.0", "2.1.1", "2.2.0", "3.0.1", "3.1.0",
177+
#expect(
178+
all.map(\.version) == ["0.1.1", "0.2.0", "1.0.1", "1.1.0", "1.2.1", "2.0.0", "2.1.1", "2.2.0", "3.0.1", "3.1.0",
174179
"3.2.1-b1", "4.0.0-b1"])
175-
XCTAssertEqual(
176-
majorOnly.map(\.version), ["2.0.0"])
177-
XCTAssertEqual(
178-
minorOnly.map(\.version), ["0.2.0", "1.1.0", "2.2.0", "3.1.0"])
179-
XCTAssertEqual(
180-
majorMinor.map(\.version), ["0.2.0", "1.1.0", "2.0.0", "2.2.0", "3.1.0"])
181-
XCTAssertEqual(
182-
pre.map(\.version), ["3.2.1-b1", "4.0.0-b1"])
180+
#expect(
181+
majorOnly.map(\.version) == ["2.0.0"])
182+
#expect(
183+
minorOnly.map(\.version) == ["0.2.0", "1.1.0", "2.2.0", "3.1.0"])
184+
#expect(
185+
majorMinor.map(\.version) == ["0.2.0", "1.1.0", "2.0.0", "2.2.0", "3.1.0"])
186+
#expect(
187+
pre.map(\.version) == ["3.2.1-b1", "4.0.0-b1"])
183188
}
184189

185-
func test_recentPackages_dedupe_issue() async throws {
190+
@Test func recentPackages_dedupe_issue() async throws {
186191
// https://github.com/SwiftPackageIndex/SwiftPackageIndex-Server/issues/315
187-
// setup
188-
// Package with two eligible versions that differ in package name
189-
let pkg = Package(id: UUID(), url: "1")
190-
try await pkg.save(on: app.db)
191-
try await Repository(package: pkg,
192-
name: "bar",
193-
owner: "foo",
194-
summary: "pkg summary").create(on: app.db)
195-
try await Version(package: pkg,
196-
commitDate: Date(timeIntervalSince1970: 0),
197-
packageName: "pkg-bar").save(on: app.db)
198-
try await Version(package: pkg,
199-
commitDate: Date(timeIntervalSince1970: 1),
200-
packageName: "pkg-bar-updated").save(on: app.db)
201-
// make sure to refresh the materialized view
202-
try await RecentPackage.refresh(on: app.db)
192+
try await withApp { app in
193+
// setup
194+
// Package with two eligible versions that differ in package name
195+
let pkg = Package(id: UUID(), url: "1")
196+
try await pkg.save(on: app.db)
197+
try await Repository(package: pkg,
198+
name: "bar",
199+
owner: "foo",
200+
summary: "pkg summary").create(on: app.db)
201+
try await Version(package: pkg,
202+
commitDate: Date(timeIntervalSince1970: 0),
203+
packageName: "pkg-bar").save(on: app.db)
204+
try await Version(package: pkg,
205+
commitDate: Date(timeIntervalSince1970: 1),
206+
packageName: "pkg-bar-updated").save(on: app.db)
207+
// make sure to refresh the materialized view
208+
try await RecentPackage.refresh(on: app.db)
203209

204-
// MUT
205-
let res = try await RecentPackage.fetch(on: app.db)
210+
// MUT
211+
let res = try await RecentPackage.fetch(on: app.db)
206212

207-
// validate
208-
XCTAssertEqual(res.map(\.packageName), ["pkg-bar-updated"])
213+
// validate
214+
#expect(res.map(\.packageName) == ["pkg-bar-updated"])
215+
}
209216
}
210217

211-
func test_recentReleases_dedupe_issue() async throws {
218+
@Test func recentReleases_dedupe_issue() async throws {
212219
// https://github.com/SwiftPackageIndex/SwiftPackageIndex-Server/issues/315
213-
// setup
214-
let pkg = Package(id: UUID(), url: "1")
215-
try await pkg.save(on: app.db)
216-
try await Repository(package: pkg,
217-
name: "bar",
218-
owner: "foo",
219-
summary: "pkg summary").create(on: app.db)
220-
try await Version(package: pkg,
221-
commitDate: Date(timeIntervalSince1970: 0),
222-
packageName: "pkg-bar",
223-
reference: .tag(.init(1, 0, 0))).save(on: app.db)
224-
try await Version(package: pkg,
225-
commitDate: Date(timeIntervalSince1970: 1),
226-
packageName: "pkg-bar-updated",
227-
reference: .tag(.init(1, 0, 1))).save(on: app.db)
228-
// make sure to refresh the materialized view
229-
try await RecentRelease.refresh(on: app.db)
230-
231-
// MUT
232-
let res = try await RecentRelease.fetch(on: app.db)
233-
234-
// validate
235-
XCTAssertEqual(res.map(\.packageName), ["pkg-bar-updated"])
220+
try await withApp { app in
221+
// setup
222+
let pkg = Package(id: UUID(), url: "1")
223+
try await pkg.save(on: app.db)
224+
try await Repository(package: pkg,
225+
name: "bar",
226+
owner: "foo",
227+
summary: "pkg summary").create(on: app.db)
228+
try await Version(package: pkg,
229+
commitDate: Date(timeIntervalSince1970: 0),
230+
packageName: "pkg-bar",
231+
reference: .tag(.init(1, 0, 0))).save(on: app.db)
232+
try await Version(package: pkg,
233+
commitDate: Date(timeIntervalSince1970: 1),
234+
packageName: "pkg-bar-updated",
235+
reference: .tag(.init(1, 0, 1))).save(on: app.db)
236+
// make sure to refresh the materialized view
237+
try await RecentRelease.refresh(on: app.db)
238+
239+
// MUT
240+
let res = try await RecentRelease.fetch(on: app.db)
241+
242+
// validate
243+
#expect(res.map(\.packageName) == ["pkg-bar-updated"])
244+
}
236245
}
237246

238247
}

0 commit comments

Comments
 (0)