From 3cc95d4afa8ce557cf495f2747b236e019cb95c5 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Thu, 27 Mar 2025 17:40:14 +0200 Subject: [PATCH] fix(schema-compiler): Fix model validation for aliased included members for views --- .../src/compiler/CubeValidator.ts | 4 +-- .../test/unit/cube-validator.test.ts | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts index 126247c5f42af..dbe755aa1bb42 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts +++ b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts @@ -792,8 +792,8 @@ const viewSchema = inherit(baseSchema, { Joi.array().items(Joi.alternatives([ Joi.string().required(), Joi.object().keys({ - name: Joi.string().required(), - alias: Joi.string() + name: identifier.required(), + alias: identifier }) ])) ]).required(), diff --git a/packages/cubejs-schema-compiler/test/unit/cube-validator.test.ts b/packages/cubejs-schema-compiler/test/unit/cube-validator.test.ts index 7e03f95594dc5..628a5189883b9 100644 --- a/packages/cubejs-schema-compiler/test/unit/cube-validator.test.ts +++ b/packages/cubejs-schema-compiler/test/unit/cube-validator.test.ts @@ -134,6 +134,37 @@ describe('Cube Validation', () => { expect(validationResult.error).toBeFalsy(); }); + it('view with incorrect included member with alias', async () => { + const cubeValidator = new CubeValidator(new CubeSymbols()); + const cube = { + name: 'name', + // it's a hidden field which we use internally + isView: true, + fileName: 'fileName', + cubes: [ + { + joinPath: () => '', + prefix: false, + includes: [ + 'member-by-name', + { + name: 'member-by-alias', + alias: 'incorrect Alias' + } + ] + } + ] + }; + + const validationResult = cubeValidator.validate(cube, { + error: (message: any, _e: any) => { + console.log(message); + } + } as any); + + expect(validationResult.error).toBeTruthy(); + }); + it('refreshKey alternatives', async () => { const cubeValidator = new CubeValidator(new CubeSymbols()); const cube = {