@finos/legend-application-studio 28.21.23 → 28.21.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/lib/__lib__/LegendStudioDocumentation.d.ts +2 -2
  2. package/lib/__lib__/LegendStudioDocumentation.d.ts.map +1 -1
  3. package/lib/__lib__/LegendStudioDocumentation.js +1 -1
  4. package/lib/__lib__/LegendStudioDocumentation.js.map +1 -1
  5. package/lib/components/editor/editor-group/data-editor/RelationElementsDataEditor.d.ts.map +1 -1
  6. package/lib/components/editor/editor-group/data-editor/RelationElementsDataEditor.js +2 -5
  7. package/lib/components/editor/editor-group/data-editor/RelationElementsDataEditor.js.map +1 -1
  8. package/lib/components/editor/editor-group/dataProduct/testable/DataProductTestableEditor.d.ts.map +1 -1
  9. package/lib/components/editor/editor-group/dataProduct/testable/DataProductTestableEditor.js +13 -239
  10. package/lib/components/editor/editor-group/dataProduct/testable/DataProductTestableEditor.js.map +1 -1
  11. package/lib/components/editor/editor-group/ingest-editor/IngestDefinitionEditor.d.ts.map +1 -1
  12. package/lib/components/editor/editor-group/ingest-editor/IngestDefinitionEditor.js +17 -3
  13. package/lib/components/editor/editor-group/ingest-editor/IngestDefinitionEditor.js.map +1 -1
  14. package/lib/components/editor/editor-group/ingest-editor/testable/IngestTestableEditor.d.ts +22 -0
  15. package/lib/components/editor/editor-group/ingest-editor/testable/IngestTestableEditor.d.ts.map +1 -0
  16. package/lib/components/editor/editor-group/ingest-editor/testable/IngestTestableEditor.js +134 -0
  17. package/lib/components/editor/editor-group/ingest-editor/testable/IngestTestableEditor.js.map +1 -0
  18. package/lib/components/editor/editor-group/testable/LakehouseTestableEditor.d.ts +89 -0
  19. package/lib/components/editor/editor-group/testable/LakehouseTestableEditor.d.ts.map +1 -0
  20. package/lib/components/editor/editor-group/testable/LakehouseTestableEditor.js +144 -0
  21. package/lib/components/editor/editor-group/testable/LakehouseTestableEditor.js.map +1 -0
  22. package/lib/components/editor/editor-group/testable/TestableSharedComponents.d.ts.map +1 -1
  23. package/lib/components/editor/editor-group/testable/TestableSharedComponents.js +14 -8
  24. package/lib/components/editor/editor-group/testable/TestableSharedComponents.js.map +1 -1
  25. package/lib/components/editor/ingest-definition-editor.css +1 -1
  26. package/lib/components/editor/ingest-definition-editor.css.map +1 -1
  27. package/lib/components/project-reviewer/ProjectReviewer.d.ts.map +1 -1
  28. package/lib/components/project-reviewer/ProjectReviewer.js +2 -1
  29. package/lib/components/project-reviewer/ProjectReviewer.js.map +1 -1
  30. package/lib/components/project-view/ProjectViewer.d.ts.map +1 -1
  31. package/lib/components/project-view/ProjectViewer.js +2 -2
  32. package/lib/components/project-view/ProjectViewer.js.map +1 -1
  33. package/lib/components/showcase/ShowcaseViewer.d.ts.map +1 -1
  34. package/lib/components/showcase/ShowcaseViewer.js +2 -2
  35. package/lib/components/showcase/ShowcaseViewer.js.map +1 -1
  36. package/lib/components/workspace-setup/WorkspaceSetup.d.ts +1 -1
  37. package/lib/components/workspace-setup/WorkspaceSetup.d.ts.map +1 -1
  38. package/lib/components/workspace-setup/WorkspaceSetup.js +98 -43
  39. package/lib/components/workspace-setup/WorkspaceSetup.js.map +1 -1
  40. package/lib/index.css +2 -2
  41. package/lib/index.css.map +1 -1
  42. package/lib/package.json +1 -1
  43. package/lib/stores/editor/editor-state/element-editor-state/data/EmbeddedDataState.d.ts.map +1 -1
  44. package/lib/stores/editor/editor-state/element-editor-state/data/EmbeddedDataState.js +1 -2
  45. package/lib/stores/editor/editor-state/element-editor-state/data/EmbeddedDataState.js.map +1 -1
  46. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.d.ts.map +1 -1
  47. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js +1 -0
  48. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js.map +1 -1
  49. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.d.ts +8 -30
  50. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.d.ts.map +1 -1
  51. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.js +7 -147
  52. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.js.map +1 -1
  53. package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.d.ts.map +1 -1
  54. package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.js +32 -28
  55. package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.js.map +1 -1
  56. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.d.ts +8 -0
  57. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.d.ts.map +1 -1
  58. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.js +15 -0
  59. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.js.map +1 -1
  60. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.d.ts +86 -0
  61. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.d.ts.map +1 -0
  62. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.js +420 -0
  63. package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.js.map +1 -0
  64. package/lib/stores/editor/editor-state/element-editor-state/testable/LakehouseTestableUtils.d.ts +62 -0
  65. package/lib/stores/editor/editor-state/element-editor-state/testable/LakehouseTestableUtils.d.ts.map +1 -0
  66. package/lib/stores/editor/editor-state/element-editor-state/testable/LakehouseTestableUtils.js +138 -0
  67. package/lib/stores/editor/editor-state/element-editor-state/testable/LakehouseTestableUtils.js.map +1 -0
  68. package/lib/stores/workspace-setup/WorkspaceSetupStore.d.ts +10 -1
  69. package/lib/stores/workspace-setup/WorkspaceSetupStore.d.ts.map +1 -1
  70. package/lib/stores/workspace-setup/WorkspaceSetupStore.js +105 -12
  71. package/lib/stores/workspace-setup/WorkspaceSetupStore.js.map +1 -1
  72. package/package.json +11 -11
  73. package/src/__lib__/LegendStudioDocumentation.ts +1 -1
  74. package/src/components/editor/editor-group/data-editor/RelationElementsDataEditor.tsx +2 -5
  75. package/src/components/editor/editor-group/dataProduct/testable/DataProductTestableEditor.tsx +19 -869
  76. package/src/components/editor/editor-group/ingest-editor/IngestDefinitionEditor.tsx +90 -34
  77. package/src/components/editor/editor-group/ingest-editor/testable/IngestTestableEditor.tsx +418 -0
  78. package/src/components/editor/editor-group/testable/LakehouseTestableEditor.tsx +564 -0
  79. package/src/components/editor/editor-group/testable/TestableSharedComponents.tsx +17 -9
  80. package/src/components/project-reviewer/ProjectReviewer.tsx +2 -0
  81. package/src/components/project-view/ProjectViewer.tsx +2 -1
  82. package/src/components/showcase/ShowcaseViewer.tsx +2 -1
  83. package/src/components/workspace-setup/WorkspaceSetup.tsx +169 -75
  84. package/src/stores/editor/editor-state/element-editor-state/data/EmbeddedDataState.ts +1 -2
  85. package/src/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.ts +1 -0
  86. package/src/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.ts +18 -204
  87. package/src/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.ts +41 -36
  88. package/src/stores/editor/editor-state/element-editor-state/ingest/IngestDefinitionEditorState.ts +16 -0
  89. package/src/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.ts +654 -0
  90. package/src/stores/editor/editor-state/element-editor-state/testable/LakehouseTestableUtils.ts +224 -0
  91. package/src/stores/workspace-setup/WorkspaceSetupStore.ts +125 -8
  92. package/tsconfig.json +4 -0
@@ -0,0 +1,420 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { BaseDataResolver, DataProduct, EqualToRelation, IngestMatViewTest, IngestTestSuite, PackageableElementExplicitReference, RelationElement, RelationElementsData, RelationRowTestData, ReferenceDataResolver, observe_RelationElement, observe_RelationElementsData, observe_RelationRowTestData, } from '@finos/legend-graph';
17
+ import { addUniqueEntry, deleteEntry, noop, uuid, } from '@finos/legend-shared';
18
+ import { action, flow, flowResult, makeObservable, observable, runInAction, } from 'mobx';
19
+ import { testSuite_addTest } from '../../../../graph-modifier/Testable_GraphModifierHelper.js';
20
+ import { TestableTestEditorState, TestableTestSuiteEditorState, } from '../testable/TestableEditorState.js';
21
+ import { RelationElementState } from '../data/EmbeddedDataState.js';
22
+ import { buildRelationElementsDataWithColumns, createEmptyRelationElement, isIngestOrDataProductAccessor, LakehouseElementTestDataState, } from '../testable/LakehouseTestableUtils.js';
23
+ // ─── Ingest-specific helpers ──────────────────────────────────────────────────
24
+ const createExpectedRelationElement = (datasetName, columns) => {
25
+ const expected = new RelationElement();
26
+ const row = observe_RelationRowTestData(new RelationRowTestData());
27
+ row.values = columns.map(() => '');
28
+ expected.paths = [datasetName];
29
+ expected.columns = columns;
30
+ expected.rows = [row];
31
+ return observe_RelationElement(expected);
32
+ };
33
+ const inferIngestDatasetColumns = async (editorStore, ingest, datasetName) => {
34
+ const dataset = ingest.TEMPORARY_MATVIEW_FUNCTION_DATA_SETS?.find((candidate) => candidate.name === datasetName);
35
+ if (!dataset) {
36
+ return undefined;
37
+ }
38
+ const relationType = await editorStore.graphManagerState.graphManager.getLambdaRelationType(dataset.source.function, editorStore.graphManagerState.graph);
39
+ return relationType.columns.map((column) => column.name);
40
+ };
41
+ // ─── Per-test state ───────────────────────────────────────────────────────────
42
+ export class IngestTestState extends TestableTestEditorState {
43
+ suiteState;
44
+ test;
45
+ uuid = uuid();
46
+ testDataRelationState;
47
+ constructor(suiteState, test) {
48
+ super(suiteState.testableState.ingest, test, suiteState.testableState.ingestDefinitionEditorState.isReadOnly, suiteState.editorStore);
49
+ makeObservable(this, {
50
+ selectedAsertionState: observable,
51
+ selectedTab: observable,
52
+ assertionToRename: observable,
53
+ assertionEditorStates: observable,
54
+ testResultState: observable,
55
+ runningTestAction: observable,
56
+ testDataRelationState: observable,
57
+ setSelectedTab: action,
58
+ setAssertionToRename: action,
59
+ addAssertion: action,
60
+ deleteAssertion: action,
61
+ openAssertion: action,
62
+ resetResult: action,
63
+ handleTestResult: action,
64
+ runTest: flow,
65
+ setDatasetId: action,
66
+ });
67
+ this.suiteState = suiteState;
68
+ this.test = test;
69
+ this.backfillDatasetIdIfMissing();
70
+ this.buildTestDataRelationState().catch(noop());
71
+ }
72
+ setDatasetId(val) {
73
+ this.test.datasetId = val;
74
+ this.resetResult();
75
+ }
76
+ get datasetLabel() {
77
+ if (this.test.datasetId) {
78
+ return this.test.datasetId;
79
+ }
80
+ const assertion = this.test.assertions.find((candidate) => candidate instanceof EqualToRelation);
81
+ const inferred = assertion?.expected.paths[0];
82
+ if (inferred) {
83
+ return inferred;
84
+ }
85
+ const availableDatasets = this.suiteState.testableState.ingestDefinitionEditorState.getMatviewFuncNames();
86
+ return availableDatasets[0] ?? 'N/A';
87
+ }
88
+ backfillDatasetIdIfMissing() {
89
+ if (this.test.datasetId) {
90
+ return;
91
+ }
92
+ const assertion = this.test.assertions.find((candidate) => candidate instanceof EqualToRelation);
93
+ const fallbackDatasetId = assertion?.expected.paths[0];
94
+ if (fallbackDatasetId) {
95
+ this.test.datasetId = fallbackDatasetId;
96
+ return;
97
+ }
98
+ const availableDatasets = this.suiteState.testableState.ingestDefinitionEditorState.getMatviewFuncNames();
99
+ if (availableDatasets[0]) {
100
+ this.test.datasetId = availableDatasets[0];
101
+ }
102
+ }
103
+ async buildTestDataRelationState() {
104
+ const assertion = this.test.assertions.find((candidate) => candidate instanceof EqualToRelation);
105
+ if (!assertion) {
106
+ return;
107
+ }
108
+ if (assertion.expected.columns.length === 0) {
109
+ try {
110
+ const engineColumns = await inferIngestDatasetColumns(this.editorStore, this.suiteState.testableState.ingest, this.datasetLabel);
111
+ if (engineColumns?.length) {
112
+ runInAction(() => {
113
+ assertion.expected.columns = engineColumns;
114
+ });
115
+ }
116
+ }
117
+ catch {
118
+ // best-effort only
119
+ }
120
+ }
121
+ runInAction(() => {
122
+ this.testDataRelationState = new RelationElementState(assertion.expected);
123
+ });
124
+ }
125
+ }
126
+ // ─── Per-element test data state ─────────────────────────────────────────────
127
+ // Replaced by the shared LakehouseElementTestDataState from LakehouseTestableUtils.
128
+ // The type alias above maintains backward compatibility for any existing imports.
129
+ // ─── Test data state for a suite ─────────────────────────────────────────────
130
+ export class IngestTestDataState {
131
+ editorStore;
132
+ suiteState;
133
+ elementTestDataStates = [];
134
+ selectedElementTestDataState;
135
+ showAddElementModal = false;
136
+ constructor(suiteState, options) {
137
+ makeObservable(this, {
138
+ elementTestDataStates: observable,
139
+ selectedElementTestDataState: observable,
140
+ showAddElementModal: observable,
141
+ setSelectedElementTestDataState: action,
142
+ setShowAddElementModal: action,
143
+ addElement: action,
144
+ deleteElement: action,
145
+ refreshElementTestDataStates: action,
146
+ });
147
+ this.editorStore = suiteState.editorStore;
148
+ this.suiteState = suiteState;
149
+ this.refreshElementTestDataStates(options);
150
+ }
151
+ get availableElementsToAdd() {
152
+ const suite = this.suiteState.suite;
153
+ const existingPaths = new Set(suite.testData
154
+ .filter((testData) => testData instanceof BaseDataResolver ||
155
+ testData instanceof ReferenceDataResolver)
156
+ .map((testData) => testData.element.value.path));
157
+ const graph = this.editorStore.graphManagerState.graph;
158
+ const currentIngestPath = this.suiteState.testableState.ingest.path;
159
+ const candidates = [
160
+ ...graph.ingests.filter((ingest) => ingest.path !== currentIngestPath),
161
+ ...graph.allElements.filter((e) => e instanceof DataProduct),
162
+ ];
163
+ return candidates.filter((element) => !existingPaths.has(element.path));
164
+ }
165
+ setShowAddElementModal(val) {
166
+ this.showAddElementModal = val;
167
+ }
168
+ addElement(path) {
169
+ const element = this.editorStore.graphManagerState.graph.getNullableElement(path);
170
+ if (!element) {
171
+ return;
172
+ }
173
+ const resolver = new BaseDataResolver();
174
+ resolver.element = PackageableElementExplicitReference.create(element);
175
+ const relationElementsData = new RelationElementsData();
176
+ relationElementsData.relationElements = [];
177
+ observe_RelationElementsData(relationElementsData);
178
+ resolver.data = relationElementsData;
179
+ const suite = this.suiteState.suite;
180
+ suite.testData = [...suite.testData, resolver];
181
+ this.refreshElementTestDataStates({ selectedElementPath: path });
182
+ }
183
+ deleteElement(elementState) {
184
+ const suite = this.suiteState.suite;
185
+ const index = suite.testData.indexOf(elementState.testData);
186
+ suite.testData.splice(index, 1);
187
+ this.refreshElementTestDataStates();
188
+ }
189
+ refreshElementTestDataStates(options) {
190
+ const previouslySelectedElementPath = options?.selectedElementPath ??
191
+ this.selectedElementTestDataState?.element.path;
192
+ const suite = this.suiteState.suite;
193
+ this.elementTestDataStates = suite.testData
194
+ .filter((testData) => testData instanceof BaseDataResolver)
195
+ .map((testData) => new LakehouseElementTestDataState(testData, this.editorStore));
196
+ this.selectedElementTestDataState =
197
+ this.elementTestDataStates.find((state) => state.element.path === previouslySelectedElementPath) ?? this.elementTestDataStates[0];
198
+ }
199
+ setSelectedElementTestDataState(val) {
200
+ this.selectedElementTestDataState = val;
201
+ }
202
+ }
203
+ // ─── Per-suite state ──────────────────────────────────────────────────────────
204
+ export class IngestTestSuiteState extends TestableTestSuiteEditorState {
205
+ testableState;
206
+ suite;
207
+ testStates = [];
208
+ testDataState;
209
+ uuid = uuid();
210
+ constructor(editorStore, testableState, suite) {
211
+ super(testableState.ingest, suite, testableState.ingestDefinitionEditorState.isReadOnly, editorStore);
212
+ makeObservable(this, {
213
+ testStates: observable,
214
+ runningSuiteState: observable,
215
+ selectTestState: observable,
216
+ testDataState: observable,
217
+ changeTest: action,
218
+ deleteTest: action,
219
+ removeTestState: action,
220
+ addNewTest: flow,
221
+ runSuite: flow,
222
+ runFailingTests: flow,
223
+ buildTestStates: action,
224
+ });
225
+ this.testableState = testableState;
226
+ this.suite = suite;
227
+ this.testDataState = new IngestTestDataState(this);
228
+ this.buildTestStates();
229
+ }
230
+ refreshTestDataState() {
231
+ this.testDataState = new IngestTestDataState(this, {
232
+ selectedElementPath: this.testDataState.selectedElementTestDataState?.element.path,
233
+ });
234
+ }
235
+ buildTestStates() {
236
+ this.suite.tests.forEach((test) => {
237
+ test.__parent = this.suite;
238
+ if (test instanceof IngestMatViewTest && !test.datasetId) {
239
+ const relationAssertion = test.assertions.find((candidate) => candidate instanceof EqualToRelation);
240
+ test.datasetId =
241
+ relationAssertion?.expected.paths[0] ??
242
+ this.testableState.datasetNames[0] ??
243
+ '';
244
+ }
245
+ });
246
+ this.testStates = this.suite.tests.map((test) => new IngestTestState(this, test));
247
+ this.selectTestState = this.testStates[0];
248
+ }
249
+ deleteTest(test) {
250
+ super.deleteTest(test);
251
+ if (this.suite.tests.length === 0) {
252
+ // Ingest requires at least one test per suite; remove emptied suites.
253
+ this.testableState.deleteSuite(this);
254
+ }
255
+ }
256
+ *addNewTest(testName, datasetName) {
257
+ if (this.suite.tests.find((test) => test.id === testName)) {
258
+ return 'Duplicated test name';
259
+ }
260
+ let inferredColumns = [];
261
+ try {
262
+ const columns = (yield inferIngestDatasetColumns(this.editorStore, this.testableState.ingest, datasetName));
263
+ if (columns) {
264
+ inferredColumns = columns;
265
+ }
266
+ }
267
+ catch {
268
+ // Best effort only; continue with an empty expected relation.
269
+ }
270
+ const dataset = this.testableState.ingest.TEMPORARY_MATVIEW_FUNCTION_DATA_SETS?.find((candidate) => candidate.name === datasetName);
271
+ const rawLambda = dataset?.source.function;
272
+ if (rawLambda) {
273
+ const all = (yield this.editorStore.graphManagerState.graphManager.collectAccessorsInRawLambda(rawLambda, this.editorStore.graphManagerState.graph));
274
+ const externalAccessors = all.filter((accessor) => isIngestOrDataProductAccessor(accessor));
275
+ const byElement = new Map();
276
+ for (const accessor of externalAccessors) {
277
+ const group = byElement.get(accessor.parentElement.path) ?? [];
278
+ group.push(accessor);
279
+ byElement.set(accessor.parentElement.path, group);
280
+ }
281
+ for (const [elementPath, accessors] of byElement) {
282
+ const element = this.editorStore.graphManagerState.graph.getNullableElement(elementPath);
283
+ if (!element) {
284
+ continue;
285
+ }
286
+ const existingResolver = this.suite.testData.find((testData) => testData instanceof BaseDataResolver &&
287
+ testData.element.value === element);
288
+ const relationElementsData = existingResolver?.data instanceof RelationElementsData
289
+ ? existingResolver.data
290
+ : undefined;
291
+ if (!existingResolver || !relationElementsData) {
292
+ const resolver = new BaseDataResolver();
293
+ resolver.element =
294
+ PackageableElementExplicitReference.create(element);
295
+ const relationData = buildRelationElementsDataWithColumns(accessors);
296
+ observe_RelationElementsData(relationData);
297
+ resolver.data = relationData;
298
+ this.suite.testData = [...this.suite.testData, resolver];
299
+ }
300
+ else {
301
+ for (const accessor of accessors) {
302
+ const itemId = accessor.accessor;
303
+ if (!relationElementsData.relationElements.find((relationElement) => relationElement.paths[0] === itemId)) {
304
+ const columns = accessor.relationType.columns.map((column) => column.name);
305
+ relationElementsData.relationElements.push(createEmptyRelationElement(itemId, columns));
306
+ }
307
+ }
308
+ }
309
+ }
310
+ }
311
+ else {
312
+ this.editorStore.applicationStore.notificationService.notifyWarning('Dataset accessors cannot be resolved; using default ingest test data');
313
+ }
314
+ if (this.suite.testData.length === 0) {
315
+ // Ingest test suites require testData >= 1; seed a minimal editable resolver.
316
+ const resolver = new BaseDataResolver();
317
+ resolver.element = PackageableElementExplicitReference.create(this.testableState.ingest);
318
+ const relationData = new RelationElementsData();
319
+ relationData.relationElements = [
320
+ createEmptyRelationElement(datasetName, inferredColumns),
321
+ ];
322
+ observe_RelationElementsData(relationData);
323
+ resolver.data = relationData;
324
+ this.suite.testData = [resolver];
325
+ }
326
+ const test = new IngestMatViewTest();
327
+ test.id = testName;
328
+ test.datasetId = datasetName;
329
+ test.__parent = this.suite;
330
+ const assertion = new EqualToRelation();
331
+ assertion.id = 'assert_1';
332
+ assertion.expected = createExpectedRelationElement(datasetName, inferredColumns);
333
+ test.assertions = [assertion];
334
+ testSuite_addTest(this.suite, test, this.editorStore.changeDetectionState.observerContext);
335
+ this.refreshTestDataState();
336
+ const testState = new IngestTestState(this, test);
337
+ this.testStates.push(testState);
338
+ this.selectTestState = testState;
339
+ return undefined;
340
+ }
341
+ }
342
+ // ─── Top-level testable state ─────────────────────────────────────────────────
343
+ export class IngestTestableState {
344
+ editorStore;
345
+ ingestDefinitionEditorState;
346
+ suiteStates = [];
347
+ selectedSuiteState;
348
+ showCreateSuiteModal = false;
349
+ showCreateTestModal = false;
350
+ suiteToRename;
351
+ constructor(ingestDefinitionEditorState) {
352
+ makeObservable(this, {
353
+ suiteStates: observable,
354
+ selectedSuiteState: observable,
355
+ showCreateSuiteModal: observable,
356
+ showCreateTestModal: observable,
357
+ suiteToRename: observable,
358
+ setSelectedSuiteState: action,
359
+ setShowCreateSuiteModal: action,
360
+ setShowCreateTestModal: action,
361
+ setSuiteToRename: action,
362
+ changeSuite: action,
363
+ init: action,
364
+ createSuite: flow,
365
+ deleteSuite: action,
366
+ });
367
+ this.editorStore = ingestDefinitionEditorState.editorStore;
368
+ this.ingestDefinitionEditorState = ingestDefinitionEditorState;
369
+ }
370
+ get ingest() {
371
+ return this.ingestDefinitionEditorState.ingest;
372
+ }
373
+ get datasetNames() {
374
+ return this.ingestDefinitionEditorState.getMatviewFuncNames();
375
+ }
376
+ setSelectedSuiteState(val) {
377
+ this.selectedSuiteState = val;
378
+ }
379
+ setShowCreateSuiteModal(val) {
380
+ this.showCreateSuiteModal = val;
381
+ }
382
+ setShowCreateTestModal(val) {
383
+ this.showCreateTestModal = val;
384
+ }
385
+ setSuiteToRename(val) {
386
+ this.suiteToRename = val;
387
+ }
388
+ changeSuite(suite) {
389
+ this.selectedSuiteState = this.suiteStates.find((s) => s.suite === suite);
390
+ }
391
+ init() {
392
+ this.suiteStates = this.ingest.tests.map((suite) => new IngestTestSuiteState(this.editorStore, this, suite));
393
+ this.selectedSuiteState = this.suiteStates[0];
394
+ }
395
+ *createSuite(suiteName, testName, datasetName) {
396
+ if (this.ingest.tests.find((suite) => suite.id === suiteName)) {
397
+ return 'Duplicated suite name';
398
+ }
399
+ const suite = new IngestTestSuite();
400
+ suite.id = suiteName;
401
+ suite.tests = [];
402
+ const suiteState = new IngestTestSuiteState(this.editorStore, this, suite);
403
+ const error = (yield flowResult(suiteState.addNewTest(testName, datasetName)));
404
+ if (error) {
405
+ return error;
406
+ }
407
+ addUniqueEntry(this.ingest.tests, suite);
408
+ this.suiteStates.push(suiteState);
409
+ this.selectedSuiteState = suiteState;
410
+ return undefined;
411
+ }
412
+ deleteSuite(suiteState) {
413
+ deleteEntry(this.ingest.tests, suiteState.suite);
414
+ deleteEntry(this.suiteStates, suiteState);
415
+ if (this.selectedSuiteState === suiteState) {
416
+ this.selectedSuiteState = this.suiteStates[0];
417
+ }
418
+ }
419
+ }
420
+ //# sourceMappingURL=IngestTestableState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IngestTestableState.js","sourceRoot":"","sources":["../../../../../../src/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Shared utilities for Lakehouse test state:
18
+ * used by both DataProductTestableState and IngestTestableState.
19
+ */
20
+ import { type Accessor, type AbstractPureGraphManager, type BaseDataResolver, RelationElement, RelationElementsData, type PackageableElement } from '@finos/legend-graph';
21
+ import type { EditorStore } from '../../../EditorStore.js';
22
+ import { RelationElementsDataState } from '../data/EmbeddedDataState.js';
23
+ export declare const createEmptyRelationElement: (itemId: string, columns?: string[]) => RelationElement;
24
+ export declare const buildRelationElementsDataWithColumns: (accessors: Accessor[]) => RelationElementsData;
25
+ export declare const isIngestOrDataProductAccessor: (accessor: Accessor) => accessor is Accessor;
26
+ export interface ElementDataItem {
27
+ id: string;
28
+ label: string;
29
+ }
30
+ export declare const getElementDataItems: (element: PackageableElement, graphManager: AbstractPureGraphManager) => ElementDataItem[];
31
+ /**
32
+ * Wraps a single BaseDataResolver within a test suite's testData array.
33
+ * Shared between DataProduct and Ingest test suite states — both populate
34
+ * test data by wiring BaseDataResolver entries to PackageableElements.
35
+ */
36
+ export declare class LakehouseElementTestDataState {
37
+ readonly testData: BaseDataResolver;
38
+ readonly editorStore: EditorStore;
39
+ readonly relationElementsDataState: RelationElementsDataState | undefined;
40
+ constructor(testData: BaseDataResolver, editorStore: EditorStore);
41
+ get element(): PackageableElement;
42
+ get itemLabel(): string;
43
+ private initAccessorOptions;
44
+ private refreshAccessorOptions;
45
+ }
46
+ /**
47
+ * Structural interface satisfied by both DataProductTestDataState and
48
+ * IngestTestDataState. Used to type the shared LakehouseTestDataEditor
49
+ * component without importing the concrete state classes.
50
+ */
51
+ export interface LakehouseTestDataStateBase {
52
+ elementTestDataStates: LakehouseElementTestDataState[];
53
+ selectedElementTestDataState: LakehouseElementTestDataState | undefined;
54
+ setSelectedElementTestDataState(val: LakehouseElementTestDataState | undefined): void;
55
+ availableElementsToAdd: PackageableElement[];
56
+ showAddElementModal: boolean;
57
+ setShowAddElementModal(val: boolean): void;
58
+ addElement(path: string): void;
59
+ deleteElement(state: LakehouseElementTestDataState): void;
60
+ editorStore: EditorStore;
61
+ }
62
+ //# sourceMappingURL=LakehouseTestableUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LakehouseTestableUtils.d.ts","sourceRoot":"","sources":["../../../../../../src/stores/editor/editor-state/element-editor-state/testable/LakehouseTestableUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AAEH,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EAGrB,eAAe,EACf,oBAAoB,EAKpB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAIzE,eAAO,MAAM,0BAA0B,GACrC,QAAQ,MAAM,EACd,UAAS,MAAM,EAAO,KACrB,eAQF,CAAC;AAEF,eAAO,MAAM,oCAAoC,GAC/C,WAAW,QAAQ,EAAE,KACpB,oBAQF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,UAAU,QAAQ,KACjB,QAAQ,IAAI,QAEqC,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,mBAAmB,GAC9B,SAAS,kBAAkB,EAC3B,cAAc,wBAAwB,KACrC,eAAe,EAYjB,CAAC;AAIF;;;;GAIG;AACH,qBAAa,6BAA6B;IACxC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,GAAG,SAAS,CAAC;gBAE9D,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW;IAYhE,IAAI,OAAO,IAAI,kBAAkB,CAEhC;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,OAAO,CAAC,mBAAmB;YAWb,sBAAsB;CA+DrC;AAID;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,qBAAqB,EAAE,6BAA6B,EAAE,CAAC;IACvD,4BAA4B,EAAE,6BAA6B,GAAG,SAAS,CAAC;IACxE,+BAA+B,CAC7B,GAAG,EAAE,6BAA6B,GAAG,SAAS,GAC7C,IAAI,CAAC;IACR,sBAAsB,EAAE,kBAAkB,EAAE,CAAC;IAC7C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,KAAK,EAAE,6BAA6B,GAAG,IAAI,CAAC;IAC1D,WAAW,EAAE,WAAW,CAAC;CAC1B"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Shared utilities for Lakehouse test state:
18
+ * used by both DataProductTestableState and IngestTestableState.
19
+ */
20
+ import { DataProduct, IngestDefinition, RelationElement, RelationElementsData, RelationRowTestData, getAccessorItemLabelForElement, observe_RelationElement, observe_RelationRowTestData, } from '@finos/legend-graph';
21
+ import { noop } from '@finos/legend-shared';
22
+ import { runInAction } from 'mobx';
23
+ import { RelationElementsDataState } from '../data/EmbeddedDataState.js';
24
+ // ─── Pure helpers ─────────────────────────────────────────────────────────────
25
+ export const createEmptyRelationElement = (itemId, columns = []) => {
26
+ const row = observe_RelationRowTestData(new RelationRowTestData());
27
+ row.values = columns.map(() => '');
28
+ const relationElement = new RelationElement();
29
+ relationElement.paths = [itemId];
30
+ relationElement.columns = columns;
31
+ relationElement.rows = [row];
32
+ return observe_RelationElement(relationElement);
33
+ };
34
+ export const buildRelationElementsDataWithColumns = (accessors) => {
35
+ const relData = new RelationElementsData();
36
+ relData.relationElements = accessors.map((acc) => {
37
+ const itemId = acc.accessor || 'UNKNOWN';
38
+ const columns = acc.relationType.columns.map((col) => col.name);
39
+ return createEmptyRelationElement(itemId, columns);
40
+ });
41
+ return relData;
42
+ };
43
+ export const isIngestOrDataProductAccessor = (accessor) => accessor.parentElement instanceof DataProduct ||
44
+ accessor.parentElement instanceof IngestDefinition;
45
+ export const getElementDataItems = (element, graphManager) => {
46
+ if (element instanceof DataProduct) {
47
+ return element.accessPointGroups
48
+ .flatMap((g) => g.accessPoints)
49
+ .map((ap) => ({ id: ap.id, label: ap.id }));
50
+ }
51
+ if (element instanceof IngestDefinition) {
52
+ return graphManager
53
+ .getIngestDefinitionDatasetNames(element)
54
+ .map((name) => ({ id: name, label: name }));
55
+ }
56
+ return [];
57
+ };
58
+ // ─── Shared element test data state ──────────────────────────────────────────
59
+ /**
60
+ * Wraps a single BaseDataResolver within a test suite's testData array.
61
+ * Shared between DataProduct and Ingest test suite states — both populate
62
+ * test data by wiring BaseDataResolver entries to PackageableElements.
63
+ */
64
+ export class LakehouseElementTestDataState {
65
+ testData;
66
+ editorStore;
67
+ relationElementsDataState;
68
+ constructor(testData, editorStore) {
69
+ this.testData = testData;
70
+ this.editorStore = editorStore;
71
+ if (testData.data instanceof RelationElementsData) {
72
+ this.relationElementsDataState = new RelationElementsDataState(editorStore, testData.data);
73
+ this.initAccessorOptions();
74
+ }
75
+ }
76
+ get element() {
77
+ return this.testData.element.value;
78
+ }
79
+ get itemLabel() {
80
+ return getAccessorItemLabelForElement(this.element);
81
+ }
82
+ initAccessorOptions() {
83
+ const dataState = this.relationElementsDataState;
84
+ if (!dataState) {
85
+ return;
86
+ }
87
+ this.refreshAccessorOptions(dataState).catch(noop);
88
+ dataState.setRefreshAccessorOptions(() => this.refreshAccessorOptions(dataState));
89
+ }
90
+ async refreshAccessorOptions(dataState) {
91
+ const element = this.element;
92
+ const graphManager = this.editorStore.graphManagerState.graphManager;
93
+ const graph = this.editorStore.graphManagerState.graph;
94
+ const items = getElementDataItems(element, graphManager);
95
+ if (items.length === 0) {
96
+ dataState.setAccessorOptions(undefined, undefined);
97
+ return;
98
+ }
99
+ const options = await Promise.all(items.map(async (item) => {
100
+ let columns = [];
101
+ try {
102
+ if (element instanceof IngestDefinition) {
103
+ const accessor = await graphManager.createAccessorFromPackageableElement(element, graph, { schemaName: undefined, tableName: item.id });
104
+ if (accessor) {
105
+ columns = accessor.relationType.columns.map((c) => c.name);
106
+ }
107
+ }
108
+ else if (element instanceof DataProduct) {
109
+ const accessor = await graphManager.buildDataProductAccessor(element, graph, { tableName: item.id });
110
+ if (accessor) {
111
+ columns = accessor.relationType.columns.map((c) => c.name);
112
+ }
113
+ }
114
+ }
115
+ catch {
116
+ // best-effort column resolution
117
+ }
118
+ return { label: item.label, value: item.id, columns };
119
+ }));
120
+ runInAction(() => {
121
+ dataState.setAccessorOptions(options, this.itemLabel);
122
+ const columnsByItem = new Map(options
123
+ .filter((o) => o.columns.length > 0)
124
+ .map((o) => [o.value, o.columns]));
125
+ for (const relState of dataState.relationElementStates) {
126
+ const rel = relState.relationElement;
127
+ if (rel.columns.length === 0) {
128
+ const key = rel.paths[rel.paths.length - 1];
129
+ const cols = key ? columnsByItem.get(key) : undefined;
130
+ if (cols) {
131
+ rel.columns = cols;
132
+ }
133
+ }
134
+ }
135
+ });
136
+ }
137
+ }
138
+ //# sourceMappingURL=LakehouseTestableUtils.js.map