From 92ee157875cd7f3292c24be6cf25cd83e74a861f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 28 Dec 2023 15:15:35 +0100 Subject: [PATCH 1/5] cli-node: refactor to remove mock-fs Signed-off-by: Patrik Oldsberg --- packages/cli-node/package.json | 4 ++-- .../cli-node/src/monorepo/isMonorepo.test.ts | 18 ++++++++++-------- yarn.lock | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/cli-node/package.json b/packages/cli-node/package.json index 6e5d5a90fd..86d62a6442 100644 --- a/packages/cli-node/package.json +++ b/packages/cli-node/package.json @@ -38,8 +38,8 @@ "zod": "^3.22.4" }, "devDependencies": { - "@backstage/cli": "workspace:^", - "mock-fs": "^5.2.0" + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^" }, "files": [ "dist" diff --git a/packages/cli-node/src/monorepo/isMonorepo.test.ts b/packages/cli-node/src/monorepo/isMonorepo.test.ts index eb466a6ac8..de0dae0893 100644 --- a/packages/cli-node/src/monorepo/isMonorepo.test.ts +++ b/packages/cli-node/src/monorepo/isMonorepo.test.ts @@ -15,15 +15,17 @@ */ import { isMonoRepo } from './isMonoRepo'; -import mockFs from 'mock-fs'; +import { createMockDirectory } from '@backstage/backend-test-utils'; + +const mockDir = createMockDirectory(); + +jest.mock('../paths', () => ({ + paths: { resolveTargetRoot: (...args: string[]) => mockDir.resolve(...args) }, +})); describe('isMonoRepo', () => { - afterEach(() => { - mockFs.restore(); - }); - it('should detect a monorepo', async () => { - mockFs({ + mockDir.setContent({ 'package.json': JSON.stringify({ name: 'foo', workspaces: { @@ -35,7 +37,7 @@ describe('isMonoRepo', () => { }); it('should detect a non- monorepo', async () => { - mockFs({ + mockDir.setContent({ 'package.json': JSON.stringify({ name: 'foo', }), @@ -44,7 +46,7 @@ describe('isMonoRepo', () => { }); it('should return false if package.json is missing', async () => { - mockFs({}); + mockDir.setContent({}); await expect(isMonoRepo()).resolves.toBe(false); }); }); diff --git a/yarn.lock b/yarn.lock index 0b1b81f289..ead69670d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3520,6 +3520,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/cli-node@workspace:packages/cli-node" dependencies: + "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/cli-common": "workspace:^" "@backstage/errors": "workspace:^" @@ -3527,7 +3528,6 @@ __metadata: "@manypkg/get-packages": ^1.1.3 "@yarnpkg/parsers": ^3.0.0-rc.4 fs-extra: 10.1.0 - mock-fs: ^5.2.0 semver: ^7.5.3 zod: ^3.22.4 languageName: unknown From e02efdf8e6088d713239b7c908ed58bc099fb156 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 28 Dec 2023 15:22:58 +0100 Subject: [PATCH 2/5] repo-tools: refactor to remove mock-fs Signed-off-by: Patrik Oldsberg --- packages/repo-tools/package.json | 5 +- .../commands/api-reports/api-reports.test.ts | 87 +++++++++---------- yarn.lock | 5 +- 3 files changed, 47 insertions(+), 50 deletions(-) diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 987bfb9260..0e9da31e27 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -63,13 +63,12 @@ "yaml-diff-patch": "^2.0.0" }, "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@backstage/types": "workspace:^", "@types/is-glob": "^4.0.2", - "@types/mock-fs": "^4.13.0", "@types/node": "^18.17.8", - "@types/prettier": "^2.0.0", - "mock-fs": "^5.2.0" + "@types/prettier": "^2.0.0" }, "peerDependencies": { "@microsoft/api-extractor-model": "*", diff --git a/packages/repo-tools/src/commands/api-reports/api-reports.test.ts b/packages/repo-tools/src/commands/api-reports/api-reports.test.ts index 0ffd8c5342..d1f7a3836c 100644 --- a/packages/repo-tools/src/commands/api-reports/api-reports.test.ts +++ b/packages/repo-tools/src/commands/api-reports/api-reports.test.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import mockFs from 'mock-fs'; -import { normalize, resolve as resolvePath } from 'path'; +import { createMockDirectory } from '@backstage/backend-test-utils'; +import { normalize } from 'path'; import * as pathsLib from '../../lib/paths'; import { @@ -47,38 +47,38 @@ jest.mock('./api-extractor', () => ({ const projectPaths = pathsLib.paths; +const mockDir = createMockDirectory(); + +jest.spyOn(projectPaths, 'targetRoot', 'get').mockReturnValue(mockDir.path); jest - .spyOn(projectPaths, 'targetRoot', 'get') - .mockReturnValue(normalize('/root')); -jest.spyOn(projectPaths, 'resolveTargetRoot').mockImplementation((...path) => { - return resolvePath(normalize('/root'), ...path); -}); + .spyOn(projectPaths, 'resolveTargetRoot') + .mockImplementation((...path) => mockDir.resolve(...path)); jest.spyOn(PackageGraph, 'listTargetPackages').mockResolvedValue([ { - dir: '/root/packages/package-a', + dir: normalize(mockDir.resolve('packages/package-a')), packageJson: { name: 'package-a', version: '0.0.0' }, }, { - dir: '/root/packages/package-b', + dir: normalize(mockDir.resolve('packages/package-b')), packageJson: { name: 'package-b', version: '0.0.0' }, }, { - dir: '/root/plugins/plugin-a', + dir: normalize(mockDir.resolve('plugins/plugin-a')), packageJson: { name: 'plugin-a', version: '0.0.0' }, }, { - dir: '/root/plugins/plugin-b', + dir: normalize(mockDir.resolve('plugins/plugin-b')), packageJson: { name: 'plugin-b', version: '0.0.0' }, }, { - dir: '/root/plugins/plugin-c', + dir: normalize(mockDir.resolve('plugins/plugin-c')), packageJson: { name: 'plugin-c', version: '0.0.0' }, }, ]); describe('buildApiReports', () => { beforeEach(() => { - mockFs({ + mockDir.setContent({ [projectPaths.targetRoot]: { 'package.json': JSON.stringify({ workspaces: { packages: ['packages/*', 'plugins/*'] }, @@ -109,7 +109,6 @@ describe('buildApiReports', () => { }); afterEach(() => { - mockFs.restore(); jest.clearAllMocks(); }); @@ -138,11 +137,11 @@ describe('buildApiReports', () => { normalize('plugins/plugin-b'), normalize('plugins/plugin-c'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); expect(runCliExtraction).toHaveBeenCalledWith({ packageDirs: [ @@ -171,11 +170,11 @@ describe('buildApiReports', () => { expect(runApiExtraction).toHaveBeenCalledWith({ packageDirs: [normalize('packages/package-a')], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); expect(runCliExtraction).toHaveBeenCalledWith({ packageDirs: [normalize('packages/package-a')], @@ -200,11 +199,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); expect(runCliExtraction).toHaveBeenCalledWith({ packageDirs: [ @@ -232,11 +231,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); expect(runCliExtraction).toHaveBeenCalledWith({ packageDirs: [ @@ -267,11 +266,11 @@ describe('buildApiReports', () => { normalize('packages/package-b'), normalize('plugins/plugin-a'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); expect(runCliExtraction).toHaveBeenCalledWith({ packageDirs: [ @@ -305,11 +304,11 @@ describe('buildApiReports', () => { normalize('plugins/plugin-b'), normalize('plugins/plugin-c'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); expect(runCliExtraction).toHaveBeenCalledWith({ packageDirs: [ @@ -338,11 +337,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: ['packages/package-a'], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); }); @@ -359,11 +358,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: ['packages/package-a', 'packages/package-b'], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); }); @@ -380,11 +379,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: ['packages/package-a', 'packages/package-b'], omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); }); }); @@ -402,11 +401,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: true, omitMessages: [], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); }); }); @@ -424,11 +423,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: ['ae-missing-release-tag'], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); }); @@ -445,11 +444,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: ['ae-missing-release-tag', 'ae-missing-annotations'], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); }); @@ -466,11 +465,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: ['ae-missing-release-tag', 'ae-missing-annotations'], isLocalBuild: true, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); }); }); @@ -488,11 +487,11 @@ describe('buildApiReports', () => { normalize('packages/package-a'), normalize('packages/package-b'), ], - tsconfigFilePath: resolvePath('/root/tsconfig.json'), + tsconfigFilePath: mockDir.resolve('tsconfig.json'), allowWarnings: [], omitMessages: [], isLocalBuild: false, - outputDir: resolvePath('/root/node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('node_modules/.cache/api-extractor'), }); expect(runCliExtraction).toHaveBeenCalledWith({ packageDirs: [ @@ -513,8 +512,8 @@ describe('buildApiReports', () => { await buildApiReports(paths, opts); expect(buildDocs).toHaveBeenCalledWith({ - inputDir: resolvePath('/root/node_modules/.cache/api-extractor'), - outputDir: resolvePath('/root/docs/reference'), + inputDir: mockDir.resolve('node_modules/.cache/api-extractor'), + outputDir: mockDir.resolve('docs/reference'), }); }); }); diff --git a/yarn.lock b/yarn.lock index ead69670d5..9e17153fd0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9589,6 +9589,7 @@ __metadata: "@apidevtools/swagger-parser": ^10.1.0 "@apisyouwonthate/style-guide": ^1.4.0 "@backstage/backend-common": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/cli-common": "workspace:^" @@ -9607,7 +9608,6 @@ __metadata: "@stoplight/spectral-runtime": ^1.1.2 "@stoplight/types": ^14.0.0 "@types/is-glob": ^4.0.2 - "@types/mock-fs": ^4.13.0 "@types/node": ^18.17.8 "@types/prettier": ^2.0.0 chalk: ^4.0.0 @@ -9619,7 +9619,6 @@ __metadata: js-yaml: ^4.1.0 lodash: ^4.17.21 minimatch: ^5.1.1 - mock-fs: ^5.2.0 p-limit: ^3.0.2 portfinder: ^1.0.32 ts-node: ^10.0.0 @@ -18320,7 +18319,7 @@ __metadata: languageName: node linkType: hard -"@types/mock-fs@npm:^4.10.0, @types/mock-fs@npm:^4.13.0": +"@types/mock-fs@npm:^4.10.0": version: 4.13.4 resolution: "@types/mock-fs@npm:4.13.4" dependencies: From 50c55ffd8af2497c5b54fea69282cc1f831083a6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 28 Dec 2023 15:55:53 +0100 Subject: [PATCH 3/5] scaffolder-backend-module-confluence-to-markdown: refactor to remove mock-fs Signed-off-by: Patrik Oldsberg --- .../package.json | 1 - .../confluenceToMarkdown.examples.test.ts | 40 ++++++-------- .../confluence/confluenceToMarkdown.test.ts | 53 ++++++++----------- yarn.lock | 1 - 4 files changed, 39 insertions(+), 56 deletions(-) diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index cdd39adf52..942bbb1593 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -44,7 +44,6 @@ "devDependencies": { "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "mock-fs": "^5.2.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.examples.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.examples.test.ts index e5aeadbf00..f3bf1fef35 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.examples.test.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.examples.test.ts @@ -19,28 +19,16 @@ import { getVoidLogger } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import mockFs from 'mock-fs'; -import os from 'os'; -import { readFile, writeFile, createWriteStream } from 'fs-extra'; +import { + createMockDirectory, + setupRequestMockHandlers, +} from '@backstage/backend-test-utils'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { examples } from './confluenceToMarkdown.examples'; import yaml from 'yaml'; import { ActionContext } from '@backstage/plugin-scaffolder-node'; -jest.mock('fs-extra', () => ({ - mkdirSync: jest.fn(), - readFile: jest.fn().mockResolvedValue('File contents'), - writeFile: jest.fn().mockImplementation(() => { - return Promise.resolve(); - }), - outputFile: jest.fn(), - openSync: jest.fn(), - createWriteStream: jest.fn().mockReturnValue(new PassThrough()), - ensureDir: jest.fn(), -})); - describe('confluence:transform:markdown examples', () => { const baseUrl = `https://confluence.example.com`; const worker = setupServer(); @@ -72,7 +60,8 @@ describe('confluence:transform:markdown examples', () => { const logger = getVoidLogger(); jest.spyOn(logger, 'info'); - const mockTmpDir = os.tmpdir(); + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); beforeEach(() => { reader = { @@ -84,17 +73,18 @@ describe('confluence:transform:markdown examples', () => { }; mockContext = { input: yaml.parse(examples[0].example).steps[0].input, - workspacePath: '/tmp', + workspacePath, logger, logStream: new PassThrough(), output: jest.fn(), - createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir), + createTemporaryDirectory: jest.fn(), }; - mockFs({ [`${mockTmpDir}/src/docs`]: {} }); + + mockDir.setContent({ 'workspace/mkdocs.yml': 'File contents' }); }); + afterEach(() => { jest.clearAllMocks(); - mockFs.restore(); }); it('should call confluence to markdown action successfully with results array', async () => { @@ -155,8 +145,10 @@ describe('confluence:transform:markdown examples', () => { `Fetching the mkdocs.yml catalog from https://github.com/organization-name/repo-name/blob/main/mkdocs.yml`, ); expect(logger.info).toHaveBeenCalledTimes(5); - expect(createWriteStream).toHaveBeenCalledTimes(1); - expect(readFile).toHaveBeenCalledTimes(1); - expect(writeFile).toHaveBeenCalledTimes(1); + + expect(mockDir.content({ path: 'workspace/docs' })).toEqual({ + img: { 'testing.pdf': Buffer.from('hello') }, + 'Page-Title.md': 'hello world', + }); }); }); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts index 4e4f3091f1..5ce8bb2697 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts @@ -19,26 +19,14 @@ import { getVoidLogger } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import mockFs from 'mock-fs'; -import os from 'os'; +import { + createMockDirectory, + setupRequestMockHandlers, +} from '@backstage/backend-test-utils'; import type { ActionContext } from '@backstage/plugin-scaffolder-node'; -import { readFile, writeFile, createWriteStream } from 'fs-extra'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; -jest.mock('fs-extra', () => ({ - mkdirSync: jest.fn(), - readFile: jest.fn().mockResolvedValue('File contents'), - writeFile: jest.fn().mockImplementation(() => { - return Promise.resolve(); - }), - outputFile: jest.fn(), - openSync: jest.fn(), - createWriteStream: jest.fn().mockReturnValue(new PassThrough()), - ensureDir: jest.fn(), -})); - describe('confluence:transform:markdown', () => { const baseUrl = `https://nodomain.confluence.com`; const worker = setupServer(); @@ -70,7 +58,8 @@ describe('confluence:transform:markdown', () => { const logger = getVoidLogger(); jest.spyOn(logger, 'info'); - const mockTmpDir = os.tmpdir(); + const mockDir = createMockDirectory(); + const workspacePath = mockDir.resolve('workspace'); beforeEach(() => { reader = { @@ -85,19 +74,21 @@ describe('confluence:transform:markdown', () => { confluenceUrls: [ 'https://nodomain.confluence.com/display/testing/mkdocs', ], - repoUrl: 'https://notreal.github.com/space/backstage/mkdocs.yml', + repoUrl: + 'https://notreal.github.com/space/backstage/blob/main/mkdocs.yml', }, - workspacePath: '/tmp', + workspacePath, logger, logStream: new PassThrough(), output: jest.fn(), - createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir), + createTemporaryDirectory: jest.fn(), }; - mockFs({ [`${mockTmpDir}/src/docs`]: {} }); + + mockDir.setContent({ 'workspace/mkdocs.yml': 'File contents' }); }); + afterEach(() => { jest.clearAllMocks(); - mockFs.restore(); }); it('should call confluence to markdown action successfully with results array', async () => { @@ -155,12 +146,14 @@ describe('confluence:transform:markdown', () => { await action.handler(mockContext); expect(logger.info).toHaveBeenCalledWith( - `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`, + `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/blob/main/mkdocs.yml`, ); expect(logger.info).toHaveBeenCalledTimes(5); - expect(createWriteStream).toHaveBeenCalledTimes(1); - expect(readFile).toHaveBeenCalledTimes(1); - expect(writeFile).toHaveBeenCalledTimes(1); + + expect(mockDir.content({ path: 'workspace/docs' })).toEqual({ + img: { 'testing.pdf': Buffer.from('hello') }, + 'mkdocs.md': 'hello world', + }); }); it('should call confluence to markdown action successfully with empty results array', async () => { @@ -202,13 +195,13 @@ describe('confluence:transform:markdown', () => { await action.handler(mockContext); expect(logger.info).toHaveBeenCalledWith( - `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`, + `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/blob/main/mkdocs.yml`, ); expect(logger.info).toHaveBeenCalledTimes(5); - expect(createWriteStream).not.toHaveBeenCalled(); - expect(readFile).toHaveBeenCalledTimes(1); - expect(writeFile).toHaveBeenCalledTimes(1); + expect(mockDir.content({ path: 'workspace/docs' })).toEqual({ + 'mkdocs.md': 'hello world', + }); }); it('should fail on the first fetch call with response.ok set to false', async () => { diff --git a/yarn.lock b/yarn.lock index 9e17153fd0..038822252c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8170,7 +8170,6 @@ __metadata: "@backstage/plugin-scaffolder-node": "workspace:^" fs-extra: 10.1.0 git-url-parse: ^13.1.0 - mock-fs: ^5.2.0 msw: ^1.0.0 node-fetch: ^2.6.7 node-html-markdown: ^1.3.0 From 85c521b82b758528b2237eefc9d4a5b17e0b00bd Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 28 Dec 2023 15:57:04 +0100 Subject: [PATCH 4/5] remove last mock-fs dependencies Signed-off-by: Patrik Oldsberg --- .../mock-fs-npm-5.2.0-5103a7b507.patch | 13 ---------- package.json | 1 - packages/config-loader/package.json | 1 - packages/create-app/package.json | 1 - yarn.lock | 25 ------------------- 5 files changed, 41 deletions(-) delete mode 100644 .yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch diff --git a/.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch b/.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch deleted file mode 100644 index ed5555203b..0000000000 --- a/.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/lib/binding.js b/lib/binding.js -index a4a3e6cdc197bd0f12fe2d060640e91ac58ab457..ab04ce3115fe93073a3e25008730272b6fa21bd7 100644 ---- a/lib/binding.js -+++ b/lib/binding.js -@@ -165,6 +165,8 @@ function Binding(system) { - this.trackDescriptor(stderr); - } - -+Binding.prototype.readFileSync = path => require('fs').readFileSync(path).toString('utf8'); -+ - /** - * Get the file system underlying this binding. - * @return {FileSystem} The underlying file system. diff --git a/package.json b/package.json index 8329362a87..b4a47e779f 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,6 @@ "@types/react": "^18", "@types/react-dom": "^18", "jest-haste-map@^29.7.0": "patch:jest-haste-map@npm%3A29.7.0#./.yarn/patches/jest-haste-map-npm-29.7.0-e3be419eff.patch", - "mock-fs@^5.2.0": "patch:mock-fs@npm%3A5.2.0#./.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch", "@material-ui/pickers@^3.3.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch", "@material-ui/pickers@^3.2.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch" }, diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 4f0c488c9f..abacf78ac4 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -54,7 +54,6 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/json-schema-merge-allof": "^0.6.0", - "@types/mock-fs": "^4.10.0", "msw": "^1.0.0", "zen-observable": "^0.10.0" }, diff --git a/packages/create-app/package.json b/packages/create-app/package.json index e0a379afcf..c194724343 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -49,7 +49,6 @@ "@types/inquirer": "^8.1.3", "@types/node": "^18.17.8", "@types/recursive-readdir": "^2.2.0", - "mock-fs": "^5.2.0", "nodemon": "^3.0.1", "ts-node": "^10.0.0" }, diff --git a/yarn.lock b/yarn.lock index 038822252c..ec53ffdb99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3725,7 +3725,6 @@ __metadata: "@backstage/types": "workspace:^" "@types/json-schema": ^7.0.6 "@types/json-schema-merge-allof": ^0.6.0 - "@types/mock-fs": ^4.10.0 ajv: ^8.10.0 chokidar: ^3.5.2 fs-extra: 10.1.0 @@ -4031,7 +4030,6 @@ __metadata: fs-extra: 10.1.0 handlebars: ^4.7.3 inquirer: ^8.2.0 - mock-fs: ^5.2.0 nodemon: ^3.0.1 ora: ^5.3.0 recursive-readdir: ^2.2.2 @@ -18318,15 +18316,6 @@ __metadata: languageName: node linkType: hard -"@types/mock-fs@npm:^4.10.0": - version: 4.13.4 - resolution: "@types/mock-fs@npm:4.13.4" - dependencies: - "@types/node": "*" - checksum: 9f886d67186da2e5cdabc32835c49ede9749146768e22c7f0f2548587e5201235d3726adef917fa6efbb9b73ad51278858a5d34e7cdc0a4b413c8396b37c350d - languageName: node - linkType: hard - "@types/morgan@npm:^1.9.0": version: 1.9.9 resolution: "@types/morgan@npm:1.9.9" @@ -34353,20 +34342,6 @@ __metadata: languageName: node linkType: hard -"mock-fs@npm:5.2.0": - version: 5.2.0 - resolution: "mock-fs@npm:5.2.0" - checksum: c25835247bd26fa4e0189addd61f98973f61a72741e4d2a5694b143a2069b84978443a7ac0fdb1a71aead99273ec22ff4e9c968de11bbd076db020264c5b8312 - languageName: node - linkType: hard - -"mock-fs@patch:mock-fs@npm%3A5.2.0#./.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch::locator=root%40workspace%3A.": - version: 5.2.0 - resolution: "mock-fs@patch:mock-fs@npm%3A5.2.0#./.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch::version=5.2.0&hash=920f99&locator=root%40workspace%3A." - checksum: 84e306d7a798735ed8ee110b60ed8fc0b5db451df3a990e2a01432fac99decd15e5534c92d87f8067425329dbd9bf5c12e2673d3d770fb40f2936810e02bb07a - languageName: node - linkType: hard - "mock-socket@npm:^9.3.0": version: 9.3.1 resolution: "mock-socket@npm:9.3.1" From 7acbb5ab739b588be65e280bdb53f690c7e8939c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 28 Dec 2023 15:58:42 +0100 Subject: [PATCH 5/5] changesets: last mock-fs removals Signed-off-by: Patrik Oldsberg --- .changeset/many-peaches-dress.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .changeset/many-peaches-dress.md diff --git a/.changeset/many-peaches-dress.md b/.changeset/many-peaches-dress.md new file mode 100644 index 0000000000..42a4d86b68 --- /dev/null +++ b/.changeset/many-peaches-dress.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch +'@backstage/config-loader': patch +'@backstage/create-app': patch +'@backstage/repo-tools': patch +'@backstage/cli-node': patch +--- + +Removed `mock-fs` dev dependency.