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