@cuba-platform/front-generator
Version:
CUBA Platform front-end clients generator
150 lines • 6.47 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const base_generator_1 = require("../../common/base-generator");
const cli_options_1 = require("../../common/cli-options");
const studio_integration_1 = require("../../common/studio/studio-integration");
const chai_1 = require("chai");
const YeomanEnvironment = require("yeoman-environment");
const generatorParams = [
{
caption: "Entity",
code: "entity",
propertyType: "ENTITY" /* ENTITY */,
required: true
},
{
caption: "Component class name",
code: "componentName",
propertyType: "POLYMER_COMPONENT_NAME" /* POLYMER_COMPONENT_NAME */,
defaultValue: "Cards",
required: true
},
{
caption: "Entity view",
code: "entityView",
propertyType: "VIEW" /* VIEW */,
relatedProperty: "entity",
required: true
}
];
const model = require.resolve('../fixtures/mpg-projectModel.json');
const answers = require('../fixtures/answers.json');
const optsConfig = Object.assign(Object.assign({}, cli_options_1.commonGenerationOptionsConfig), { answers: {
alias: 'a',
description: 'fulfilled params for generator to avoid interactive input in serialized JSON string',
type: String
} });
class TestGenerator extends base_generator_1.BaseGenerator {
constructor(args, options) {
super(args, options);
}
_promptOrParse() {
const _super = Object.create(null, {
_promptOrParse: { get: () => super._promptOrParse }
});
return __awaiter(this, void 0, void 0, function* () {
return yield _super._promptOrParse.call(this);
});
}
_getAvailableOptions() {
return optsConfig;
}
_getParams() {
return generatorParams;
}
_obtainAnswers() {
const _super = Object.create(null, {
_obtainAnswers: { get: () => super._obtainAnswers }
});
return __awaiter(this, void 0, void 0, function* () {
yield _super._obtainAnswers.call(this);
});
}
_obtainCubaProjectModel() {
const _super = Object.create(null, {
_obtainCubaProjectModel: { get: () => super._obtainCubaProjectModel }
});
return __awaiter(this, void 0, void 0, function* () {
return _super._obtainCubaProjectModel.call(this);
});
}
prompt(questions) {
// mock prompt answers
return Promise.resolve({ projectInfo: 'projectInfo' });
}
writing() {
}
}
const opts = {
dest: '.',
env: new YeomanEnvironment,
resolved: '.',
model,
};
describe('BaseGenerator', () => {
it('should prompt or parse', () => __awaiter(void 0, void 0, void 0, function* () {
const gen = new TestGenerator([], Object.assign(Object.assign({}, opts), { answers: Buffer.from(JSON.stringify(answers)).toString('base64') }));
(0, chai_1.expect)(gen.answers).is.undefined;
yield gen._promptOrParse();
(0, chai_1.expect)(gen.answers).not.empty;
}));
it('should obtain answers', () => __awaiter(void 0, void 0, void 0, function* () {
const gen = new TestGenerator([], opts);
(0, chai_1.expect)(gen.answers).is.undefined;
yield gen._obtainAnswers();
(0, chai_1.expect)(gen.answers.projectInfo).eq('projectInfo');
}));
it('should fail on obtain project model if no cuba connection', () => __awaiter(void 0, void 0, void 0, function* () {
const openedProjects = yield (0, studio_integration_1.getOpenedCubaProjects)();
if (openedProjects !== null) {
return;
}
const gen = new TestGenerator([], Object.assign(Object.assign({}, opts), { model: undefined }));
try {
yield gen._obtainCubaProjectModel();
}
catch (e) {
(0, chai_1.expect)(e.message).eq(studio_integration_1.ERR_STUDIO_NOT_CONNECTED);
}
}));
it('should refine answers', () => {
const projectModel = {
entities: [],
enums: [],
project: { locales: [], modulePrefix: "", name: "", namespace: "" },
restQueries: [],
restServices: [],
views: []
};
let refined = (0, base_generator_1.refineAnswers)(projectModel, [], { intAnswer: 1.1 });
(0, chai_1.expect)(refined).eql({ intAnswer: 1.1 });
const generatorParams = [
{
caption: "Answer type integer",
code: "intAnswer",
propertyType: "INTEGER" /* INTEGER */,
required: true
},
];
refined = (0, base_generator_1.refineAnswers)(projectModel, generatorParams, { intAnswer: 1 });
(0, chai_1.expect)(refined).eql({ intAnswer: 1 });
refined = (0, base_generator_1.refineAnswers)(projectModel, generatorParams, { intAnswer: 0 });
(0, chai_1.expect)(refined).eql({ intAnswer: 0 });
(0, chai_1.expect)(() => (0, base_generator_1.refineAnswers)(projectModel, generatorParams, { intAnswer: 1.1 }))
.to.throw(`Question with code 'intAnswer' has INTEGER type and can't contain '1.1' as answer`);
(0, chai_1.expect)(() => (0, base_generator_1.refineAnswers)(projectModel, generatorParams, { intAnswer: 'not-an-int' }))
.to.throw(`Question with code 'intAnswer' has INTEGER type and can't contain 'not-an-int' as answer`);
(0, chai_1.expect)(() => (0, base_generator_1.refineAnswers)(projectModel, generatorParams, { intAnswer: undefined }))
.to.throw(`Question with code 'intAnswer' has INTEGER type and can't contain 'undefined' as answer`);
});
});
//# sourceMappingURL=base-generator.test.js.map