diff --git a/test/testcase/base.ts b/test/testcase/base.ts index 098f282..7195021 100644 --- a/test/testcase/base.ts +++ b/test/testcase/base.ts @@ -1835,4 +1835,90 @@ export default (storeGetter: () => DbStore) => { assert(r1.length === 1, `Deeply nested query failed`); assert(r1[0].system?.platform?.name === 'test_platform', `Nested projection failed`); }); + + it('[1.4.1]嵌套跨节点表达式', async () => { + const store = storeGetter(); + const context = new TestContext(store); + await context.begin(); + + const platformId = v4(); + await store.operate('platform', { + id: v4(), + action: 'create', + data: { + id: platformId, + name: 'test2' + } + }, context, {}) + await store.operate('application', { + id: v4(), + action: 'create', + data: [{ + id: v4(), + name: 'test', + description: 'ttttt', + type: 'web', + system: { + id: v4(), + action: 'create', + data: { + id: v4(), + name: 'systest', + folder: 'systest', + platformId, + } + }, + }, { + id: v4(), + name: 'test222', + description: 'ttttt2', + type: 'web', + system: { + id: v4(), + action: 'create', + data: { + id: v4(), + name: 'test2222', + folder: 'test2', + platformId, + } + }, + }] + }, context, {}); + + process.env.NODE_ENV = 'development'; + + // 查询所有的application,过滤条件是application->system.name = application->system->platform.name + const apps = await store.select('application', { + data: { + id: 1, + name: 1, + system: { + id: 1, + name: 1, + platform: { + id: 1, + name: 1, + } + } + }, + filter: { + system: { + "#id": 'node-1', + platform: { + $expr: { + $eq: [ + { "#attr": 'name' }, + { "#refId": 'node-1', "#refAttr": 'folder' } + ] + } + } + } + } + }, context, {}); + + process.env.NODE_ENV = undefined; + assert(apps.length === 1 && apps[0].name === 'test222'); + await context.commit(); + }); } \ No newline at end of file