@@ -13,6 +13,11 @@ jest.mock('../../shared/api/github-api', () => ({
1313 assignIssue : jest . fn ( ) ,
1414} ) ) ;
1515
16+ jest . mock ( '../../shared/helpers/coderabbit-plan.js' , ( ) => ( {
17+ triggerCodeRabbitPlan : jest . fn ( ) ,
18+ hasExistingCodeRabbitPlan : jest . fn ( ) ,
19+ } ) ) ;
20+
1621jest . mock ( '../../shared/helpers/comment' , ( ) => ( {
1722 buildAlreadyAssignedComment : jest . fn ( ( ) => 'already assigned' ) ,
1823 buildGuardComment : jest . fn ( ( ) => 'guard comment' ) ,
@@ -35,6 +40,11 @@ const { runAssignmentFlow } = require('../../shared/core/issue-assign');
3540const githubApi = require ( '../../shared/api/github-api' ) ;
3641const spam = require ( '../../shared/helpers/spam' ) ;
3742
43+ const {
44+ triggerCodeRabbitPlan,
45+ hasExistingCodeRabbitPlan,
46+ } = require ( '../../shared/helpers/coderabbit-plan.js' ) ;
47+
3848function createContext ( overrides = { } ) {
3949 return {
4050 payload : {
@@ -86,6 +96,9 @@ beforeEach(() => {
8696 spam . isSpamBlockedLevel . mockReturnValue ( false ) ;
8797 spam . isSpamLimited . mockReturnValue ( false ) ;
8898 spam . getAssignmentLimit . mockReturnValue ( 5 ) ;
99+
100+ hasExistingCodeRabbitPlan . mockResolvedValue ( false ) ;
101+ triggerCodeRabbitPlan . mockResolvedValue ( true ) ;
89102} ) ;
90103
91104describe ( 'runAssignmentFlow - validation' , ( ) => {
@@ -597,8 +610,9 @@ describe('runAssignmentFlow - assignment', () => {
597610 expect ( githubApi . assignIssue ) . not . toHaveBeenCalled ( ) ;
598611 } ) ;
599612
600- test ( 'assigns issue when all checks pass' , async ( ) => {
613+ test ( 'assigns issue and triggers CodeRabbit when all checks pass' , async ( ) => {
601614 githubApi . getOpenAssignments . mockResolvedValue ( 0 ) ;
615+ hasExistingCodeRabbitPlan . mockResolvedValue ( false ) ;
602616
603617 const github = createGithub ( ) ;
604618 const context = createContext ( ) ;
@@ -613,8 +627,54 @@ describe('runAssignmentFlow - assignment', () => {
613627 username : 'parv' ,
614628 } ) ;
615629
630+ expect ( hasExistingCodeRabbitPlan ) . toHaveBeenCalledWith (
631+ github ,
632+ 'hiero-ledger' ,
633+ 'hiero-sdk-python' ,
634+ 10
635+ ) ;
636+
637+ expect ( triggerCodeRabbitPlan ) . toHaveBeenCalledWith (
638+ github ,
639+ 'hiero-ledger' ,
640+ 'hiero-sdk-python' ,
641+ context . payload . issue
642+ ) ;
643+
616644 expect ( githubApi . postIssueComment ) . not . toHaveBeenCalled ( ) ;
617645 } ) ;
646+
647+ test ( 'does not trigger CodeRabbit when a plan already exists' , async ( ) => {
648+ githubApi . getOpenAssignments . mockResolvedValue ( 0 ) ;
649+ hasExistingCodeRabbitPlan . mockResolvedValue ( true ) ;
650+
651+ const github = createGithub ( ) ;
652+ const context = createContext ( ) ;
653+
654+ await runAssignmentFlow ( { github, context } ) ;
655+
656+ expect ( githubApi . assignIssue ) . toHaveBeenCalled ( ) ;
657+ expect ( hasExistingCodeRabbitPlan ) . toHaveBeenCalled ( ) ;
658+ expect ( triggerCodeRabbitPlan ) . not . toHaveBeenCalled ( ) ;
659+ } ) ;
660+
661+ test ( 'does not fail assignment when CodeRabbit trigger fails' , async ( ) => {
662+ githubApi . getOpenAssignments . mockResolvedValue ( 0 ) ;
663+ hasExistingCodeRabbitPlan . mockResolvedValue ( false ) ;
664+ triggerCodeRabbitPlan . mockRejectedValue (
665+ new Error ( 'CodeRabbit API failed' )
666+ ) ;
667+
668+ const github = createGithub ( ) ;
669+ const context = createContext ( ) ;
670+
671+ await expect (
672+ runAssignmentFlow ( { github, context } )
673+ ) . resolves . not . toThrow ( ) ;
674+
675+ expect ( githubApi . assignIssue ) . toHaveBeenCalled ( ) ;
676+ expect ( triggerCodeRabbitPlan ) . toHaveBeenCalled ( ) ;
677+ } ) ;
618678} ) ;
619679
620680describe ( 'runAssignmentFlow - error handling' , ( ) => {
@@ -676,31 +736,21 @@ describe('runAssignmentFlow - error handling', () => {
676736 expect ( githubApi . assignIssue ) . toHaveBeenCalled ( ) ;
677737 } ) ;
678738
679- test ( 'propagates post comment errors ' , async ( ) => {
680- githubApi . postIssueComment . mockRejectedValue (
681- new Error ( 'Comment failed' )
739+ test ( 'does not trigger CodeRabbit when assignment fails ' , async ( ) => {
740+ githubApi . assignIssue . mockRejectedValue (
741+ new Error ( 'Assignment failed' )
682742 ) ;
683743
684- githubApi . countCompletedIssuesWithLabel . mockResolvedValue ( 0 ) ;
685-
686744 const github = createGithub ( ) ;
745+ const context = createContext ( ) ;
687746
688- const context = createContext ( {
689- issue : {
690- number : 42 ,
691- assignees : [ ] ,
692- labels : [
693- {
694- name : 'skill: intermediate' ,
695- } ,
696- ] ,
697- } ,
747+ await runAssignmentFlow ( {
748+ github,
749+ context,
698750 } ) ;
699751
700- await expect (
701- runAssignmentFlow ( { github, context } )
702- ) . rejects . toThrow ( 'Comment failed' ) ;
703-
704- expect ( githubApi . assignIssue ) . not . toHaveBeenCalled ( ) ;
752+ expect ( githubApi . assignIssue ) . toHaveBeenCalled ( ) ;
753+ expect ( hasExistingCodeRabbitPlan ) . not . toHaveBeenCalled ( ) ;
754+ expect ( triggerCodeRabbitPlan ) . not . toHaveBeenCalled ( ) ;
705755 } ) ;
706756} ) ;
0 commit comments