liferay-theme-tasks
Version:
A set of tasks for building and deploying Liferay Portal themes.
167 lines (119 loc) • 3.71 kB
JavaScript
/**
* SPDX-FileCopyrightText: © 2017 Liferay, Inc. <https://liferay.com>
* SPDX-License-Identifier: MIT
*/
const inquirer = require('inquirer');
const _ = require('lodash');
const sinon = require('sinon');
const {
PrototypeMethodSpy,
assertBoundFunction,
cleanTempTheme,
setupTempTheme,
} = require('../../../lib/test/util');
const themeFinder = require('../../lib/theme_finder');
const ModulePrompt = require('../module_prompt');
const NPMModulePrompt = require('../npm_module_prompt');
const prototypeMethodSpy = new PrototypeMethodSpy();
let prototype;
let tempTheme;
beforeEach(() => {
tempTheme = setupTempTheme({
namespace: 'npm_module_prompt',
});
prototype = _.create(NPMModulePrompt.prototype);
});
afterEach(() => {
prototypeMethodSpy.flush();
cleanTempTheme(tempTheme);
});
it('constructor should pass arguments to init', () => {
const initSpy = prototypeMethodSpy.add(NPMModulePrompt.prototype, 'init');
new NPMModulePrompt({}, _.noop);
expect(initSpy.calledWith({}, _.noop)).toBe(true);
});
it('init should assign callback as done property and invoke prompting', () => {
prototype._promptSearchTerms = sinon.spy();
prototype.init(
{
selectedModules: ['module'],
themelet: true,
},
_.noop
);
expect(prototype._promptSearchTerms.calledOnce).toBe(true);
expect(prototype.selectedModules).toEqual(['module']);
expect(prototype.done).toBe(_.noop);
expect(prototype.themelet).toBe(true);
});
it('_afterPrompt should pass answers to done property', () => {
prototype.done = sinon.spy();
const answers = {
module: 'some-module',
};
prototype._afterPrompt(answers);
expect(prototype.done.calledWith(answers)).toBe(true);
});
it('_afterPromptSearchTerms should invoke _getNPMModules with searchTerms', () => {
prototype._getNPMModules = sinon.spy();
const answers = {
searchTerms: 'some keyword',
};
const cbSpy = sinon.spy();
prototype._afterPromptSearchTerms(answers, cbSpy);
prototype._getNPMModules.calledWith(answers.searchTerms, cbSpy);
});
it('_afterPromptSearchTerms should either re-prompt search terms or invoke module prompt', () => {
prototype._getNPMModules = sinon.spy();
prototype._promptSearchTerms = sinon.spy();
const modulePromptInitSpy = prototypeMethodSpy.add(
ModulePrompt.prototype,
'init'
);
const answers = {
searchTerms: 'some keyword',
};
prototype._afterPromptSearchTerms(answers);
const args = prototype._getNPMModules.getCall(0).args;
expect(args[0]).toBe('some keyword');
const callback = args[1];
callback();
expect(prototype._promptSearchTerms.calledOnce).toBe(true);
const modules = {
'some-module': {},
};
callback(modules);
expect(prototype.modules).toEqual(modules);
expect(modulePromptInitSpy.calledOnce).toBe(true);
});
it('_getNPMModules should invoke themeFinder.getLiferayThemeModules', () => {
const getLiferayThemeModulesSpy = prototypeMethodSpy.add(
themeFinder,
'getLiferayThemeModules'
);
prototype.themelet = 'themelet';
prototype._getNPMModules('some keyword', _.noop);
expect(
getLiferayThemeModulesSpy.calledWith(
{
globalModules: false,
searchTerms: 'some keyword',
themelet: 'themelet',
},
_.noop
)
).toBe(true);
});
it('_promptSearchTerms should prompt for search terms', () => {
const promptSpy = prototypeMethodSpy.add(inquirer, 'prompt');
const assertAfterPromptSearchTerms = assertBoundFunction(
prototype,
'_afterPromptSearchTerms'
);
prototype._promptSearchTerms();
const args = promptSpy.getCall(0).args;
const question = args[0][0];
expect(/themes/.test(question.message)).toBe(true);
expect(question.name).toBe('searchTerms');
assertAfterPromptSearchTerms(args[1]);
});