@asyncapi/generator
Version:
The AsyncAPI generator. It can generate documentation, code, anything!
130 lines (115 loc) • 5.02 kB
JavaScript
/* eslint-disable sonarjs/no-duplicate-string */
const path = require('path');
const Generator = require('../lib/generator');
const log = require('loglevel');
const utils = jest.requireActual('../lib/utils');
const logMessage = require('./../lib/logMessages.js');
describe('Utils', () => {
describe('#getTemplateDetails', () => {
let resolvePkg, resolveFrom;
const templateNpmName = 'nameOfTestTemplate';
beforeEach(() => {
resolvePkg = require('resolve-pkg');
resolveFrom = require('resolve-from');
jest.mock(path.resolve('./testTemplate', 'package.json'), () => ({ name: 'nameOfTestTemplate' }), { virtual: true });
jest.mock(path.resolve(Generator.DEFAULT_TEMPLATES_DIR, templateNpmName, 'package.json'), () => ({ name: 'nameOfTestTemplate' }), { virtual: true });
});
it('works with a file system path', () => {
log.debug = jest.fn();
utils.isFileSystemPath = jest.fn(() => true);
const templatePath = './testTemplate';
const result = utils.getTemplateDetails(templatePath, 'package.json');
expect(log.debug).toHaveBeenCalledWith(logMessage.NODE_MODULES_INSTALL);
expect(result).toStrictEqual({
name: templateNpmName,
pkgPath: path.resolve('./testTemplate')
});
});
it('works with an npm package', () => {
log.debug = jest.fn();
utils.isFileSystemPath = jest.fn(() => false);
const packagePath = path.join(Generator.DEFAULT_TEMPLATES_DIR, templateNpmName);
resolvePkg.__resolvePkgValue = packagePath;
const result = utils.getTemplateDetails(templateNpmName, 'package.json');
expect(log.debug).not.toHaveBeenCalledWith(logMessage.NODE_MODULES_INSTALL);
expect(log.debug).not.toHaveBeenCalledWith(logMessage.templateNotFound(templateNpmName));
expect(result).toStrictEqual({
name: templateNpmName,
pkgPath: packagePath
});
});
it('works with global npm package', () => {
log.debug = jest.fn();
utils.isFileSystemPath = jest.fn(() => false);
resolvePkg.__resolvePkgValue = undefined;
resolveFrom.__resolveFromValue = path.join(Generator.DEFAULT_TEMPLATES_DIR, templateNpmName, 'package.json');
utils.getTemplateDetails(templateNpmName, 'package.json');
expect(log.debug).not.toHaveBeenCalledWith(logMessage.NODE_MODULES_INSTALL);
expect(log.debug).toHaveBeenCalledWith(logMessage.templateNotFound(templateNpmName));
});
it('doesnt work with a url', async () => {
resolvePkg.__resolvePkgValue = undefined;
resolveFrom.__resolveFromValue = undefined;
const result = utils.getTemplateDetails(templateNpmName, 'package.json');
expect(result).toStrictEqual(undefined);
});
});
describe('#exists', () => {
it('should return true if file exist', async () => {
const exists = await utils.exists(`${process.cwd()}/package.json`);
expect(exists).toBeTruthy();
});
it('should return false if file does not exist', async () => {
const exists = await utils.exists('./invalid-file');
expect(exists).toBeFalsy();
});
});
describe('#isJsFile',() => {
it('should return true if file extension is .js', () => {
const isJsFile = utils.isJsFile('./valid-file.js');
expect(isJsFile).toBeTruthy();
});
it('should return true if file extension is .jsx', () => {
const isJsFile = utils.isJsFile('./valid-file.jsx');
expect(isJsFile).toBeTruthy();
});
it('should return true if file extension is .cjs', () => {
const isJsFile = utils.isJsFile('./valid-file.cjs');
expect(isJsFile).toBeTruthy();
});
it('should return false if it is not a JS file', () => {
const isJsFile = utils.isJsFile('./invalid-file.txt');
expect(isJsFile).toBeFalsy();
});
it('should return false if it is not a JS file', () => {
const isJsFile = utils.isJsFile('./invalid-file');
expect(isJsFile).toBeFalsy();
});
});
describe('#isReactTemplate', () => {
it('should return true if it is a react template', () => {
const templateConfig = {
renderer: 'react'
};
const isReactTemplate = utils.isReactTemplate(templateConfig);
expect(isReactTemplate).toBeTruthy();
});
it('should return false if it is not a react template', () => {
const templateConfig = {
renderer: 'nunjucks'
};
const isReactTemplate = utils.isReactTemplate(templateConfig);
expect(isReactTemplate).toBeFalsy();
});
it('should return false if template config is not specified', () => {
const templateConfig = {};
const isReactTemplate = utils.isReactTemplate(templateConfig);
expect(isReactTemplate).toBeFalsy();
});
it('should return false if template config is undefined', () => {
const templateConfig = undefined;
const isReactTemplate = utils.isReactTemplate(templateConfig);
expect(isReactTemplate).toBeFalsy();
});
});
});