UNPKG

@cuba-platform/front-generator

Version:
150 lines 6.47 kB
"use strict"; 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