@@ -156,7 +156,8 @@ class IngestorTests: AppTestCase {
156
156
html: " readme html " ,
157
157
htmlUrl: " readme html url " ,
158
158
imagesToCache: [ ] ) ,
159
- s3Readme: . cached( s3ObjectUrl: " url " , githubEtag: " etag " ) )
159
+ s3Readme: . cached( s3ObjectUrl: " url " , githubEtag: " etag " ) ,
160
+ fork: . parentURL( " https://github.com/foo/bar.git " ) )
160
161
161
162
// validate
162
163
do {
@@ -165,6 +166,7 @@ class IngestorTests: AppTestCase {
165
166
let repo = try await Repository . query ( on: app. db) . first ( ) . unwrap ( )
166
167
XCTAssertEqual ( repo. defaultBranch, " main " )
167
168
XCTAssertEqual ( repo. forks, 1 )
169
+ XCTAssertEqual ( repo. forkedFrom, . parentURL( " https://github.com/foo/bar.git " ) )
168
170
XCTAssertEqual ( repo. fundingLinks, [
169
171
. init( platform: . gitHub, url: " https://github.com/username " ) ,
170
172
. init( platform: . customUrl, url: " https://example.com/username1 " ) ,
@@ -598,91 +600,40 @@ class IngestorTests: AppTestCase {
598
600
XCTAssertEqual ( postMigrationFetchedRepo. s3Readme, . cached( s3ObjectUrl: " object-url " , githubEtag: " " ) )
599
601
}
600
602
601
- func test_ingest_storeForkedFromPackageInSPI( ) async throws {
602
- let pkg = Package ( url: " https://github.com/foo/bar.git " . url,
603
- processingStage: . analysis)
604
- let forkedPkg = Package (
605
- url: " https://github.com/taz/bar.git " ,
606
- processingStage: . reconciliation
607
- )
608
- try await pkg. save ( on: app. db)
609
- try await forkedPkg. save ( on: app. db)
610
- Current . fetchMetadata = { _, owner, repository in
611
- . mock( owner: owner, repository: repository, parentUrl: " https://github.com/foo/bar.git " )
612
- }
603
+ func test_getFork( ) async throws {
604
+ try await Package ( id: . id0, url: " https://github.com/foo/parent.git " . url, processingStage: . analysis) . save ( on: app. db)
605
+ try await Package ( url: " https://github.com/bar/forked.git " , processingStage: . analysis) . save ( on: app. db)
613
606
614
- // MUT
615
- try await ingest ( client : app . client , database : app . db , mode : . limit ( 1 ) )
616
-
617
- guard let forkedId = forkedPkg . id else {
618
- XCTFail ( " Failed to get forked package id " )
619
- return
607
+ var metadata = Github . Metadata . mock
608
+
609
+ do { // test lookup when package is in the index
610
+ metadata . repository ? . parent = . init ( url : " https://github.com/foo/parent.git " )
611
+ let fork = try await getFork ( on : app . db , metadata : metadata )
612
+ XCTAssertEqual ( fork , . parentId ( . id0 ) )
620
613
}
621
-
622
- guard let id = pkg. id else {
623
- XCTFail ( " Failed to get package id " )
624
- return
614
+
615
+ do { // test lookup when package is in the index but with different case in URL
616
+ metadata. repository? . parent = . init( url: " https://github.com/Foo/Parent.git " )
617
+ let fork = try await getFork ( on: app. db, metadata: metadata)
618
+ XCTAssertEqual ( fork, . parentId( . id0) )
625
619
}
626
620
627
- let repo = try await Repository
628
- . query ( on: app. db)
629
- . filter ( \Repository . $package. $id == forkedId) . first ( )
630
-
631
- XCTAssertNotNil ( repo? . forkedFrom)
632
-
633
- XCTAssertEqual ( repo? . forkedFrom, . parentId( id) )
634
-
635
- }
636
-
637
- func test_ingest_storeForkedFromPackageNotInSPI( ) async throws {
638
- let forkedPkg = Package (
639
- url: " https://github.com/taz/bar.git " ,
640
- processingStage: . reconciliation
641
- )
642
- try await forkedPkg. save ( on: app. db)
643
- Current . fetchMetadata = { _, owner, repository in
644
- . mock( owner: owner, repository: repository, parentUrl: " https://github.com/foo/bar.git " )
621
+ do { // test whem metadata repo url doesn't have `.git` at end
622
+ metadata. repository? . parent = . init( url: " https://github.com/Foo/Parent " )
623
+ let fork = try await getFork ( on: app. db, metadata: metadata)
624
+ XCTAssertEqual ( fork, . parentId( . id0) )
645
625
}
646
626
647
- // MUT
648
- try await ingest ( client: app. client, database: app. db, mode: . limit( 1 ) )
649
-
650
- guard let forkedId = forkedPkg. id else {
651
- XCTFail ( " Failed to get forked package id " )
652
- return
653
- }
654
-
655
- let repo = try await Repository
656
- . query ( on: app. db)
657
- . filter ( \Repository . $package. $id == forkedId) . first ( )
658
-
659
- XCTAssertNotNil ( repo? . forkedFrom)
660
-
661
- XCTAssertEqual ( repo? . forkedFrom, . parentURL( " https://github.com/foo/bar.git " ) )
662
- }
663
-
664
- func test_ingest_storeForkedFromShouldNeNil( ) async throws {
665
- let forkedPkg = Package (
666
- url: " https://github.com/taz/bar.git " ,
667
- processingStage: . reconciliation
668
- )
669
- try await forkedPkg. save ( on: app. db)
670
- Current . fetchMetadata = { _, owner, repository in
671
- . mock( owner: owner, repository: repository, parentUrl: nil )
627
+ do { // test lookup when package is not in the index
628
+ metadata. repository? . parent = . init( url: " https://github.com/some/other.git " )
629
+ let fork = try await getFork ( on: app. db, metadata: metadata)
630
+ XCTAssertEqual ( fork, . parentURL( " https://github.com/some/other.git " ) )
672
631
}
673
632
674
- // MUT
675
- try await ingest ( client: app. client, database: app. db, mode: . limit( 1 ) )
676
-
677
- guard let forkedId = forkedPkg. id else {
678
- XCTFail ( " Failed to get forked package id " )
679
- return
633
+ do { // test lookup when parent url is nil
634
+ metadata. repository? . parent = . init( url: nil )
635
+ let fork = try await getFork ( on: app. db, metadata: metadata)
636
+ XCTAssertEqual ( fork, nil )
680
637
}
681
-
682
- let repo = try await Repository
683
- . query ( on: app. db)
684
- . filter ( \Repository . $package. $id == forkedId) . first ( )
685
-
686
- XCTAssertNil ( repo? . forkedFrom)
687
638
}
688
639
}
0 commit comments