diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts index 06def076ea..f52cca504b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts @@ -156,6 +156,77 @@ describe('fetch:template', () => { ); }); + describe('with optional directories / files', () => { + let context: ActionContext; + + beforeEach(async () => { + context = mockContext({ + values: { + showDummyFile: false, + skipRootDirectory: true, + skipSubdirectory: true, + skipMultiplesDirectories: true + }, + }); + + mockFetchContents.mockImplementation(({ outputPath }) => { + mockFs({ + ...realFiles, + [outputPath]: { + '{% if values.showDummyFile %}dummy-file.txt{% else %}{% endif %}': + 'dummy file', + '${{ "dummy-file2.txt" if values.showDummyFile else "" }}': + 'some dummy file', + '${{ "dummy-dir" if not values.skipRootDirectory else "" }}': { + 'file.txt': + 'file inside optional directory', + subdir: { + '${{ "dummy-subdir" if not values.skipSubdirectory else "" }}': + 'file inside optional subdirectory' + } + }, + subdir2: { + '${{ "dummy-subdir" if not values.skipMultiplesDirectories else "" }}': { + '${{ "dummy-subdir" if not values.skipMultiplesDirectories else "" }}': { + 'multipleDirectorySkippedFile.txt': + 'file inside multiple optional subdirectories' + } + } + } + }, + }); + + return Promise.resolve(); + }); + + await action.handler(context); + }); + + it('skips empty filename', async () => { + await expect( + fs.pathExists(`${workspacePath}/target/dummy-file.txt`), + ).resolves.toEqual(false); + }); + + it('skips empty filename syntax #2', async () => { + await expect( + fs.pathExists(`${workspacePath}/target/dummy-file2.txt`), + ).resolves.toEqual(false); + }); + + it('skips empty directory', async () => { + await expect( + fs.pathExists(`${workspacePath}/target/dummy-dir/dummy-file3.txt`), + ).resolves.toEqual(false); + }); + + it('skips content of empty directory', async () => { + await expect( + fs.pathExists(`${workspacePath}/target/subdir2/multipleDirectorySkippedFile.txt`), + ).resolves.toEqual(false); + }); + }); + describe('with valid input', () => { let context: ActionContext; @@ -189,11 +260,6 @@ describe('fetch:template', () => { symlink: mockFs.symlink({ path: 'a-binary-file.png', }), - - '{% if values.showDummyFile %}dummy-file.txt{% else %}{% endif %}': - 'dummy file', - '${{ "dummy-file2.txt" if values.showDummyFile else "" }}': - 'some dummy file', }, }); @@ -212,18 +278,6 @@ describe('fetch:template', () => { ); }); - it('skips empty filename', async () => { - await expect( - fs.pathExists(`${workspacePath}/target/dummy-file.txt`), - ).resolves.toEqual(false); - }); - - it('skips empty filename syntax #2', async () => { - await expect( - fs.pathExists(`${workspacePath}/target/dummy-file2.txt`), - ).resolves.toEqual(false); - }); - it('copies files with no templating in names or content successfully', async () => { await expect( fs.readFile(`${workspacePath}/target/static.txt`, 'utf-8'),