Merge pull request #22043 from backstage/rugvip/no-mock-fs
remove remaining usages of mock-fs
This commit is contained in:
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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": "*",
|
||||
|
||||
@@ -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'),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
"devDependencies": {
|
||||
"@backstage/backend-test-utils": "workspace:^",
|
||||
"@backstage/cli": "workspace:^",
|
||||
"mock-fs": "^5.2.0",
|
||||
"msw": "^1.0.0"
|
||||
},
|
||||
"files": [
|
||||
|
||||
+16
-24
@@ -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',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+23
-30
@@ -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 () => {
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -4029,7 +4028,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
|
||||
@@ -8168,7 +8166,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
|
||||
@@ -9587,6 +9584,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:^"
|
||||
@@ -9605,7 +9603,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
|
||||
@@ -9617,7 +9614,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
|
||||
@@ -18318,15 +18314,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/mock-fs@npm:^4.10.0, @types/mock-fs@npm:^4.13.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 +34340,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"
|
||||
|
||||
Reference in New Issue
Block a user