@@ -13,6 +13,7 @@ import {
1313 getChangedFilesDetailed ,
1414 getGitBusyState ,
1515 getLinkedWorktreeMainPath ,
16+ listAllFiles ,
1617 remoteBranchExists ,
1718 splitUnifiedDiffByFile ,
1819} from "./queries" ;
@@ -597,3 +598,53 @@ describe("getLinkedWorktreeMainPath", () => {
597598 expect ( getLinkedWorktreeMainPath ( worktreeDir ) ) . toBeNull ( ) ;
598599 } ) ;
599600} ) ;
601+
602+ describe ( "listAllFiles" , ( ) => {
603+ let repoDir : string ;
604+
605+ afterEach ( async ( ) => {
606+ if ( repoDir ) {
607+ await rm ( repoDir , { recursive : true , force : true } ) ;
608+ }
609+ } ) ;
610+
611+ it ( "combines tracked and untracked files uncapped by default" , async ( ) => {
612+ repoDir = await setupRepo ( ) ;
613+ await writeFile ( path . join ( repoDir , "untracked.txt" ) , "content" ) ;
614+
615+ const files = await listAllFiles ( repoDir ) ;
616+
617+ expect ( files . sort ( ) ) . toEqual ( [ "file.txt" , "untracked.txt" ] ) ;
618+ } ) ;
619+
620+ it ( "truncates to maxFiles" , async ( ) => {
621+ repoDir = await setupRepo ( ) ;
622+ const git = createGitClient ( repoDir ) ;
623+ await writeFile ( path . join ( repoDir , "b.txt" ) , "content" ) ;
624+ await writeFile ( path . join ( repoDir , "c.txt" ) , "content" ) ;
625+ await git . add ( [ "b.txt" , "c.txt" ] ) ;
626+ await git . commit ( "add more files" ) ;
627+
628+ const files = await listAllFiles ( repoDir , { maxFiles : 2 } ) ;
629+
630+ expect ( files . length ) . toBe ( 2 ) ;
631+ } ) ;
632+
633+ it ( "keeps tracked files over untracked ones when truncating" , async ( ) => {
634+ repoDir = await setupRepo ( ) ;
635+ await writeFile ( path . join ( repoDir , "untracked.txt" ) , "content" ) ;
636+
637+ const files = await listAllFiles ( repoDir , { maxFiles : 1 } ) ;
638+
639+ expect ( files ) . toEqual ( [ "file.txt" ] ) ;
640+ } ) ;
641+
642+ it ( "returns tracked files when the untracked scan times out" , async ( ) => {
643+ repoDir = await setupRepo ( ) ;
644+ await writeFile ( path . join ( repoDir , "untracked.txt" ) , "content" ) ;
645+
646+ const files = await listAllFiles ( repoDir , { timeoutMs : 0 } ) ;
647+
648+ expect ( files ) . toContain ( "file.txt" ) ;
649+ } ) ;
650+ } ) ;
0 commit comments