Skip to content

Commit 57a0b21

Browse files
Resort to fallback URL when package can't be found
1 parent 0b40fce commit 57a0b21

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ extension API.PackageController.GetRoute {
9090
static func forkedFromInfo(on database: Database, fork: Fork?) async -> Model.ForkedFromInfo? {
9191
guard let forkedFrom = fork else { return nil }
9292
switch forkedFrom {
93-
case let .parentId(id):
94-
return await Model.ForkedFromInfo.query(on: database, packageId: id)
93+
case .parentId(let id, let fallbackURL):
94+
return await Model.ForkedFromInfo.query(on: database, packageId: id, fallbackURL: fallbackURL)
9595
case let .parentURL(url):
9696
return .fromGitHub(url: url)
9797
}
@@ -100,15 +100,15 @@ extension API.PackageController.GetRoute {
100100

101101

102102
extension API.PackageController.GetRoute.Model.ForkedFromInfo {
103-
static func query(on database: Database, packageId: Package.Id) async -> Self? {
103+
static func query(on database: Database, packageId: Package.Id, fallbackURL: String) async -> Self? {
104104
let model = try? await Joined3<Package, Repository, Version>
105105
.query(on: database, packageId: packageId, version: .defaultBranch)
106106
.first()
107107

108108
guard let repoName = model?.repository.name,
109109
let ownerName = model?.repository.ownerName,
110110
let owner = model?.repository.owner else {
111-
return nil
111+
return .fromGitHub(url: fallbackURL)
112112
}
113113

114114
return .fromSPI(originalOwner: owner,

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
132132
.save(on: app.db)
133133

134134
// MUT
135-
let forkedFrom = await API.PackageController.GetRoute.Model.ForkedFromInfo.query(on: app.db, packageId: .id0)
135+
let forkedFrom = await API.PackageController.GetRoute.Model.ForkedFromInfo.query(on: app.db, packageId: .id0, fallbackURL: "https://github.com/original/original.git")
136136

137137
// validate
138138
XCTAssertEqual(forkedFrom, .fromSPI(originalOwner: "original",
@@ -141,6 +141,15 @@ class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
141141
originalPackageName: "OriginalPkg"))
142142
}
143143

144+
func test_ForkedFromInfo_query_fallback() async throws {
145+
// when the package can't be found resort to fallback URL
146+
// MUT
147+
let forkedFrom = await API.PackageController.GetRoute.Model.ForkedFromInfo.query(on: app.db, packageId: .id0, fallbackURL: "https://github.com/original/original.git")
148+
149+
// validate
150+
XCTAssertEqual(forkedFrom, .fromGitHub(url: "https://github.original/original.git"))
151+
}
152+
144153
func test_gitHubOwnerUrl() throws {
145154
var model = API.PackageController.GetRoute.Model.mock
146155
model.repositoryOwner = "owner"

0 commit comments

Comments
 (0)