@finos/legend-application-studio 28.13.2 → 28.13.4

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 (95) hide show
  1. package/lib/__lib__/LegendStudioApplicationNavigationContext.d.ts +1 -0
  2. package/lib/__lib__/LegendStudioApplicationNavigationContext.d.ts.map +1 -1
  3. package/lib/__lib__/LegendStudioApplicationNavigationContext.js +1 -0
  4. package/lib/__lib__/LegendStudioApplicationNavigationContext.js.map +1 -1
  5. package/lib/application/LegendStudioApplicationConfig.d.ts +5 -9
  6. package/lib/application/LegendStudioApplicationConfig.d.ts.map +1 -1
  7. package/lib/application/LegendStudioApplicationConfig.js +6 -10
  8. package/lib/application/LegendStudioApplicationConfig.js.map +1 -1
  9. package/lib/components/editor/ActivityBar.d.ts.map +1 -1
  10. package/lib/components/editor/ActivityBar.js +3 -3
  11. package/lib/components/editor/ActivityBar.js.map +1 -1
  12. package/lib/components/editor/editor-group/connection-editor/RelationalDatabaseConnectionEditor.js +15 -15
  13. package/lib/components/editor/editor-group/connection-editor/RelationalDatabaseConnectionEditor.js.map +1 -1
  14. package/lib/components/editor/editor-group/function-activator/FunctionEditor.d.ts +1 -1
  15. package/lib/components/editor/editor-group/function-activator/FunctionEditor.d.ts.map +1 -1
  16. package/lib/components/editor/editor-group/function-activator/FunctionEditor.js +55 -104
  17. package/lib/components/editor/editor-group/function-activator/FunctionEditor.js.map +1 -1
  18. package/lib/components/editor/editor-group/function-activator/SnowflakeAppFunctionActivatorEditor.d.ts.map +1 -1
  19. package/lib/components/editor/editor-group/function-activator/SnowflakeAppFunctionActivatorEditor.js +3 -3
  20. package/lib/components/editor/editor-group/function-activator/SnowflakeAppFunctionActivatorEditor.js.map +1 -1
  21. package/lib/components/editor/editor-group/function-activator/testable/FunctionTestableEditor.d.ts +22 -0
  22. package/lib/components/editor/editor-group/function-activator/testable/FunctionTestableEditor.d.ts.map +1 -0
  23. package/lib/components/editor/editor-group/function-activator/testable/FunctionTestableEditor.js +267 -0
  24. package/lib/components/editor/editor-group/function-activator/testable/FunctionTestableEditor.js.map +1 -0
  25. package/lib/components/editor/side-bar/Explorer.d.ts.map +1 -1
  26. package/lib/components/editor/side-bar/Explorer.js +1 -25
  27. package/lib/components/editor/side-bar/Explorer.js.map +1 -1
  28. package/lib/index.css +1 -1
  29. package/lib/package.json +1 -1
  30. package/lib/stores/editor/editor-state/element-editor-state/{FunctionActivatorPromoteState.d.ts → FunctionActivatorState.d.ts} +9 -9
  31. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorState.d.ts.map +1 -0
  32. package/lib/stores/editor/editor-state/element-editor-state/{FunctionActivatorPromoteState.js → FunctionActivatorState.js} +24 -24
  33. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorState.js.map +1 -0
  34. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.d.ts +6 -5
  35. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.d.ts.map +1 -1
  36. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.js +6 -5
  37. package/lib/stores/editor/editor-state/element-editor-state/FunctionEditorState.js.map +1 -1
  38. package/lib/stores/editor/editor-state/element-editor-state/{FunctionActivatorBuilderState.d.ts → ToDelete_FunctionActivatorBuilderState.d.ts} +1 -1
  39. package/lib/stores/editor/editor-state/element-editor-state/ToDelete_FunctionActivatorBuilderState.d.ts.map +1 -0
  40. package/lib/stores/editor/editor-state/element-editor-state/{FunctionActivatorBuilderState.js → ToDelete_FunctionActivatorBuilderState.js} +1 -1
  41. package/lib/stores/editor/editor-state/element-editor-state/ToDelete_FunctionActivatorBuilderState.js.map +1 -0
  42. package/lib/stores/editor/editor-state/element-editor-state/function-activator/INTERNAL__UnknownFunctionActivatorEditorState.js +1 -1
  43. package/lib/stores/editor/editor-state/element-editor-state/function-activator/INTERNAL__UnknownFunctionActivatorEditorState.js.map +1 -1
  44. package/lib/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.d.ts +1 -1
  45. package/lib/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.d.ts.map +1 -1
  46. package/lib/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.js +2 -2
  47. package/lib/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.js.map +1 -1
  48. package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.d.ts +87 -0
  49. package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.d.ts.map +1 -0
  50. package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.js +422 -0
  51. package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.js.map +1 -0
  52. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingEditorState.d.ts.map +1 -1
  53. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingEditorState.js +1 -1
  54. package/lib/stores/editor/editor-state/element-editor-state/mapping/MappingEditorState.js.map +1 -1
  55. package/lib/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.d.ts +3 -17
  56. package/lib/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.d.ts.map +1 -1
  57. package/lib/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.js +8 -69
  58. package/lib/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.js.map +1 -1
  59. package/lib/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.d.ts +26 -3
  60. package/lib/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.d.ts.map +1 -1
  61. package/lib/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.js +72 -1
  62. package/lib/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.js.map +1 -1
  63. package/lib/stores/graph-modifier/DomainGraphModifierHelper.d.ts +4 -1
  64. package/lib/stores/graph-modifier/DomainGraphModifierHelper.d.ts.map +1 -1
  65. package/lib/stores/graph-modifier/DomainGraphModifierHelper.js +10 -1
  66. package/lib/stores/graph-modifier/DomainGraphModifierHelper.js.map +1 -1
  67. package/lib/stores/graph-modifier/Testable_GraphModifierHelper.d.ts +3 -2
  68. package/lib/stores/graph-modifier/Testable_GraphModifierHelper.d.ts.map +1 -1
  69. package/lib/stores/graph-modifier/Testable_GraphModifierHelper.js +3 -0
  70. package/lib/stores/graph-modifier/Testable_GraphModifierHelper.js.map +1 -1
  71. package/package.json +4 -4
  72. package/src/__lib__/LegendStudioApplicationNavigationContext.ts +1 -0
  73. package/src/application/LegendStudioApplicationConfig.ts +7 -12
  74. package/src/components/editor/ActivityBar.tsx +4 -3
  75. package/src/components/editor/editor-group/connection-editor/RelationalDatabaseConnectionEditor.tsx +36 -36
  76. package/src/components/editor/editor-group/function-activator/FunctionEditor.tsx +136 -345
  77. package/src/components/editor/editor-group/function-activator/SnowflakeAppFunctionActivatorEditor.tsx +3 -10
  78. package/src/components/editor/editor-group/function-activator/testable/FunctionTestableEditor.tsx +879 -0
  79. package/src/components/editor/side-bar/Explorer.tsx +0 -59
  80. package/src/stores/editor/editor-state/element-editor-state/{FunctionActivatorPromoteState.ts → FunctionActivatorState.ts} +23 -23
  81. package/src/stores/editor/editor-state/element-editor-state/FunctionEditorState.ts +7 -6
  82. package/src/stores/editor/editor-state/element-editor-state/function-activator/INTERNAL__UnknownFunctionActivatorEditorState.ts +1 -1
  83. package/src/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.ts +2 -2
  84. package/src/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.ts +646 -0
  85. package/src/stores/editor/editor-state/element-editor-state/mapping/MappingEditorState.ts +1 -4
  86. package/src/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.ts +16 -97
  87. package/src/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.ts +105 -3
  88. package/src/stores/graph-modifier/DomainGraphModifierHelper.ts +34 -2
  89. package/src/stores/graph-modifier/Testable_GraphModifierHelper.ts +9 -1
  90. package/tsconfig.json +4 -2
  91. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorBuilderState.d.ts.map +0 -1
  92. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorBuilderState.js.map +0 -1
  93. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorPromoteState.d.ts.map +0 -1
  94. package/lib/stores/editor/editor-state/element-editor-state/FunctionActivatorPromoteState.js.map +0 -1
  95. /package/src/stores/editor/editor-state/element-editor-state/{FunctionActivatorBuilderState.ts → ToDelete_FunctionActivatorBuilderState.ts} +0 -0
@@ -38,7 +38,14 @@ import {
38
38
  RunTestsTestableInput,
39
39
  UniqueTestId,
40
40
  } from '@finos/legend-graph';
41
- import { action, flow, flowResult, makeObservable, observable } from 'mobx';
41
+ import {
42
+ action,
43
+ computed,
44
+ flow,
45
+ flowResult,
46
+ makeObservable,
47
+ observable,
48
+ } from 'mobx';
42
49
  import {
43
50
  ActionState,
44
51
  assertErrorThrown,
@@ -57,7 +64,6 @@ import {
57
64
  mappingTestable_setEmbeddedData,
58
65
  mappingTestable_setQuery,
59
66
  mapping_addTestSuite,
60
- mapping_deleteTestSuite,
61
67
  } from '../../../../../graph-modifier/DSL_Mapping_GraphModifierHelper.js';
62
68
  import {
63
69
  EmbeddedDataCreatorFromEmbeddedData,
@@ -66,15 +72,12 @@ import {
66
72
  } from '../../../../utils/TestableUtils.js';
67
73
  import {
68
74
  TESTABLE_TEST_TAB,
75
+ TestablePackageableElementEditorState,
69
76
  TestableTestEditorState,
70
77
  TestableTestSuiteEditorState,
71
78
  } from '../../testable/TestableEditorState.js';
72
79
  import { EmbeddedDataEditorState } from '../../data/DataEditorState.js';
73
- import {
74
- testSuite_addTest,
75
- testSuite_deleteTest,
76
- testable_setId,
77
- } from '../../../../../graph-modifier/Testable_GraphModifierHelper.js';
80
+ import { testSuite_addTest } from '../../../../../graph-modifier/Testable_GraphModifierHelper.js';
78
81
  import { EmbeddedDataType } from '../../../ExternalFormatState.js';
79
82
  import type { EditorStore } from '../../../../EditorStore.js';
80
83
  import {
@@ -448,26 +451,6 @@ export class MappingTestSuiteState extends TestableTestSuiteEditorState {
448
451
  setShowModal(val: boolean): void {
449
452
  this.showCreateModal = val;
450
453
  }
451
-
452
- changeTest(val: MappingTest): void {
453
- if (this.selectTestState?.test !== val) {
454
- this.selectTestState = this.testStates.find(
455
- (testState) => testState.test === val,
456
- );
457
- }
458
- }
459
-
460
- deleteTest(val: MappingTest): void {
461
- testSuite_deleteTest(this.suite, val);
462
- this.removeTestState(val);
463
- if (this.selectTestState?.test === val) {
464
- this.selectTestState = this.testStates[0];
465
- }
466
- }
467
-
468
- removeTestState(val: MappingTest): void {
469
- this.testStates = this.testStates.filter((e) => e.test !== val);
470
- }
471
454
  }
472
455
 
473
456
  export class CreateSuiteState {
@@ -526,7 +509,6 @@ export class CreateSuiteState {
526
509
  createBareMappingTest(
527
510
  testName,
528
511
  storeTestData,
529
-
530
512
  this.editorStore.changeDetectionState.observerContext,
531
513
  mappingTestSuite,
532
514
  );
@@ -550,28 +532,20 @@ export class CreateSuiteState {
550
532
  }
551
533
  }
552
534
 
553
- export class MappingTestableState {
554
- readonly editorStore: EditorStore;
535
+ export class MappingTestableState extends TestablePackageableElementEditorState {
555
536
  readonly mappingEditorState: MappingEditorState;
556
537
  mappingModelCoverageAnalysisState = ActionState.create();
557
538
  mappingModelCoverageAnalysisResult:
558
539
  | MappingModelCoverageAnalysisResult
559
540
  | undefined;
560
541
 
561
- testableComponentToRename: MappingTestSuite | MappingTest | undefined;
562
542
  createSuiteState: CreateSuiteState | undefined;
563
543
 
564
- isRunningTestableSuitesState = ActionState.create();
565
- isRunningFailingSuitesState = ActionState.create();
566
-
567
- selectedTestSuite: MappingTestSuiteState | undefined;
568
- testableResults: TestResult[] | undefined;
544
+ declare selectedTestSuite: MappingTestSuiteState | undefined;
569
545
  runningSuite: MappingTestSuite | undefined;
570
546
 
571
- constructor(
572
- editorStore: EditorStore,
573
- mappingEditorState: MappingEditorState,
574
- ) {
547
+ constructor(mappingEditorState: MappingEditorState) {
548
+ super(mappingEditorState, mappingEditorState.mapping);
575
549
  makeObservable(this, {
576
550
  mappingModelCoverageAnalysisResult: observable,
577
551
  mappingModelCoverageAnalysisState: observable,
@@ -580,6 +554,7 @@ export class MappingTestableState {
580
554
  renameTestableComponent: observable,
581
555
  testableResults: observable,
582
556
  createSuiteState: observable,
557
+ suiteCount: computed,
583
558
  changeSuite: action,
584
559
  closeCreateModal: action,
585
560
  openCreateModal: action,
@@ -592,7 +567,6 @@ export class MappingTestableState {
592
567
  runSuite: flow,
593
568
  runAllFailingSuites: flow,
594
569
  });
595
- this.editorStore = editorStore;
596
570
  this.mappingEditorState = mappingEditorState;
597
571
  this.init();
598
572
  }
@@ -601,10 +575,6 @@ export class MappingTestableState {
601
575
  return this.mappingEditorState.mapping;
602
576
  }
603
577
 
604
- get suiteCount(): number {
605
- return this.mapping.tests.length;
606
- }
607
-
608
578
  get passingSuites(): MappingTestSuite[] {
609
579
  const results = this.testableResults;
610
580
  if (results?.length) {
@@ -649,11 +619,7 @@ export class MappingTestableState {
649
619
  );
650
620
  }
651
621
 
652
- setTestableResults(val: TestResult[] | undefined): void {
653
- this.testableResults = val;
654
- }
655
-
656
- init(): void {
622
+ override init(): void {
657
623
  if (!this.selectedTestSuite) {
658
624
  const suite = this.mapping.tests[0];
659
625
  this.selectedTestSuite = suite
@@ -670,32 +636,12 @@ export class MappingTestableState {
670
636
  this.createSuiteState = undefined;
671
637
  }
672
638
 
673
- renameTestableComponent(val: string | undefined): void {
674
- const _component = this.testableComponentToRename;
675
- if (_component) {
676
- testable_setId(_component, val ?? '');
677
- }
678
- }
679
-
680
639
  changeSuite(suite: MappingTestSuite): void {
681
640
  if (this.selectedTestSuite?.suite !== suite) {
682
641
  this.selectedTestSuite = this.buildTestSuiteState(suite);
683
642
  }
684
643
  }
685
644
 
686
- setRenameComponent(
687
- testSuite: MappingTestSuite | MappingTest | undefined,
688
- ): void {
689
- this.testableComponentToRename = testSuite;
690
- }
691
-
692
- deleteTestSuite(testSuite: MappingTestSuite): void {
693
- mapping_deleteTestSuite(this.mapping, testSuite);
694
- if (this.selectedTestSuite?.suite === testSuite) {
695
- this.init();
696
- }
697
- }
698
-
699
645
  buildTestSuiteState(val: MappingTestSuite): MappingTestSuiteState {
700
646
  return new MappingTestSuiteState(this.editorStore, this, val);
701
647
  }
@@ -773,33 +719,6 @@ export class MappingTestableState {
773
719
  }
774
720
  }
775
721
 
776
- *runTestable(): GeneratorFn<void> {
777
- try {
778
- this.setTestableResults(undefined);
779
- this.isRunningTestableSuitesState.inProgress();
780
- this.selectedTestSuite?.testStates.forEach((t) => t.resetResult());
781
- this.selectedTestSuite?.testStates.forEach((t) =>
782
- t.runningTestAction.inProgress(),
783
- );
784
- const input = new RunTestsTestableInput(this.mapping);
785
- const testResults =
786
- (yield this.editorStore.graphManagerState.graphManager.runTests(
787
- [input],
788
- this.editorStore.graphManagerState.graph,
789
- )) as TestResult[];
790
- this.handleNewResults(testResults);
791
- this.isRunningTestableSuitesState.complete();
792
- } catch (error) {
793
- assertErrorThrown(error);
794
- this.editorStore.applicationStore.notificationService.notifyError(error);
795
- this.isRunningTestableSuitesState.fail();
796
- } finally {
797
- this.selectedTestSuite?.testStates.forEach((t) =>
798
- t.runningTestAction.complete(),
799
- );
800
- }
801
- }
802
-
803
722
  *runAllFailingSuites(): GeneratorFn<void> {
804
723
  try {
805
724
  this.isRunningFailingSuitesState.inProgress();
@@ -15,6 +15,7 @@
15
15
  */
16
16
 
17
17
  import {
18
+ type Test,
18
19
  type AtomicTest,
19
20
  type Testable,
20
21
  type TestAssertion,
@@ -38,13 +39,19 @@ import {
38
39
  } from '@finos/legend-shared';
39
40
  import { action, flowResult, makeObservable, observable } from 'mobx';
40
41
  import type { EditorStore } from '../../../EditorStore.js';
41
- import { atomicTest_addAssertion } from '../../../../graph-modifier/Testable_GraphModifierHelper.js';
42
+ import {
43
+ atomicTest_addAssertion,
44
+ testSuite_deleteTest,
45
+ testable_deleteTest,
46
+ testable_setId,
47
+ } from '../../../../graph-modifier/Testable_GraphModifierHelper.js';
42
48
  import { createEmptyEqualToJsonAssertion } from '../../../utils/TestableUtils.js';
43
49
  import { TESTABLE_RESULT } from '../../../sidebar-state/testable/GlobalTestRunnerState.js';
44
50
  import {
45
51
  TestAssertionEditorState,
46
52
  TEST_ASSERTION_TAB,
47
53
  } from './TestAssertionState.js';
54
+ import type { ElementEditorState } from '../ElementEditorState.js';
48
55
 
49
56
  export class TestableTestResultState {
50
57
  readonly editorStore: EditorStore;
@@ -71,7 +78,7 @@ export enum TESTABLE_TEST_TAB {
71
78
  ASSERTION = 'ASSERTION',
72
79
  }
73
80
 
74
- export class TestableTestEditorState {
81
+ export abstract class TestableTestEditorState {
75
82
  readonly editorStore: EditorStore;
76
83
  testable: Testable;
77
84
  test: AtomicTest;
@@ -219,7 +226,7 @@ export class TestableTestEditorState {
219
226
  }
220
227
  }
221
228
 
222
- export class TestableTestSuiteEditorState {
229
+ export abstract class TestableTestSuiteEditorState {
223
230
  readonly editorStore: EditorStore;
224
231
  testable: Testable;
225
232
  suite: TestSuite;
@@ -304,4 +311,99 @@ export class TestableTestSuiteEditorState {
304
311
  this.testStates.forEach((t) => t.runningTestAction.complete());
305
312
  }
306
313
  }
314
+
315
+ deleteTest(val: AtomicTest): void {
316
+ testSuite_deleteTest(this.suite, val);
317
+ this.removeTestState(val);
318
+ if (this.selectTestState?.test === val) {
319
+ this.selectTestState = this.testStates[0];
320
+ }
321
+ }
322
+
323
+ removeTestState(val: AtomicTest): void {
324
+ this.testStates = this.testStates.filter((e) => e.test !== val);
325
+ }
326
+
327
+ changeTest(val: AtomicTest): void {
328
+ if (this.selectTestState?.test !== val) {
329
+ this.selectTestState = this.testStates.find(
330
+ (testState) => testState.test === val,
331
+ );
332
+ }
333
+ }
334
+ }
335
+
336
+ export abstract class TestablePackageableElementEditorState {
337
+ readonly editorStore: EditorStore;
338
+ readonly editorState: ElementEditorState;
339
+ readonly testable: Testable;
340
+ testableResults: TestResult[] | undefined;
341
+ selectedTestSuite: TestableTestSuiteEditorState | undefined;
342
+
343
+ testableComponentToRename: Test | undefined;
344
+
345
+ isRunningTestableSuitesState = ActionState.create();
346
+ isRunningFailingSuitesState = ActionState.create();
347
+
348
+ constructor(editorState: ElementEditorState, testable: Testable) {
349
+ this.editorState = editorState;
350
+ this.editorStore = editorState.editorStore;
351
+ this.testable = testable;
352
+ }
353
+
354
+ abstract init(): void;
355
+
356
+ abstract handleNewResults(results: TestResult[]): void;
357
+
358
+ get suiteCount(): number {
359
+ return this.testable.tests.length;
360
+ }
361
+
362
+ setTestableResults(val: TestResult[] | undefined): void {
363
+ this.testableResults = val;
364
+ }
365
+
366
+ setRenameComponent(testSuite: Test | undefined): void {
367
+ this.testableComponentToRename = testSuite;
368
+ }
369
+
370
+ renameTestableComponent(val: string | undefined): void {
371
+ const _component = this.testableComponentToRename;
372
+ if (_component) {
373
+ testable_setId(_component, val ?? '');
374
+ }
375
+ }
376
+
377
+ deleteTestSuite(testSuite: TestSuite): void {
378
+ testable_deleteTest(this.testable, testSuite);
379
+ if (this.selectedTestSuite?.suite === testSuite) {
380
+ this.init();
381
+ }
382
+ }
383
+ *runTestable(): GeneratorFn<void> {
384
+ try {
385
+ this.setTestableResults(undefined);
386
+ this.isRunningTestableSuitesState.inProgress();
387
+ this.selectedTestSuite?.testStates.forEach((t) => t.resetResult());
388
+ this.selectedTestSuite?.testStates.forEach((t) =>
389
+ t.runningTestAction.inProgress(),
390
+ );
391
+ const input = new RunTestsTestableInput(this.testable);
392
+ const testResults =
393
+ (yield this.editorStore.graphManagerState.graphManager.runTests(
394
+ [input],
395
+ this.editorStore.graphManagerState.graph,
396
+ )) as TestResult[];
397
+ this.handleNewResults(testResults);
398
+ this.isRunningTestableSuitesState.complete();
399
+ } catch (error) {
400
+ assertErrorThrown(error);
401
+ this.editorStore.applicationStore.notificationService.notifyError(error);
402
+ this.isRunningTestableSuitesState.fail();
403
+ } finally {
404
+ this.selectedTestSuite?.testStates.forEach((t) =>
405
+ t.runningTestAction.complete(),
406
+ );
407
+ }
408
+ }
307
409
  }
@@ -27,7 +27,6 @@ import {
27
27
  type GenericTypeReference,
28
28
  type TaggedValue,
29
29
  type StereotypeReference,
30
- GenericType,
31
30
  type Type,
32
31
  type Multiplicity,
33
32
  type Stereotype,
@@ -48,7 +47,13 @@ import {
48
47
  type Unit,
49
48
  type RawLambda,
50
49
  type Association,
50
+ type INTERNAL__UnknownFunctionActivator,
51
+ type FunctionStoreTestData,
52
+ type ObserverContext,
53
+ type FunctionTestSuite,
51
54
  type AggregationKind,
55
+ type EmbeddedData,
56
+ GenericType,
52
57
  Class,
53
58
  observe_Enum,
54
59
  observe_DerivedProperty,
@@ -66,7 +71,8 @@ import {
66
71
  observe_RawLambda,
67
72
  isStubbed_PackageableElement,
68
73
  getOtherAssociatedProperty,
69
- type INTERNAL__UnknownFunctionActivator,
74
+ observe_EmbeddedData,
75
+ observe_FunctionTestSuite,
70
76
  } from '@finos/legend-graph';
71
77
 
72
78
  // --------------------------------------------- Packageable Element -------------------------------------
@@ -383,6 +389,32 @@ export const INTERNAL__UnknownFunctionActivator_setContent = action(
383
389
  },
384
390
  );
385
391
 
392
+ export const functionTestable_setEmbeddedData = action(
393
+ (
394
+ store: FunctionStoreTestData,
395
+ embeddedData: EmbeddedData,
396
+ observerContext: ObserverContext,
397
+ ): void => {
398
+ store.data = observe_EmbeddedData(embeddedData, observerContext);
399
+ },
400
+ );
401
+
402
+ export const functionTestable_deleteDataStore = action(
403
+ (suite: FunctionTestSuite, val: FunctionStoreTestData): void => {
404
+ deleteEntry(suite.testData ?? [], val);
405
+ },
406
+ );
407
+
408
+ export const function_addTestSuite = action(
409
+ (
410
+ _func: ConcreteFunctionDefinition,
411
+ val: FunctionTestSuite,
412
+ context: ObserverContext,
413
+ ): void => {
414
+ addUniqueEntry(_func.tests, observe_FunctionTestSuite(val, context));
415
+ },
416
+ );
417
+
386
418
  // --------------------------------------------- Enumeration -------------------------------------
387
419
 
388
420
  export const enum_setName = action((val: Enum, value: string): void => {
@@ -21,9 +21,11 @@ import {
21
21
  type TestAssertion,
22
22
  type TestSuite,
23
23
  type ObserverContext,
24
+ type Test,
24
25
  observe_TestAssertion,
25
26
  observe_ExternalFormatData,
26
27
  observe_AtomicTest,
28
+ type Testable,
27
29
  } from '@finos/legend-graph';
28
30
  import { addUniqueEntry, deleteEntry } from '@finos/legend-shared';
29
31
  import { action } from 'mobx';
@@ -64,7 +66,7 @@ export const testSuite_setId = action((test: TestSuite, val: string): void => {
64
66
  });
65
67
 
66
68
  export const testable_setId = action(
67
- (test: TestSuite | TestAssertion | AtomicTest, val: string): void => {
69
+ (test: Test | AtomicTest, val: string): void => {
68
70
  test.id = val;
69
71
  },
70
72
  );
@@ -75,6 +77,12 @@ export const testSuite_deleteTest = action(
75
77
  },
76
78
  );
77
79
 
80
+ export const testable_deleteTest = action(
81
+ (testable: Testable, val: Test): void => {
82
+ deleteEntry(testable.tests, val);
83
+ },
84
+ );
85
+
78
86
  export const testSuite_addTest = action(
79
87
  (
80
88
  test: TestSuite,
package/tsconfig.json CHANGED
@@ -89,11 +89,11 @@
89
89
  "./src/stores/editor/editor-state/element-editor-state/ElementExternalFormatGenerationState.ts",
90
90
  "./src/stores/editor/editor-state/element-editor-state/ElementFileGenerationState.ts",
91
91
  "./src/stores/editor/editor-state/element-editor-state/FileGenerationEditorState.ts",
92
- "./src/stores/editor/editor-state/element-editor-state/FunctionActivatorBuilderState.ts",
93
- "./src/stores/editor/editor-state/element-editor-state/FunctionActivatorPromoteState.ts",
92
+ "./src/stores/editor/editor-state/element-editor-state/FunctionActivatorState.ts",
94
93
  "./src/stores/editor/editor-state/element-editor-state/FunctionEditorState.ts",
95
94
  "./src/stores/editor/editor-state/element-editor-state/ProtocolValueBuilderState.ts",
96
95
  "./src/stores/editor/editor-state/element-editor-state/RuntimeEditorState.ts",
96
+ "./src/stores/editor/editor-state/element-editor-state/ToDelete_FunctionActivatorBuilderState.ts",
97
97
  "./src/stores/editor/editor-state/element-editor-state/UMLEditorState.ts",
98
98
  "./src/stores/editor/editor-state/element-editor-state/connection/ConnectionEditorState.ts",
99
99
  "./src/stores/editor/editor-state/element-editor-state/connection/DatabaseBuilderState.ts",
@@ -107,6 +107,7 @@
107
107
  "./src/stores/editor/editor-state/element-editor-state/external-format/DSL_ExternalFormat_SchemaSetEditorState.ts",
108
108
  "./src/stores/editor/editor-state/element-editor-state/function-activator/INTERNAL__UnknownFunctionActivatorEditorState.ts",
109
109
  "./src/stores/editor/editor-state/element-editor-state/function-activator/SnowflakeAppFunctionActivatorEditorState.ts",
110
+ "./src/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.ts",
110
111
  "./src/stores/editor/editor-state/element-editor-state/mapping/DEPRECATED__MappingTestState.ts",
111
112
  "./src/stores/editor/editor-state/element-editor-state/mapping/FlatDataInstanceSetImplementationState.ts",
112
113
  "./src/stores/editor/editor-state/element-editor-state/mapping/MappingEditorState.ts",
@@ -230,6 +231,7 @@
230
231
  "./src/components/editor/editor-group/function-activator/FunctionEditor.tsx",
231
232
  "./src/components/editor/editor-group/function-activator/INTERNAL__UnknownFunctionActivatorEdtior.tsx",
232
233
  "./src/components/editor/editor-group/function-activator/SnowflakeAppFunctionActivatorEditor.tsx",
234
+ "./src/components/editor/editor-group/function-activator/testable/FunctionTestableEditor.tsx",
233
235
  "./src/components/editor/editor-group/mapping-editor/ClassMappingEditor.tsx",
234
236
  "./src/components/editor/editor-group/mapping-editor/DEPRECATED__MappingTestEditor.tsx",
235
237
  "./src/components/editor/editor-group/mapping-editor/EnumerationMappingEditor.tsx",
@@ -1 +0,0 @@
1
- {"version":3,"file":"FunctionActivatorBuilderState.d.ts","sourceRoot":"","sources":["../../../../../src/stores/editor/editor-state/element-editor-state/FunctionActivatorBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,kCAAkC,EAClC,KAAK,8BAA8B,EAIpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAC;AAI9B,eAAO,MAAM,iCAAiC,UAS7C,CAAC;AAEF,qBAAa,6BAA6B;IACxC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAElD,6BAA6B,CAAC,EAAE,8BAA8B,GAAG,SAAS,CAAC;IAC3E,0CAA0C,CAAC,EACvC,yBAAyB,GACzB,SAAS,CAAC;IACd,aAAa,SAAuB;IACpC,iBAAiB,CAAC,EAAE,kCAAkC,GAAG,SAAS,CAAC;gBAEvD,mBAAmB,EAAE,mBAAmB;IAgBpD,IAAI,YAAY,IAAI,OAAO,CAS1B;IAED,IAAI,OAAO,IAAI,OAAO,CAKrB;IAED,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOnC,gCAAgC,CAC9B,GAAG,EAAE,8BAA8B,GAAG,SAAS,GAC9C,IAAI;IAmDN,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC;CAqB/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FunctionActivatorBuilderState.js","sourceRoot":"","sources":["../../../../../src/stores/editor/editor-state/element-editor-state/FunctionActivatorBuilderState.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FunctionActivatorPromoteState.d.ts","sourceRoot":"","sources":["../../../../../src/stores/editor/editor-state/element-editor-state/FunctionActivatorPromoteState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EAOvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAKxD,qBAAa,6BAA6B;IACxC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAElD,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,UAAS;IAC5B,6BAA6B,UAAS;IACtC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEpB,mBAAmB,EAAE,mBAAmB;IAkBpD,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI1C,gCAAgC,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAIpD,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI7C,wBAAwB,IAAI,IAAI;IAIhC,yBAAyB,IAAI,IAAI;IAIjC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAItC,uBAAuB,CACrB,eAAe,EAAE,0BAA0B,GAC1C,iBAAiB,GAAG,SAAS;IAuB/B,OAAO,CAAC,eAAe,EAAE,0BAA0B,GAAG,WAAW,CAAC,IAAI,CAAC;CAqBzE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FunctionActivatorPromoteState.js","sourceRoot":"","sources":["../../../../../src/stores/editor/editor-state/element-editor-state/FunctionActivatorPromoteState.ts"],"names":[],"mappings":"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"}