@@ -21,6 +21,7 @@ import SPIManifest
21
21
22
22
class API_PackageController_GetRoute_ModelTests : SnapshotTestCase {
23
23
typealias PackageResult = PackageController . PackageResult
24
+ typealias ForkedFromResult = API . PackageController . ForkedFromResult
24
25
25
26
func test_init_no_packageName( ) async throws {
26
27
// Tests behaviour when we're lacking data
@@ -124,6 +125,79 @@ class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
124
125
// validate
125
126
XCTAssertEqual ( model. documentationTarget, . external( url: " https://example.com/package/documentation " ) )
126
127
}
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
+ }
127
201
128
202
func test_gitHubOwnerUrl( ) throws {
129
203
var model = API . PackageController. GetRoute. Model. mock
@@ -152,12 +226,38 @@ class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
152
226
assertSnapshot ( of: renderedHistory, as: . lines)
153
227
}
154
228
155
- func test_forked_from ( ) throws {
229
+ func test_forked_from_github ( ) throws {
156
230
var model = API . PackageController. GetRoute. Model. mock
157
231
model. forkedFromInfo = . fromGitHub( url: " https://github.com/owner/repository.git " )
158
232
let renderedForkedFrom = model. forkedListItem ( ) . render ( indentedBy: . spaces( 2 ) )
159
233
assertSnapshot ( of: renderedForkedFrom, as: . lines)
160
234
}
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
+ }
161
261
162
262
func test_binary_targets( ) throws {
163
263
var model = API . PackageController. GetRoute. Model. mock
@@ -344,12 +444,40 @@ class API_PackageController_GetRoute_ModelTests: SnapshotTestCase {
344
444
XCTAssertEqual ( model. authorsListItem ( ) . render ( ) , " <li class= \" authors \" >By Author One, Author Two, and more!</li> " )
345
445
}
346
446
347
- func test_forkedFrom_formatting ( ) throws {
447
+ func test_forkedFrom_github_formatting ( ) throws {
348
448
var model = API . PackageController. GetRoute. Model. mock
349
449
model. forkedFromInfo = . fromGitHub( url: " https://github.com/owner/repository.git " )
350
450
let renderedForkedFrom = model. forkedListItem ( ) . render ( )
351
451
XCTAssertEqual ( renderedForkedFrom, " <li class= \" forked \" >Forked from <a href= \" https://github.com/owner/repository.git \" >repository</a>.</li> " )
352
452
}
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
+ }
353
481
354
482
func test_BuildInfo_init( ) throws {
355
483
// ensure nil propagation when all versions' values are nil
0 commit comments