test(cli): add mocked file content + refactor

This commit is contained in:
Remi
2020-10-23 10:52:12 +02:00
parent 162c3089bf
commit 61b4deec5c
3 changed files with 71 additions and 40 deletions
@@ -0,0 +1,32 @@
/*
* Copyright 2020 Spotify AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export const pluginsFileContent = `
export { plugin as WelcomePlugin } from '@backstage/plugin-welcome';
export { plugin as LighthousePlugin } from '@backstage/plugin-lighthouse';`;
export const codeownersFileContent = `
* @spotify/backstage-core
/docs/features/techdocs @spotify/techdocs-core
/plugins/cost-insights @spotify/silver-lining
`;
export const packageFileContent = {
name: 'example-app',
version: '0.1.1',
dependencies: {},
devDependencies: {},
scripts: {},
};
@@ -27,6 +27,11 @@ import {
removeSymLink,
removePluginFromCodeOwners,
} from './removePlugin';
import {
codeownersFileContent,
packageFileContent,
pluginsFileContent,
} from './file-mocks';
const BACKSTAGE = `@backstage`;
const testPluginName = 'yarn-test-package';
@@ -36,13 +41,7 @@ const tempDir = '/remove-plugin-test';
const removeEmptyLines = (file: string): string =>
file.split(/\r?\n/).filter(Boolean).join('\n');
const createTestPackageFile = async (
testFilePath: string,
packageFile: string,
) => {
// Copy contents of package file for test
const packageFileContent = JSON.parse(fse.readFileSync(packageFile, 'utf8'));
const createTestPackageFile = async (testFilePath: string) => {
const testFileContent = {
...packageFileContent,
dependencies: {
@@ -65,16 +64,13 @@ const createTestPackageFile = async (
};
const createTestPluginFile = async (
testFilePath: string,
pluginsFilePath: string,
testFileName: string,
pluginsFileName: string,
) => {
// Copy contents of package file for test
const pluginsFileContent = fse.readFileSync(pluginsFilePath);
mockFs({
[tempDir]: {
[testFilePath]: `${pluginsFileContent}\n`,
[pluginsFilePath]: `${pluginsFileContent}\n`,
[testFileName]: `${pluginsFileContent}\n`,
[pluginsFileName]: `${pluginsFileContent}\n`,
},
'/packages': {
app: {
@@ -89,8 +85,8 @@ const createTestPluginFile = async (
.split('-')
.map(name => capitalize(name))
.join('');
const exportStatement = `export { default as ${pluginNameCapitalized}} from @backstage/plugin-${testPluginName}`;
await addExportStatement(path.join(tempDir, testFilePath), exportStatement);
const exportStatement = `export { plugin as ${pluginNameCapitalized}} from ${testPluginPackage}`;
await addExportStatement(path.join(tempDir, testFileName), exportStatement);
};
const mkTestPluginDir = (testDirPath: string) => {
@@ -107,14 +103,13 @@ const mkTestPluginDir = (testDirPath: string) => {
};
describe('removePlugin', () => {
beforeEach(() => {
beforeAll(() => {
// Create temporary directory for all tests
const appPath = paths.resolveTargetRoot('packages', 'app');
mockFs({
[tempDir]: {
'package.json': mockFs.load(path.join(appPath, 'package.json')),
'package.json': packageFileContent,
src: {
'plugin.ts': mockFs.load(path.join(appPath, 'src', 'plugins.ts')),
'plugin.ts': pluginsFileContent,
},
},
});
@@ -125,13 +120,10 @@ describe('removePlugin', () => {
});
describe('Remove Plugin Dependencies', () => {
const githubDir = paths.resolveTargetRoot('.github');
it('removes plugin references from /packages/app/package.json', async () => {
// Set up test
const packageFilePath = path.join(tempDir, 'package.json');
const testFilePath = 'test.json';
createTestPackageFile(testFilePath, packageFilePath);
createTestPackageFile(testFilePath);
await removeReferencesFromAppPackage(
path.join(tempDir, testFilePath),
testPluginName,
@@ -140,32 +132,35 @@ describe('removePlugin', () => {
fse.readFileSync(path.join(tempDir, testFilePath), 'utf8'),
);
const packageFileContent = removeEmptyLines(
const mockedPackageFileContent = removeEmptyLines(
fse.readFileSync('/packages/app/package.json', 'utf8'),
);
expect(testFileContent).toBe(packageFileContent);
expect(testFileContent).toBe(mockedPackageFileContent);
});
it('removes plugin exports from /packages/app/src/packacge.json', async () => {
const testFilePath = 'test.ts';
const pluginsFilePaths = path.join(tempDir, 'src/plugin.ts');
createTestPluginFile(testFilePath, pluginsFilePaths);
it('removes plugin exports from /packages/app/src/package.json', async () => {
const testFileName = 'test.ts';
const pluginsFileName = 'plugin.ts';
createTestPluginFile(testFileName, pluginsFileName);
await removeReferencesFromPluginsFile(
path.join(tempDir, testFilePath),
path.join(tempDir, testFileName),
testPluginName,
);
const testFileContent = removeEmptyLines(
fse.readFileSync(path.join(tempDir, testFilePath), 'utf8'),
fse.readFileSync(path.join(tempDir, testFileName), 'utf8'),
);
const pluginsFileContent = removeEmptyLines(
fse.readFileSync('/packages/app/src/plugin.ts', 'utf8'),
const mockedPluginsFileContent = removeEmptyLines(
fse.readFileSync(
path.join('/packages', 'app', 'src', pluginsFileName),
'utf8',
),
);
expect(testFileContent).toBe(pluginsFileContent);
expect(testFileContent).toBe(mockedPluginsFileContent);
});
it('removes codeOwners references', async () => {
const testFileName = 'test';
const testFilePath = path.join(tempDir, testFileName);
const codeownersPath = path.join(githubDir, 'CODEOWNERS');
const mockedCodeownersPath = '/.github/CODEOWNERS';
mockFs({
@@ -173,7 +168,7 @@ describe('removePlugin', () => {
[testFileName]: '',
},
'/.github': {
CODEOWNERS: mockFs.load(codeownersPath),
CODEOWNERS: codeownersFileContent,
},
});
fse.copySync(mockedCodeownersPath, testFilePath);
+7 -3
View File
@@ -31,12 +31,16 @@ describe('templatingTask', () => {
// Temporary dest dir to write the template to
const destDir = 'test-dest';
// Files content
const testFileContent = 'testing';
const testVersionFileContent = 'version: {{version}}';
mockFs({
[tmplDir]: {
sub: {
'version.txt.hbs': 'version: {{version}}',
'version.txt.hbs': testVersionFileContent,
},
'test.txt': 'testing',
'test.txt': testFileContent,
},
[destDir]: {},
});
@@ -47,7 +51,7 @@ describe('templatingTask', () => {
await expect(
fs.readFile(resolvePath(destDir, 'test.txt'), 'utf8'),
).resolves.toBe('testing');
).resolves.toBe(testFileContent);
await expect(
fs.readFile(resolvePath(destDir, 'sub/version.txt'), 'utf8'),
).resolves.toBe('version: 0.0.0');