Skip to content

Commit 5f360f2

Browse files
supersonicbytedaveverwer
authored andcommitted
Add more tests
1 parent c60f68f commit 5f360f2

File tree

6 files changed

+141
-4
lines changed

6 files changed

+141
-4
lines changed

Sources/App/Controllers/API/API+PackageController+GetRoute.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ extension API.PackageController {
7070
return (model, schema)
7171
}
7272

73-
private static func fetchForkedFromResult(on database: Database, repository: Repository) async throws -> ForkedFromResult? {
73+
static func fetchForkedFromResult(on database: Database, repository: Repository) async throws -> ForkedFromResult? {
7474
if let forkedFrom = repository.forkedFrom {
7575
switch forkedFrom {
7676
case .parentId(let id):

Sources/App/Views/PackageController/GetRoute.Model+ext.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ extension API.PackageController.GetRoute.Model {
196196
repoURLNode,
197197
.text(".")
198198
)
199-
case .fromSPI(let packageName, let owner, let ownerName, let repo, let originalPackageName):
199+
case .fromSPI(let packageName, _, let ownerName, _, let originalPackageName):
200200
let repoURLNode: Node<HTML.BodyContext>
201201
if packageName == originalPackageName {
202202
repoURLNode = .a(

Tests/AppTests/API+PackageController+GetRoute+ModelTests.swift

Lines changed: 130 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import SPIManifest
2121

2222
class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
2323
typealias PackageResult = PackageController.PackageResult
24+
typealias ForkedFromResult = API.PackageController.ForkedFromResult
2425

2526
func test_init_no_packageName() async throws {
2627
// Tests behaviour when we're lacking data
@@ -124,6 +125,79 @@ class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
124125
// validate
125126
XCTAssertEqual(model.documentationTarget, .external(url: "https://example.com/package/documentation"))
126127
}
128+
129+
func test_init_forked_from_github() async throws {
130+
let pkg = try await savePackage(on: app.db, "1".url)
131+
let repo = try Repository(package: pkg, forkedFrom: .parentURL("https://github.com/example/repo.git"), name: "bar", owner: "foo")
132+
try await repo.save(on: app.db)
133+
let version = try App.Version(package: pkg, latest: .defaultBranch, packageName: nil, reference: .branch("main"))
134+
try await version.save(on: app.db)
135+
let packageResult = try await PackageResult.query(on: app.db, owner: "foo", repository: "bar")
136+
let forkedFromResult = try await API.PackageController.GetRoute.fetchForkedFromResult(on: app.db, repository: packageResult.repository)
137+
138+
// MUT
139+
let model = try XCTUnwrap(API.PackageController.GetRoute.Model(result: packageResult,
140+
history: nil,
141+
products: [],
142+
targets: [],
143+
swiftVersionBuildInfo: nil,
144+
platformBuildInfo: nil,
145+
weightedKeywords: [],
146+
swift6Readiness: nil,
147+
forkedFromResult: forkedFromResult
148+
))
149+
150+
// validate
151+
XCTAssertEqual(model.forkedFromInfo, API.PackageController.GetRoute.Model.ForkedFromInfo.fromGitHub(url: "https://github.com/example/repo.git"))
152+
}
153+
154+
func test_init_forked_from_spi() async throws {
155+
let originalPkg = try await savePackage(on: app.db, "https://github.com/original/original")
156+
let originalRepo = try Repository(
157+
package: originalPkg,
158+
name: "original",
159+
owner: "original",
160+
ownerName: "OriginalOwner"
161+
)
162+
try await originalRepo.save(on: app.db)
163+
let originalVersion = try App.Version(package: originalPkg, latest: .defaultBranch, packageName: "OriginalPkg", reference: .branch("main"))
164+
try await originalVersion.save(on: app.db)
165+
let pkg = try await savePackage(on: app.db, "1".url)
166+
let repo = try Repository(
167+
package: pkg,
168+
forkedFrom: .parentId(originalPkg.requireID()),
169+
name: "bar",
170+
owner: "foo"
171+
)
172+
try await repo.save(on: app.db)
173+
let version = try App.Version(package: pkg, latest: .defaultBranch, packageName: nil, reference: .branch("main"))
174+
try await version.save(on: app.db)
175+
176+
let packageResult = try await PackageResult.query(on: app.db, owner: "foo", repository: "bar")
177+
let forkedFromResult = try await API.PackageController.GetRoute.fetchForkedFromResult(on: app.db, repository: packageResult.repository)
178+
179+
// MUT
180+
let model = try XCTUnwrap(API.PackageController.GetRoute.Model(result: packageResult,
181+
history: nil,
182+
products: [],
183+
targets: [],
184+
swiftVersionBuildInfo: nil,
185+
platformBuildInfo: nil,
186+
weightedKeywords: [],
187+
swift6Readiness: nil,
188+
forkedFromResult: forkedFromResult
189+
))
190+
191+
// validate
192+
let info = API.PackageController.GetRoute.Model.ForkedFromInfo.fromSPI(
193+
packageName: "bar",
194+
originalOwner: "original",
195+
originalOwnerName: "OriginalOwner",
196+
originalRepo: "original",
197+
originalPackageName: "OriginalPkg"
198+
)
199+
XCTAssertEqual(model.forkedFromInfo, info)
200+
}
127201

128202
func test_gitHubOwnerUrl() throws {
129203
var model = API.PackageController.GetRoute.Model.mock
@@ -152,12 +226,38 @@ class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
152226
assertSnapshot(of: renderedHistory, as: .lines)
153227
}
154228

155-
func test_forked_from() throws {
229+
func test_forked_from_github() throws {
156230
var model = API.PackageController.GetRoute.Model.mock
157231
model.forkedFromInfo = .fromGitHub(url: "https://github.com/owner/repository.git")
158232
let renderedForkedFrom = model.forkedListItem().render(indentedBy: .spaces(2))
159233
assertSnapshot(of: renderedForkedFrom, as: .lines)
160234
}
235+
236+
func test_forked_from_spi_same_package_name() throws {
237+
var model = API.PackageController.GetRoute.Model.mock
238+
model.forkedFromInfo = .fromSPI(
239+
packageName: "Test",
240+
originalOwner: "owner",
241+
originalOwnerName: "OriginalOwner",
242+
originalRepo: "repo",
243+
originalPackageName: "Test"
244+
)
245+
let renderedForkedFrom = model.forkedListItem().render(indentedBy: .spaces(2))
246+
assertSnapshot(of: renderedForkedFrom, as: .lines)
247+
}
248+
249+
func test_forked_from_spi_different_package_name() throws {
250+
var model = API.PackageController.GetRoute.Model.mock
251+
model.forkedFromInfo = .fromSPI(
252+
packageName: "Test",
253+
originalOwner: "owner",
254+
originalOwnerName: "OriginalOwner",
255+
originalRepo: "repo",
256+
originalPackageName: "Different"
257+
)
258+
let renderedForkedFrom = model.forkedListItem().render(indentedBy: .spaces(2))
259+
assertSnapshot(of: renderedForkedFrom, as: .lines)
260+
}
161261

162262
func test_binary_targets() throws {
163263
var model = API.PackageController.GetRoute.Model.mock
@@ -344,12 +444,40 @@ class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
344444
XCTAssertEqual(model.authorsListItem().render(), "<li class=\"authors\">By Author One, Author Two, and more!</li>")
345445
}
346446

347-
func test_forkedFrom_formatting() throws {
447+
func test_forkedFrom_github_formatting() throws {
348448
var model = API.PackageController.GetRoute.Model.mock
349449
model.forkedFromInfo = .fromGitHub(url: "https://github.com/owner/repository.git")
350450
let renderedForkedFrom = model.forkedListItem().render()
351451
XCTAssertEqual(renderedForkedFrom, "<li class=\"forked\">Forked from <a href=\"https://github.com/owner/repository.git\">repository</a>.</li>")
352452
}
453+
454+
func test_forkedFrom_spi_same_package_name_formatting() throws {
455+
var model = API.PackageController.GetRoute.Model.mock
456+
model.forkedFromInfo = .fromSPI(
457+
packageName: "Test",
458+
originalOwner: "owner",
459+
originalOwnerName: "OriginalOwner",
460+
originalRepo: "repo",
461+
originalPackageName: "Test"
462+
)
463+
let url = SiteURL.package(.value("owner"), .value("repo"), nil).absoluteURL()
464+
let renderedForkedFrom = model.forkedListItem().render()
465+
XCTAssertEqual(renderedForkedFrom, "<li class=\"forked\">Forked from <a href=\"\(url)\">OriginalOwner</a>.</li>")
466+
}
467+
468+
func test_forkedFrom_spi_different_package_name_formatting() throws {
469+
var model = API.PackageController.GetRoute.Model.mock
470+
model.forkedFromInfo = .fromSPI(
471+
packageName: "Test",
472+
originalOwner: "owner",
473+
originalOwnerName: "OriginalOwner",
474+
originalRepo: "repo",
475+
originalPackageName: "Different"
476+
)
477+
let url = SiteURL.package(.value("owner"), .value("repo"), nil).absoluteURL()
478+
let renderedForkedFrom = model.forkedListItem().render()
479+
XCTAssertEqual(renderedForkedFrom, "<li class=\"forked\">Forked from <a href=\"\(url)\">Different by OriginalOwner</a>.</li>")
480+
}
353481

354482
func test_BuildInfo_init() throws {
355483
// ensure nil propagation when all versions' values are nil
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<li class="forked">Forked from
2+
<a href="https://github.com/owner/repository.git">repository</a>.
3+
</li>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<li class="forked">Forked from
2+
<a href="http://localhost:8080/owner/repo">Different by OriginalOwner</a>.
3+
</li>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<li class="forked">Forked from
2+
<a href="http://localhost:8080/owner/repo">OriginalOwner</a>.
3+
</li>

0 commit comments

Comments
 (0)