1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15+ import Foundation
16+
1517@testable import App
1618
17- import XCTVapor
1819import Dependencies
20+ import Testing
1921
2022
21- class PackageReleasesModelTests : AppTestCase {
23+ @ Suite struct PackageReleasesModelTests {
2224
23- func test_initialise ( ) async throws {
25+ @ Test func initialise ( ) async throws {
2426 // Setup
2527
2628 // Work-around to set the local time zone for time sensitive
@@ -36,36 +38,38 @@ class PackageReleasesModelTests: AppTestCase {
3638 try await withDependencies {
3739 $0. date. now = . spiBirthday
3840 } operation: {
39- let pkg = Package ( id: UUID ( ) , url: " 1 " . asGithubUrl. url)
40- try await pkg. save ( on: app. db)
41-
42- try await Repository ( package : pkg, releases: [
43- . mock( description: " Release Notes " , descriptionHTML: " Release Notes " ,
44- publishedAt: 2 , tagName: " 1.0.0 " , url: " some url " ) ,
45-
46- . mock( description: nil , descriptionHTML: nil ,
47- publishedAt: 1 , tagName: " 0.0.1 " , url: " some url " ) ,
48- ] ) . save ( on: app. db)
49- let jpr = try await Package . fetchCandidate ( app. db, id: pkg. id!)
50-
51-
52- // MUT
53- let model = try XCTUnwrap ( PackageReleases . Model ( package : jpr) )
54-
55- // Validate
56- XCTAssertEqual ( model. releases, [
57- . init( title: " 1.0.0 " , date: " Released 50 years ago on 1 January 1970 " ,
58- html: " Release Notes " , link: " some url " ) ,
59-
60- . init( title: " 0.0.1 " , date: " Released 50 years ago on 1 January 1970 " ,
61- html: nil , link: " some url " ) ,
62- ] )
63- // NOTE(heckj): test is sensitive to local time zones, breaks when run at GMT-7
64- // resolves as `31 December 1969`
41+ try await withApp { app in
42+ let pkg = Package ( id: UUID ( ) , url: " 1 " . asGithubUrl. url)
43+ try await pkg. save ( on: app. db)
44+
45+ try await Repository ( package : pkg, releases: [
46+ . mock( description: " Release Notes " , descriptionHTML: " Release Notes " ,
47+ publishedAt: 2 , tagName: " 1.0.0 " , url: " some url " ) ,
48+
49+ . mock( description: nil , descriptionHTML: nil ,
50+ publishedAt: 1 , tagName: " 0.0.1 " , url: " some url " ) ,
51+ ] ) . save ( on: app. db)
52+ let jpr = try await Package . fetchCandidate ( app. db, id: pkg. id!)
53+
54+
55+ // MUT
56+ let model = try #require( PackageReleases . Model ( package : jpr) )
57+
58+ // Validate
59+ #expect( model. releases == [
60+ . init( title: " 1.0.0 " , date: " Released 50 years ago on 1 January 1970 " ,
61+ html: " Release Notes " , link: " some url " ) ,
62+
63+ . init( title: " 0.0.1 " , date: " Released 50 years ago on 1 January 1970 " ,
64+ html: nil , link: " some url " ) ,
65+ ] )
66+ // NOTE(heckj): test is sensitive to local time zones, breaks when run at GMT-7
67+ // resolves as `31 December 1969`
68+ }
6569 }
6670 }
6771
68- func test_dateFormatting ( ) throws {
72+ @ Test func dateFormatting ( ) throws {
6973
7074 // Work-around to set the local time zone for time sensitive
7175 // tests. Sets the explicit default time zone to UTC for the duration
@@ -80,24 +84,22 @@ class PackageReleasesModelTests: AppTestCase {
8084 let currentDate = Date ( timeIntervalSince1970: 500 )
8185 let targetDate = Date ( timeIntervalSince1970: 0 )
8286
83- XCTAssertEqual ( PackageReleases . Model. formatDate ( targetDate, currentDate: currentDate) ,
84- " Released 8 minutes ago on 1 January 1970 " )
87+ #expect( PackageReleases . Model. formatDate ( targetDate, currentDate: currentDate) == " Released 8 minutes ago on 1 January 1970 " )
8588 // NOTE(heckj): test is sensitive to local time zones, breaks when run at GMT-7
8689 // resolves as `31 December 1969`
8790
88- XCTAssertNil ( PackageReleases . Model. formatDate ( nil , currentDate: currentDate) )
91+ #expect ( PackageReleases . Model. formatDate ( nil , currentDate: currentDate) == nil )
8992 }
9093
91- func test_removeDuplicateHeader ( ) throws {
94+ @ Test func removeDuplicateHeader ( ) throws {
9295
9396 do { // First header is removed if it contains the version (positive case)
9497 let descriptionHTML = """
9598 <h2>Header for v1.0.0</h2>
9699 <h2>Second Header for v1.0.0</h2>
97100 """
98101
99- XCTAssertEqual ( PackageReleases . Model. updateDescription ( descriptionHTML, replacingTitle: " v1.0.0 " ) ,
100- " <h2>Second Header for v1.0.0</h2> " )
102+ #expect( PackageReleases . Model. updateDescription ( descriptionHTML, replacingTitle: " v1.0.0 " ) == " <h2>Second Header for v1.0.0</h2> " )
101103 }
102104
103105 do { // First header is *only* removed if it contains the version
@@ -106,25 +108,24 @@ class PackageReleasesModelTests: AppTestCase {
106108 <h2>Second Header for v1.0.0</h2>
107109 """
108110
109- XCTAssertEqual ( PackageReleases . Model. updateDescription ( descriptionHTML, replacingTitle: " v1.0.0 " ) ,
110- " <h2>Header for version 1</h2> \n <h2>Second Header for v1.0.0</h2> " )
111+ #expect( PackageReleases . Model. updateDescription ( descriptionHTML, replacingTitle: " v1.0.0 " ) == " <h2>Header for version 1</h2> \n <h2>Second Header for v1.0.0</h2> " )
111112 }
112113
113114 do { // Supports all header versions (h1-h6)
114115 [ " h1 " , " h2 " , " h3 " , " h4 " , " h5 " , " h6 " ] . forEach { header in
115116 let descriptionHTML = " < \( header) >v1.0.0</ \( header) > "
116- XCTAssertEqual ( PackageReleases . Model. updateDescription ( descriptionHTML, replacingTitle: " v1.0.0 " ) , " " )
117+ #expect ( PackageReleases . Model. updateDescription ( descriptionHTML, replacingTitle: " v1.0.0 " ) == " " )
117118 }
118119 }
119120 }
120121
121- func test_descriptionIsTrimmed ( ) throws {
122- XCTAssertEqual ( PackageReleases . Model. updateDescription ( nil , replacingTitle: " " ) , nil )
123- XCTAssertEqual ( PackageReleases . Model. updateDescription ( " " , replacingTitle: " " ) , nil )
124- XCTAssertEqual ( PackageReleases . Model. updateDescription ( " " , replacingTitle: " " ) , nil )
125- XCTAssertEqual ( PackageReleases . Model. updateDescription ( """
122+ @ Test func descriptionIsTrimmed ( ) throws {
123+ #expect ( PackageReleases . Model. updateDescription ( nil , replacingTitle: " " ) == nil )
124+ #expect ( PackageReleases . Model. updateDescription ( " " , replacingTitle: " " ) == nil )
125+ #expect ( PackageReleases . Model. updateDescription ( " " , replacingTitle: " " ) == nil )
126+ #expect ( PackageReleases . Model. updateDescription ( """
126127
127128
128- """ , replacingTitle: " " ) , nil )
129+ """ , replacingTitle: " " ) == nil )
129130 }
130131}
0 commit comments