@@ -531,7 +531,7 @@ describe('AdditionalContextProvider', () => {
531531 assert . strictEqual ( result . length , 2 )
532532 assert . strictEqual ( result [ 0 ] . userInputMessage ?. content ?. includes ( '<promptInstruction>' ) , true )
533533 assert . strictEqual ( result [ 0 ] . userInputMessage ?. content ?. includes ( 'Follow this rule' ) , true )
534- assert . strictEqual ( result [ 1 ] . assistantResponseMessage ?. content , '' )
534+ assert . strictEqual ( result [ 1 ] . assistantResponseMessage ?. content , 'Thinking... ' )
535535 } )
536536
537537 it ( 'should convert file context to fileContext XML' , async ( ) => {
@@ -615,4 +615,78 @@ describe('AdditionalContextProvider', () => {
615615 } )
616616 } )
617617 } )
618+
619+ describe ( 'convertRulesToRulesFolders' , ( ) => {
620+ it ( 'should convert workspace rules to folders structure' , ( ) => {
621+ sinon . stub ( workspaceUtils , 'getWorkspaceFolderPaths' ) . returns ( [ '/workspace' ] )
622+
623+ // Configure the getRules stub to return a specific value
624+ ; ( chatHistoryDb . getRules as sinon . SinonStub ) . returns ( {
625+ folders : { } , // Empty folders state (default all active)
626+ rules : { } , // Empty rules state (default all active)
627+ } )
628+
629+ const workspaceRules = [
630+ {
631+ workspaceFolder : '/workspace' ,
632+ type : 'file' as any ,
633+ relativePath : '.amazonq/rules/rule1.md' ,
634+ id : '/workspace/.amazonq/rules/rule1.md' ,
635+ } ,
636+ {
637+ workspaceFolder : '/workspace' ,
638+ type : 'file' as any ,
639+ relativePath : '.amazonq/rules/rule2.md' ,
640+ id : '/workspace/.amazonq/rules/rule2.md' ,
641+ } ,
642+ ]
643+
644+ const result = provider . convertRulesToRulesFolders ( workspaceRules , 'tab1' )
645+
646+ assert . strictEqual ( result . length , 1 )
647+ assert . strictEqual ( result [ 0 ] . folderName , '.amazonq/rules' )
648+ assert . strictEqual ( result [ 0 ] . active , true )
649+ assert . strictEqual ( result [ 0 ] . rules . length , 2 )
650+ assert . strictEqual ( result [ 0 ] . rules [ 0 ] . name , 'rule1' )
651+ assert . strictEqual ( result [ 0 ] . rules [ 1 ] . name , 'rule2' )
652+ } )
653+
654+ it ( 'should handle rules with explicit active/inactive states' , ( ) => {
655+ sinon . stub ( workspaceUtils , 'getWorkspaceFolderPaths' ) . returns ( [ '/workspace' ] )
656+
657+ // Configure the getRules stub to return specific active/inactive states
658+ ; ( chatHistoryDb . getRules as sinon . SinonStub ) . returns ( {
659+ folders : {
660+ '.amazonq/rules' : false , // This folder is explicitly inactive
661+ } ,
662+ rules : {
663+ '/workspace/.amazonq/rules/rule1.md' : true , // This rule is explicitly active
664+ '/workspace/.amazonq/rules/rule2.md' : false , // This rule is explicitly inactive
665+ } ,
666+ } )
667+
668+ const workspaceRules = [
669+ {
670+ workspaceFolder : '/workspace' ,
671+ type : 'file' as any ,
672+ relativePath : '.amazonq/rules/rule1.md' ,
673+ id : '/workspace/.amazonq/rules/rule1.md' ,
674+ } ,
675+ {
676+ workspaceFolder : '/workspace' ,
677+ type : 'file' as any ,
678+ relativePath : '.amazonq/rules/rule2.md' ,
679+ id : '/workspace/.amazonq/rules/rule2.md' ,
680+ } ,
681+ ]
682+
683+ const result = provider . convertRulesToRulesFolders ( workspaceRules , 'tab1' )
684+
685+ assert . strictEqual ( result . length , 1 )
686+ assert . strictEqual ( result [ 0 ] . folderName , '.amazonq/rules' )
687+ assert . strictEqual ( result [ 0 ] . active , 'indeterminate' ) // Should be indeterminate since rules have mixed states
688+ assert . strictEqual ( result [ 0 ] . rules [ 0 ] . active , true ) // Explicitly set to true
689+ assert . strictEqual ( result [ 0 ] . rules [ 1 ] . active , false ) // Explicitly set to false
690+ } )
691+ } )
618692} )
0 commit comments