UNPKG

@cuba-platform/front-generator

Version:
160 lines (153 loc) 9.5 kB
"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