@@ -125,7 +125,8 @@ class IngestorTests: AppTestCase {
125
125
Date ( timeIntervalSince1970: 1 ) ,
126
126
] ,
127
127
license: . mit,
128
- openIssues: 1 ,
128
+ openIssues: 1 ,
129
+ parentUrl: nil ,
129
130
openPullRequests: 2 ,
130
131
owner: " foo " ,
131
132
pullRequestsClosedAtDates: [
@@ -208,6 +209,7 @@ class IngestorTests: AppTestCase {
208
209
issuesClosedAtDates: [ ] ,
209
210
license: . mit,
210
211
openIssues: 1 ,
212
+ parentUrl: nil ,
211
213
openPullRequests: 2 ,
212
214
owner: " foo " ,
213
215
pullRequestsClosedAtDates: [ ] ,
@@ -353,6 +355,7 @@ class IngestorTests: AppTestCase {
353
355
issuesClosedAtDates: [ ] ,
354
356
license: . mit,
355
357
openIssues: 0 ,
358
+ parentUrl: nil ,
356
359
openPullRequests: 0 ,
357
360
owner: " owner " ,
358
361
pullRequestsClosedAtDates: [ ] ,
@@ -594,4 +597,92 @@ class IngestorTests: AppTestCase {
594
597
let postMigrationFetchedRepo = try await XCTUnwrapAsync ( try await Repository . query ( on: app. db) . first ( ) )
595
598
XCTAssertEqual ( postMigrationFetchedRepo. s3Readme, . cached( s3ObjectUrl: " object-url " , githubEtag: " " ) )
596
599
}
600
+
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
+ }
613
+
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
620
+ }
621
+
622
+ guard let id = pkg. id else {
623
+ XCTFail ( " Failed to get package id " )
624
+ return
625
+ }
626
+
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 " )
645
+ }
646
+
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 )
672
+ }
673
+
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
680
+ }
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
+ }
597
688
}
0 commit comments