cli/commands/create-plugin: update tests

This commit is contained in:
Patrik Oldsberg
2020-04-01 11:51:28 +02:00
parent d21d38e947
commit e96e95df66
2 changed files with 71 additions and 78 deletions
@@ -14,115 +14,55 @@
* limitations under the License.
*/
import fs from 'fs';
import fs from 'fs-extra';
import path from 'path';
import os from 'os';
import del from 'del';
import {
createFileFromTemplate,
createFromTemplateDir,
createTemporaryPluginFolder,
movePlugin,
} from './createPlugin';
import { createTemporaryPluginFolder, movePlugin } from './createPlugin';
describe('createPlugin', () => {
describe('createPluginFolder', () => {
it('should create a temporary plugin directory in the correct place', () => {
it('should create a temporary plugin directory in the correct place', async () => {
const id = 'testPlugin';
const tempDir = path.join(os.tmpdir(), id);
try {
createTemporaryPluginFolder(tempDir);
expect(fs.existsSync(tempDir)).toBe(true);
await createTemporaryPluginFolder(tempDir);
await expect(fs.pathExists(tempDir)).resolves.toBe(true);
expect(tempDir).toMatch(id);
} finally {
del.sync(tempDir, { force: true });
await del(tempDir, { force: true });
}
});
it('should not create a temporary plugin directory if it already exists', () => {
it('should not create a temporary plugin directory if it already exists', async () => {
const id = 'testPlugin';
const tempDir = path.join(os.tmpdir(), id);
try {
createTemporaryPluginFolder(tempDir);
expect(fs.existsSync(tempDir)).toBe(true);
expect(() => createTemporaryPluginFolder(tempDir)).toThrowError(
await createTemporaryPluginFolder(tempDir);
await expect(fs.pathExists(tempDir)).resolves.toBe(true);
await expect(createTemporaryPluginFolder(tempDir)).rejects.toThrow(
/Failed to create temporary plugin directory/,
);
} finally {
del.sync(tempDir, { force: true });
}
});
});
describe('createFileFromTemplate', () => {
it('should generate a valid output with inserted values', () => {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'test-'));
try {
const sourceData =
'{"name": "@backstage/{{id}}", "version": "{{version}}"}';
const targetData = '{"name": "@backstage/foo", "version": "0.0.0"}';
const sourcePath = path.join(tempDir, 'in.hbs');
const targetPath = path.join(tempDir, 'out.json');
fs.writeFileSync(sourcePath, sourceData);
createFileFromTemplate(sourcePath, targetPath, { id: 'foo' }, '0.0.0');
expect(fs.existsSync(targetPath)).toBe(true);
expect(fs.readFileSync(targetPath).toString()).toBe(targetData);
} finally {
del.sync(tempDir, { force: true });
}
});
});
describe('createFromTemplateDir', () => {
it('should create sub-directories and files', async () => {
const templateRootDir = fs.mkdtempSync(path.join(os.tmpdir(), 'test-'));
const templateSubDir = fs.mkdtempSync(path.join(templateRootDir, 'sub-'));
fs.writeFileSync(path.join(templateSubDir, 'test.txt'), 'testing');
const destinationRootDir = fs.mkdtempSync(
path.join(os.tmpdir(), 'test-'),
);
const subDir = path.join(
destinationRootDir,
path.basename(templateSubDir),
);
const testFile = path.join(
destinationRootDir,
path.basename(templateSubDir),
'test.txt',
);
try {
await createFromTemplateDir(
templateRootDir,
destinationRootDir,
{},
'0.0.0',
);
expect(fs.existsSync(subDir)).toBe(true);
expect(fs.existsSync(testFile)).toBe(true);
} finally {
await del(templateRootDir, { force: true });
await del(destinationRootDir, { force: true });
await del(tempDir, { force: true });
}
});
});
describe('movePlugin', () => {
it('should move the temporary plugin directory to its final place', () => {
it('should move the temporary plugin directory to its final place', async () => {
const id = 'testPlugin';
const tempDir = path.join(os.tmpdir(), id);
const rootDir = fs.mkdtempSync(path.join(os.tmpdir(), 'test-'));
const rootDir = await fs.mkdtemp(path.join(os.tmpdir(), 'test-'));
const pluginDir = path.join(rootDir, 'plugins', id);
try {
createTemporaryPluginFolder(tempDir);
movePlugin(tempDir, pluginDir, id);
expect(fs.existsSync(pluginDir)).toBe(true);
await createTemporaryPluginFolder(tempDir);
await movePlugin(tempDir, pluginDir, id);
await expect(fs.pathExists(pluginDir)).resolves.toBe(true);
expect(pluginDir).toMatch(`/plugins\/${id}`);
} finally {
del.sync(tempDir, { force: true });
del.sync(rootDir, { force: true });
await del(tempDir, { force: true });
await del(rootDir, { force: true });
}
});
});
+53
View File
@@ -0,0 +1,53 @@
/*
* 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.
*/
import fs from 'fs-extra';
import { resolve as resolvePath } from 'path';
import os from 'os';
import del from 'del';
import { templatingTask } from './tasks';
describe('templatingTask', () => {
it('should template a directory with mix of regular files and templates', async () => {
// Set up a testing template directory
const tmplDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'test-'));
await fs.ensureDir(resolvePath(tmplDir, 'sub'));
await fs.writeFile(resolvePath(tmplDir, 'test.txt'), 'testing');
await fs.writeFile(
resolvePath(tmplDir, 'sub/version.txt.hbs'),
'version: {{version}}',
);
// Set up a temporary dest dir to write the template to
const destDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'test-'));
try {
await templatingTask(tmplDir, destDir, {
version: '0.0.0',
});
await expect(
fs.readFile(resolvePath(destDir, 'test.txt'), 'utf8'),
).resolves.toBe('testing');
await expect(
fs.readFile(resolvePath(destDir, 'sub/version.txt'), 'utf8'),
).resolves.toBe('version: 0.0.0');
} finally {
await del(tmplDir, { force: true });
await del(destDir, { force: true });
}
});
});