@@ -45,6 +45,7 @@ const { analyzeChecklist } = await import('./checklist-analysis.js');
4545const { extractMaintainerActionHints } = await import ( './maintainer-analysis.js' ) ;
4646const { determineReviewDecision, getLatestChangesRequestedDate, checkUnrespondedComments, isAllSelfReplies } =
4747 await import ( './review-analysis.js' ) ;
48+ const { makeFetchedPR } = await import ( './test-utils.js' ) ;
4849
4950describe ( 'PRMonitor CI status deduplication' , ( ) => {
5051 const emptyCombinedStatus = {
@@ -1020,29 +1021,8 @@ describe('PRMonitor getCIStatus auth-gate filtering', () => {
10201021} ) ;
10211022
10221023describe ( 'PRMonitor generateDigest' , ( ) => {
1023- function makeFetchedPR ( overrides : Partial < import ( './types.js' ) . FetchedPR > = { } ) : import ( './types.js' ) . FetchedPR {
1024- return {
1025- id : 1 ,
1026- url : 'https://github.com/owner/repo/pull/1' ,
1027- repo : 'owner/repo' ,
1028- number : 1 ,
1029- title : 'Test PR' ,
1030- status : 'healthy' ,
1031- displayLabel : '[Healthy]' ,
1032- displayDescription : 'Everything looks good — normal review cycle' ,
1033- createdAt : '2026-02-01T00:00:00Z' ,
1034- updatedAt : '2026-02-07T00:00:00Z' ,
1035- daysSinceActivity : 1 ,
1036- ciStatus : 'passing' ,
1037- failingCheckNames : [ ] ,
1038- classifiedChecks : [ ] ,
1039- hasMergeConflict : false ,
1040- reviewDecision : 'review_required' ,
1041- hasUnrespondedComment : false ,
1042- hasIncompleteChecklist : false ,
1043- maintainerActionHints : [ ] ,
1044- ...overrides ,
1045- } ;
1024+ function makeDigestPR ( overrides : Parameters < typeof makeFetchedPR > [ 0 ] = { } ) {
1025+ return makeFetchedPR ( { reviewDecision : 'review_required' , ...overrides } ) ;
10461026 }
10471027
10481028 beforeEach ( ( ) => {
@@ -1064,17 +1044,17 @@ describe('PRMonitor generateDigest', () => {
10641044
10651045 it ( 'should categorize PRs by status' , ( ) => {
10661046 const prs = [
1067- makeFetchedPR ( { status : 'needs_response' , number : 1 } ) ,
1068- makeFetchedPR ( { status : 'failing_ci' , number : 2 } ) ,
1069- makeFetchedPR ( { status : 'merge_conflict' , number : 3 } ) ,
1070- makeFetchedPR ( { status : 'healthy' , number : 4 } ) ,
1071- makeFetchedPR ( { status : 'dormant' , number : 5 } ) ,
1072- makeFetchedPR ( { status : 'approaching_dormant' , number : 6 } ) ,
1073- makeFetchedPR ( { status : 'needs_changes' , number : 7 } ) ,
1074- makeFetchedPR ( { status : 'changes_addressed' , number : 8 } ) ,
1075- makeFetchedPR ( { status : 'waiting_on_maintainer' , number : 9 } ) ,
1076- makeFetchedPR ( { status : 'incomplete_checklist' , number : 10 } ) ,
1077- makeFetchedPR ( { status : 'waiting' , number : 11 } ) ,
1047+ makeDigestPR ( { status : 'needs_response' , number : 1 } ) ,
1048+ makeDigestPR ( { status : 'failing_ci' , number : 2 } ) ,
1049+ makeDigestPR ( { status : 'merge_conflict' , number : 3 } ) ,
1050+ makeDigestPR ( { status : 'healthy' , number : 4 } ) ,
1051+ makeDigestPR ( { status : 'dormant' , number : 5 } ) ,
1052+ makeDigestPR ( { status : 'approaching_dormant' , number : 6 } ) ,
1053+ makeDigestPR ( { status : 'needs_changes' , number : 7 } ) ,
1054+ makeDigestPR ( { status : 'changes_addressed' , number : 8 } ) ,
1055+ makeDigestPR ( { status : 'waiting_on_maintainer' , number : 9 } ) ,
1056+ makeDigestPR ( { status : 'incomplete_checklist' , number : 10 } ) ,
1057+ makeDigestPR ( { status : 'waiting' , number : 11 } ) ,
10781058 ] ;
10791059
10801060 const monitor = new PRMonitor ( 'fake-token' ) ;
@@ -1094,18 +1074,18 @@ describe('PRMonitor generateDigest', () => {
10941074
10951075 it ( 'should calculate totalNeedingAttention correctly' , ( ) => {
10961076 const prs = [
1097- makeFetchedPR ( { status : 'needs_response' , number : 1 } ) ,
1098- makeFetchedPR ( { status : 'needs_changes' , number : 2 } ) ,
1099- makeFetchedPR ( { status : 'failing_ci' , number : 3 } ) ,
1100- makeFetchedPR ( { status : 'merge_conflict' , number : 4 } ) ,
1101- makeFetchedPR ( { status : 'needs_rebase' , number : 5 } ) ,
1102- makeFetchedPR ( { status : 'missing_required_files' , number : 6 } ) ,
1103- makeFetchedPR ( { status : 'incomplete_checklist' , number : 7 } ) ,
1077+ makeDigestPR ( { status : 'needs_response' , number : 1 } ) ,
1078+ makeDigestPR ( { status : 'needs_changes' , number : 2 } ) ,
1079+ makeDigestPR ( { status : 'failing_ci' , number : 3 } ) ,
1080+ makeDigestPR ( { status : 'merge_conflict' , number : 4 } ) ,
1081+ makeDigestPR ( { status : 'needs_rebase' , number : 5 } ) ,
1082+ makeDigestPR ( { status : 'missing_required_files' , number : 6 } ) ,
1083+ makeDigestPR ( { status : 'incomplete_checklist' , number : 7 } ) ,
11041084 // These should NOT count toward totalNeedingAttention
1105- makeFetchedPR ( { status : 'healthy' , number : 8 } ) ,
1106- makeFetchedPR ( { status : 'waiting' , number : 9 } ) ,
1107- makeFetchedPR ( { status : 'dormant' , number : 10 } ) ,
1108- makeFetchedPR ( { status : 'waiting_on_maintainer' , number : 11 } ) ,
1085+ makeDigestPR ( { status : 'healthy' , number : 8 } ) ,
1086+ makeDigestPR ( { status : 'waiting' , number : 9 } ) ,
1087+ makeDigestPR ( { status : 'dormant' , number : 10 } ) ,
1088+ makeDigestPR ( { status : 'waiting_on_maintainer' , number : 11 } ) ,
11091089 ] ;
11101090
11111091 const monitor = new PRMonitor ( 'fake-token' ) ;
@@ -1764,29 +1744,8 @@ describe('isAcknowledgmentComment (Issue #69)', () => {
17641744} ) ;
17651745
17661746describe ( 'computeDisplayLabel (#79)' , ( ) => {
1767- function makePR ( overrides : Partial < import ( './types.js' ) . FetchedPR > = { } ) : import ( './types.js' ) . FetchedPR {
1768- return {
1769- id : 1 ,
1770- url : 'https://github.com/owner/repo/pull/1' ,
1771- repo : 'owner/repo' ,
1772- number : 1 ,
1773- title : 'Test PR' ,
1774- status : 'healthy' ,
1775- displayLabel : '' ,
1776- displayDescription : '' ,
1777- createdAt : '2026-02-01T00:00:00Z' ,
1778- updatedAt : '2026-02-07T00:00:00Z' ,
1779- daysSinceActivity : 1 ,
1780- ciStatus : 'passing' ,
1781- failingCheckNames : [ ] ,
1782- classifiedChecks : [ ] ,
1783- hasMergeConflict : false ,
1784- reviewDecision : 'review_required' ,
1785- hasUnrespondedComment : false ,
1786- hasIncompleteChecklist : false ,
1787- maintainerActionHints : [ ] ,
1788- ...overrides ,
1789- } ;
1747+ function makePR ( overrides : Parameters < typeof makeFetchedPR > [ 0 ] = { } ) {
1748+ return makeFetchedPR ( { displayLabel : '' , displayDescription : '' , reviewDecision : 'review_required' , ...overrides } ) ;
17901749 }
17911750
17921751 it ( 'should return [Healthy] for healthy status' , ( ) => {
0 commit comments