@cuba-platform/front-generator
Version:
CUBA Platform front-end clients generator
160 lines (153 loc) • 9.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ts_helpers_1 = require("../../../../common/ts-helpers");
const test_commons_1 = require("../../../test-commons");
const queries_generation_1 = require("../../../../generators/sdk/services/queries-generation");
const services_generation_1 = require("../../../../generators/sdk/services/services-generation");
const ts = require("typescript");
const queriesModelCar = require('../../../fixtures/query-model-car.json');
const queriesModelFull = require('../../../fixtures/query-model-full.json');
const queriesModelOverloads = require('../../../fixtures/query-model-overloads.json');
describe('generate TS REST query', () => {
it('should generate all queries from model', function () {
const ctx = (0, test_commons_1.modelCtx)();
ctx.entitiesMap.set('com.company.mpg.entity.FavoriteCar', (0, test_commons_1.createTestProjectEntityInfo)('com.company.mpg.entity.FavoriteCar'));
const content = (0, queries_generation_1.generateQueries)(queriesModelFull, ctx);
const expected = '' +
`import { CubaApp, FetchOptions, SerializedEntity, EntitiesWithCount } from "@cuba-platform/rest";
import { Car } from "./entities/mpg$Car";
import { FavoriteCar } from "./entities/mpg$FavoriteCar";
export type queries_Car_ecoCars_params = {
ecoRank: string;
};
export type queries_Car_carsByType_params = {
carType: string;
};
export type queries_FavoriteCar_allCars_params = {
car: Car;
};
export var restQueries = {
Car: {
allCars: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (): Promise<SerializedEntity<Car>[]> => {
return cubaApp.query<Car>("mpg$Car", "allCars", {}, fetchOpts);
},
allCarsCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (): Promise<Number> => {
return cubaApp.queryCount("mpg$Car", "allCars", {}, fetchOpts);
},
allCarsWithCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (): Promise<EntitiesWithCount<Car>> => {
return cubaApp.queryWithCount<Car>("mpg$Car", "allCars", {}, fetchOpts);
},
ecoCars: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_ecoCars_params): Promise<SerializedEntity<Car>[]> => {
return cubaApp.query<Car>("mpg$Car", "ecoCars", params, fetchOpts);
},
ecoCarsCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_ecoCars_params): Promise<Number> => {
return cubaApp.queryCount("mpg$Car", "ecoCars", params, fetchOpts);
},
ecoCarsWithCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_ecoCars_params): Promise<EntitiesWithCount<Car>> => {
return cubaApp.queryWithCount<Car>("mpg$Car", "ecoCars", params, fetchOpts);
},
carsByType: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_carsByType_params): Promise<SerializedEntity<Car>[]> => {
return cubaApp.query<Car>("mpg$Car", "carsByType", params, fetchOpts);
},
carsByTypeCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_carsByType_params): Promise<Number> => {
return cubaApp.queryCount("mpg$Car", "carsByType", params, fetchOpts);
},
carsByTypeWithCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_carsByType_params): Promise<EntitiesWithCount<Car>> => {
return cubaApp.queryWithCount<Car>("mpg$Car", "carsByType", params, fetchOpts);
}
},
FavoriteCar: {
allCars: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_FavoriteCar_allCars_params): Promise<SerializedEntity<FavoriteCar>[]> => {
return cubaApp.query<FavoriteCar>("mpg$FavoriteCar", "allCars", params, fetchOpts);
},
allCarsCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_FavoriteCar_allCars_params): Promise<Number> => {
return cubaApp.queryCount("mpg$FavoriteCar", "allCars", params, fetchOpts);
},
allCarsWithCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_FavoriteCar_allCars_params): Promise<EntitiesWithCount<FavoriteCar>> => {
return cubaApp.queryWithCount<FavoriteCar>("mpg$FavoriteCar", "allCars", params, fetchOpts);
}
}
};`;
(0, test_commons_1.assertContent)(content, expected);
});
it('should generate rest query TS assignment from CUBA model', function () {
const queryResult = (0, queries_generation_1.createQuery)(queriesModelCar[0].entity, queriesModelCar, (0, test_commons_1.modelCtx)());
const content = (0, ts_helpers_1.renderTSNodes)([queryResult.node]);
const expect = '' +
`Car: {
ecoCars: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (): Promise<SerializedEntity<Car>[]> => {
return cubaApp.query<Car>("mpg$Car", "ecoCars", {}, fetchOpts);
},
ecoCarsCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (): Promise<Number> => {
return cubaApp.queryCount("mpg$Car", "ecoCars", {}, fetchOpts);
},
ecoCarsWithCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (): Promise<EntitiesWithCount<Car>> => {
return cubaApp.queryWithCount<Car>("mpg$Car", "ecoCars", {}, fetchOpts);
},
carsByType: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_carsByType_params): Promise<SerializedEntity<Car>[]> => {
return cubaApp.query<Car>("mpg$Car", "carsByType", params, fetchOpts);
},
carsByTypeCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_carsByType_params): Promise<Number> => {
return cubaApp.queryCount("mpg$Car", "carsByType", params, fetchOpts);
},
carsByTypeWithCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_carsByType_params): Promise<EntitiesWithCount<Car>> => {
return cubaApp.queryWithCount<Car>("mpg$Car", "carsByType", params, fetchOpts);
}
}`;
(0, test_commons_1.assertContent)(content, expect);
});
it('should resolve queries overload', function () {
const content = (0, queries_generation_1.generateQueries)(queriesModelOverloads, (0, test_commons_1.modelCtx)());
const expect = '' +
`import { CubaApp, FetchOptions, SerializedEntity, EntitiesWithCount } from "@cuba-platform/rest";
import { Car } from "./entities/mpg$Car";
export type queries_Car_ecoCars_params = {} | {
ecoRank: string;
} | {
model: string;
};
export var restQueries = {
Car: {
ecoCars: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_ecoCars_params): Promise<SerializedEntity<Car>[]> => {
return cubaApp.query<Car>("mpg$Car", "ecoCars", params, fetchOpts);
},
ecoCarsCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_ecoCars_params): Promise<Number> => {
return cubaApp.queryCount("mpg$Car", "ecoCars", params, fetchOpts);
},
ecoCarsWithCount: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: queries_Car_ecoCars_params): Promise<EntitiesWithCount<Car>> => {
return cubaApp.queryWithCount<Car>("mpg$Car", "ecoCars", params, fetchOpts);
}
}
};`;
(0, test_commons_1.assertContent)(content, expect);
});
it('should generate rest query methods param types', function () {
const queryResult = (0, queries_generation_1.createQuery)(queriesModelCar[0].entity, queriesModelCar, (0, test_commons_1.modelCtx)());
const content = (0, ts_helpers_1.renderTSNodes)(queryResult.methodParamsTypes);
const expect = '' +
`export type queries_Car_carsByType_params = {
carType: string;
};`;
(0, test_commons_1.assertContent)(content, expect);
});
it('should create cuba app query call', function () {
const paramTypeName = undefined;
const entityName = 'mpg$Car';
const qName = 'favoriteCars';
const typeArguments = [ts.createTypeReferenceNode('Car', undefined)];
// functionType - Promise<SerializedEntity<EntityClass>[]>
const entityClassTypeNode = ts.createTypeReferenceNode('Car', []);
const serializedEntityTypeNode = ts.createTypeReferenceNode('SerializedEntity', [entityClassTypeNode]);
const serializedEntityArrayTypeNode = ts.createArrayTypeNode(serializedEntityTypeNode);
const functionType = ts.createTypeReferenceNode('Promise', [serializedEntityArrayTypeNode]);
const content = (0, ts_helpers_1.renderTSNodes)([
(0, services_generation_1.cubaAppCallFunc)('query', paramTypeName, functionType, [entityName, qName], typeArguments)
]);
const expect = '' +
`(cubaApp: CubaApp, fetchOpts?: FetchOptions) => (): Promise<SerializedEntity<Car>[]> => {
return cubaApp.query<Car>("mpg$Car", "favoriteCars", {}, fetchOpts);
}`;
(0, test_commons_1.assertContent)(content, expect);
});
});
//# sourceMappingURL=queries-generation.test.js.map