Skip to content

Commit 5661a6e

Browse files
committed
Convert PackageReleasesModelTests
1 parent 9e3a0be commit 5661a6e

File tree

1 file changed

+46
-45
lines changed

1 file changed

+46
-45
lines changed

Tests/AppTests/PackageReleasesModelTests.swift

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,17 @@
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
1819
import 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

Comments
 (0)