diff --git a/package-lock.json b/package-lock.json index 1e6eafd..20c43d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "jest": "^29.7.0", "lint-staged": "^14.0.1", "prettier": "^3.0.3", + "stream-mock": "^2.0.5", "ts-jest": "^29.1.1", "typescript": "^5.2.2" } @@ -6246,6 +6247,15 @@ "node": ">=8" } }, + "node_modules/stream-mock": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stream-mock/-/stream-mock-2.0.5.tgz", + "integrity": "sha512-dx9skT8QYjwLsal+MhGHr4UtgS49brw851C/oTixmhCi4Ip+/qnZmhV1qOcznYYAED6gYKmKea+jjza4/wjpSg==", + "dev": true, + "engines": { + "node": "8.* || >= 10.*" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", diff --git a/package.json b/package.json index 22e19f8..b3ef03d 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "jest": "^29.7.0", "lint-staged": "^14.0.1", "prettier": "^3.0.3", + "stream-mock": "^2.0.5", "ts-jest": "^29.1.1", "typescript": "^5.2.2" } diff --git a/src/tasks/create-express-task.ts b/src/tasks/create-express-task.ts index 3cdf081..f19d7d1 100644 --- a/src/tasks/create-express-task.ts +++ b/src/tasks/create-express-task.ts @@ -28,7 +28,7 @@ const copyAsync = promisify(ncp); * @param {string} projectDescription - The description of the xarvis project. * @returns {stream.Transform} A transform stream that replaces placeholders with provided values. */ -const transformTemplateWithConfig = (projectName: string, projectDescription: string): stream.Transform => { +export const transformTemplateWithConfig = (projectName: string, projectDescription: string): stream.Transform => { return new stream.Transform({ transform(chunk, _, callback) { let modifiedChunk = chunk.toString('utf8'); diff --git a/tests/tasks/create-express-task.test.ts b/tests/tasks/create-express-task.test.ts new file mode 100644 index 0000000..67e098a --- /dev/null +++ b/tests/tasks/create-express-task.test.ts @@ -0,0 +1,29 @@ +import { transformTemplateWithConfig } from '../../src/tasks/create-express-task'; +import { ObjectWritableMock } from 'stream-mock'; + +describe('CreateExpressTask', () => { + describe('transformTemplateWithConfig', () => { + it('should replace project name and description in the stream', (done) => { + const projectName = 'xarvis'; + const description = 'a CLI tool to generate production ready apps'; + + const input = 'Project name: {{project_name}}, and this is {{project_description}}'; + const expectedOutput = `Project name: ${projectName}, and this is ${description}`; + + const transformStream = transformTemplateWithConfig(projectName, description); + const writableStream = new ObjectWritableMock(); + + transformStream.write(input, 'utf-8', () => { + transformStream.end(); + }); + + transformStream.pipe(writableStream); + + writableStream.on('finish', () => { + const transformedData = writableStream.data.toString(); + expect(transformedData).toEqual(expectedOutput); + done(); + }); + }); + }); +});