@@ -219,6 +219,29 @@ describe('makeDirectoryWithRandomName', () => {
219219 } )
220220 } )
221221
222+ test ( 'returns an empty string if unable to generate an available name' , async ( ) => {
223+ await inTemporaryDirectory ( async ( tmpDir ) => {
224+ // Given
225+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'taken' )
226+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'directory' )
227+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'taken' )
228+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'directory' )
229+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'taken' )
230+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'directory' )
231+
232+ const content = 'test'
233+ const filePath = joinPath ( tmpDir , 'taken-directory-app' )
234+ await writeFile ( filePath , content )
235+
236+ // When
237+ const got = await generateRandomNameForSubdirectory ( { suffix : 'app' , directory : tmpDir } )
238+
239+ // Then
240+ expect ( got ) . toEqual ( '' )
241+ expect ( takeRandomFromArray ) . toHaveBeenCalledTimes ( 6 )
242+ } )
243+ } )
244+
222245 test ( 'rerolls the name if an invalid name is produced' , async ( ) => {
223246 await inTemporaryDirectory ( async ( tmpDir ) => {
224247 // Given
@@ -239,6 +262,29 @@ describe('makeDirectoryWithRandomName', () => {
239262 expect ( takeRandomFromArray ) . toHaveBeenCalledTimes ( 4 )
240263 } )
241264 } )
265+
266+ test ( 'returns an empty string if unable to generate a valid name' , async ( ) => {
267+ await inTemporaryDirectory ( async ( tmpDir ) => {
268+ // Given
269+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'invalid' )
270+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'name' )
271+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'invalid' )
272+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'name' )
273+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'invalid' )
274+ vi . mocked ( takeRandomFromArray ) . mockReturnValueOnce ( 'name' )
275+
276+ // When
277+ const got = await generateRandomNameForSubdirectory ( {
278+ suffix : 'app' ,
279+ directory : tmpDir ,
280+ isValidName : ( name : string ) => name !== 'invalid-name-app' ,
281+ } )
282+
283+ // Then
284+ expect ( got ) . toEqual ( '' )
285+ expect ( takeRandomFromArray ) . toHaveBeenCalledTimes ( 6 )
286+ } )
287+ } )
242288} )
243289
244290describe ( 'readFileSync' , ( ) => {
0 commit comments