@finos/legend-application-studio 28.19.25 → 28.19.27
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.
- package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.d.ts.map +1 -1
- package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.js +48 -5
- package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.js.map +1 -1
- package/lib/components/editor/editor-group/testable/TestableSharedComponents.d.ts.map +1 -1
- package/lib/components/editor/editor-group/testable/TestableSharedComponents.js +74 -3
- package/lib/components/editor/editor-group/testable/TestableSharedComponents.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.d.ts +1 -0
- package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js +26 -0
- package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/testable/TestAssertionState.d.ts +5 -0
- package/lib/stores/editor/editor-state/element-editor-state/testable/TestAssertionState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/testable/TestAssertionState.js +20 -0
- package/lib/stores/editor/editor-state/element-editor-state/testable/TestAssertionState.js.map +1 -1
- package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.d.ts +2 -1
- package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.d.ts.map +1 -1
- package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js +27 -4
- package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js.map +1 -1
- package/package.json +9 -9
- package/src/components/editor/editor-group/dataProduct/DataPoductEditor.tsx +138 -30
- package/src/components/editor/editor-group/testable/TestableSharedComponents.tsx +202 -2
- package/src/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.ts +26 -0
- package/src/stores/editor/editor-state/element-editor-state/testable/TestAssertionState.ts +25 -1
- package/src/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.ts +34 -10
@@ -57,17 +57,40 @@ export const dataProduct_setSupportInfoIfAbsent = action((product) => {
|
|
57
57
|
product.supportInfo = observe_SupportInfo(new SupportInfo());
|
58
58
|
}
|
59
59
|
});
|
60
|
+
export const supportInfo_setLinkLabel = action((link, label) => {
|
61
|
+
link.label = label;
|
62
|
+
});
|
60
63
|
export const supportInfo_setDocumentationUrl = action((supportInfo, documentationUrl) => {
|
61
|
-
supportInfo.documentation
|
64
|
+
if (!supportInfo.documentation) {
|
65
|
+
supportInfo.documentation = observer_DataProductLink(new DataProductLink(documentationUrl));
|
66
|
+
}
|
67
|
+
else {
|
68
|
+
supportInfo.documentation.url = documentationUrl;
|
69
|
+
}
|
62
70
|
});
|
63
71
|
export const supportInfo_setWebsite = action((supportInfo, website) => {
|
64
|
-
supportInfo.website
|
72
|
+
if (!supportInfo.website) {
|
73
|
+
supportInfo.website = observer_DataProductLink(new DataProductLink(website));
|
74
|
+
}
|
75
|
+
else {
|
76
|
+
supportInfo.website.url = website;
|
77
|
+
}
|
65
78
|
});
|
66
79
|
export const supportInfo_setFaqUrl = action((supportInfo, faqUrl) => {
|
67
|
-
supportInfo.faqUrl
|
80
|
+
if (!supportInfo.faqUrl) {
|
81
|
+
supportInfo.faqUrl = observer_DataProductLink(new DataProductLink(faqUrl));
|
82
|
+
}
|
83
|
+
else {
|
84
|
+
supportInfo.faqUrl.url = faqUrl;
|
85
|
+
}
|
68
86
|
});
|
69
87
|
export const supportInfo_setSupportUrl = action((supportInfo, supportUrl) => {
|
70
|
-
supportInfo.supportUrl
|
88
|
+
if (!supportInfo.supportUrl) {
|
89
|
+
supportInfo.supportUrl = observer_DataProductLink(new DataProductLink(supportUrl));
|
90
|
+
}
|
91
|
+
else {
|
92
|
+
supportInfo.supportUrl.url = supportUrl;
|
93
|
+
}
|
71
94
|
});
|
72
95
|
export const supportInfo_addEmail = action((supportInfo, email) => {
|
73
96
|
addUniqueEntry(supportInfo.emails, observe_Email(email));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DSL_DataProduct_GraphModifierHelper.js","sourceRoot":"","sources":["../../../src/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"DSL_DataProduct_GraphModifierHelper.js","sourceRoot":"","sources":["../../../src/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@finos/legend-application-studio",
|
3
|
-
"version": "28.19.
|
3
|
+
"version": "28.19.27",
|
4
4
|
"description": "Legend Studio application core",
|
5
5
|
"keywords": [
|
6
6
|
"legend",
|
@@ -45,15 +45,15 @@
|
|
45
45
|
"test:watch": "jest --watch"
|
46
46
|
},
|
47
47
|
"dependencies": {
|
48
|
-
"@finos/legend-application": "16.0.
|
49
|
-
"@finos/legend-art": "7.1.
|
50
|
-
"@finos/legend-code-editor": "2.0.
|
51
|
-
"@finos/legend-data-cube": "0.3.
|
52
|
-
"@finos/legend-graph": "32.1.
|
53
|
-
"@finos/legend-lego": "2.0.
|
54
|
-
"@finos/legend-query-builder": "4.17.
|
48
|
+
"@finos/legend-application": "16.0.63",
|
49
|
+
"@finos/legend-art": "7.1.117",
|
50
|
+
"@finos/legend-code-editor": "2.0.109",
|
51
|
+
"@finos/legend-data-cube": "0.3.15",
|
52
|
+
"@finos/legend-graph": "32.1.67",
|
53
|
+
"@finos/legend-lego": "2.0.116",
|
54
|
+
"@finos/legend-query-builder": "4.17.27",
|
55
55
|
"@finos/legend-server-depot": "6.0.98",
|
56
|
-
"@finos/legend-server-lakehouse": "0.1.
|
56
|
+
"@finos/legend-server-lakehouse": "0.1.6",
|
57
57
|
"@finos/legend-server-sdlc": "5.3.64",
|
58
58
|
"@finos/legend-server-showcase": "0.2.60",
|
59
59
|
"@finos/legend-shared": "11.0.19",
|
@@ -49,7 +49,6 @@ import {
|
|
49
49
|
MenuContentItem,
|
50
50
|
CaretDownIcon,
|
51
51
|
WarningIcon,
|
52
|
-
PanelFormSection,
|
53
52
|
useDragPreviewLayer,
|
54
53
|
DragPreviewLayer,
|
55
54
|
PanelDnDEntry,
|
@@ -109,6 +108,7 @@ import {
|
|
109
108
|
supportInfo_deleteEmail,
|
110
109
|
accessPoint_setClassification,
|
111
110
|
accessPoint_setReproducible,
|
111
|
+
supportInfo_setLinkLabel,
|
112
112
|
} from '../../../../stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js';
|
113
113
|
import { LEGEND_STUDIO_TEST_ID } from '../../../../__lib__/LegendStudioTesting.js';
|
114
114
|
import { LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY } from '../../../../__lib__/LegendStudioApplicationNavigationContext.js';
|
@@ -1413,8 +1413,12 @@ const HomeTab = observer(
|
|
1413
1413
|
);
|
1414
1414
|
|
1415
1415
|
const SupportTab = observer(
|
1416
|
-
(props: {
|
1417
|
-
|
1416
|
+
(props: {
|
1417
|
+
dataProductEditorState: DataProductEditorState;
|
1418
|
+
isReadOnly: boolean;
|
1419
|
+
}) => {
|
1420
|
+
const { dataProductEditorState, isReadOnly } = props;
|
1421
|
+
const product = dataProductEditorState.product;
|
1418
1422
|
const updateSupportInfoDocumentationUrl = (
|
1419
1423
|
val: string | undefined,
|
1420
1424
|
): void => {
|
@@ -1422,6 +1426,16 @@ const SupportTab = observer(
|
|
1422
1426
|
if (product.supportInfo) {
|
1423
1427
|
supportInfo_setDocumentationUrl(product.supportInfo, val ?? '');
|
1424
1428
|
}
|
1429
|
+
if (!val) {
|
1430
|
+
dataProductEditorState.clearSupportInfo();
|
1431
|
+
}
|
1432
|
+
};
|
1433
|
+
const updateSupportInfoDocumentationLabel = (
|
1434
|
+
val: string | undefined,
|
1435
|
+
): void => {
|
1436
|
+
if (product.supportInfo?.documentation) {
|
1437
|
+
supportInfo_setLinkLabel(product.supportInfo.documentation, val);
|
1438
|
+
}
|
1425
1439
|
};
|
1426
1440
|
|
1427
1441
|
const updateSupportInfoWebsite = (val: string | undefined): void => {
|
@@ -1429,6 +1443,14 @@ const SupportTab = observer(
|
|
1429
1443
|
if (product.supportInfo) {
|
1430
1444
|
supportInfo_setWebsite(product.supportInfo, val ?? '');
|
1431
1445
|
}
|
1446
|
+
if (!val) {
|
1447
|
+
dataProductEditorState.clearSupportInfo();
|
1448
|
+
}
|
1449
|
+
};
|
1450
|
+
const updateSupportInfoWebsiteLabel = (val: string | undefined): void => {
|
1451
|
+
if (product.supportInfo?.website) {
|
1452
|
+
supportInfo_setLinkLabel(product.supportInfo.website, val);
|
1453
|
+
}
|
1432
1454
|
};
|
1433
1455
|
|
1434
1456
|
const updateSupportInfoFaqUrl = (val: string | undefined): void => {
|
@@ -1436,6 +1458,14 @@ const SupportTab = observer(
|
|
1436
1458
|
if (product.supportInfo) {
|
1437
1459
|
supportInfo_setFaqUrl(product.supportInfo, val ?? '');
|
1438
1460
|
}
|
1461
|
+
if (!val) {
|
1462
|
+
dataProductEditorState.clearSupportInfo();
|
1463
|
+
}
|
1464
|
+
};
|
1465
|
+
const updateSupportInfoFaqLabel = (val: string | undefined): void => {
|
1466
|
+
if (product.supportInfo?.faqUrl) {
|
1467
|
+
supportInfo_setLinkLabel(product.supportInfo.faqUrl, val);
|
1468
|
+
}
|
1439
1469
|
};
|
1440
1470
|
|
1441
1471
|
const updateSupportInfoSupportUrl = (val: string | undefined): void => {
|
@@ -1443,6 +1473,26 @@ const SupportTab = observer(
|
|
1443
1473
|
if (product.supportInfo) {
|
1444
1474
|
supportInfo_setSupportUrl(product.supportInfo, val ?? '');
|
1445
1475
|
}
|
1476
|
+
if (!val) {
|
1477
|
+
dataProductEditorState.clearSupportInfo();
|
1478
|
+
}
|
1479
|
+
const supportLabelOptions = ['Keystone', 'Jira', 'ServiceNow'];
|
1480
|
+
supportLabelOptions.forEach((derivedLabel) => {
|
1481
|
+
if (
|
1482
|
+
val?.includes(derivedLabel.toLowerCase()) &&
|
1483
|
+
product.supportInfo?.supportUrl
|
1484
|
+
) {
|
1485
|
+
supportInfo_setLinkLabel(
|
1486
|
+
product.supportInfo.supportUrl,
|
1487
|
+
derivedLabel,
|
1488
|
+
);
|
1489
|
+
}
|
1490
|
+
});
|
1491
|
+
};
|
1492
|
+
const updateSupportInfoSupportLabel = (val: string | undefined): void => {
|
1493
|
+
if (product.supportInfo?.supportUrl) {
|
1494
|
+
supportInfo_setLinkLabel(product.supportInfo.supportUrl, val);
|
1495
|
+
}
|
1446
1496
|
};
|
1447
1497
|
|
1448
1498
|
const handleSupportInfoEmailAdd = (
|
@@ -1459,6 +1509,9 @@ const SupportTab = observer(
|
|
1459
1509
|
if (product.supportInfo) {
|
1460
1510
|
supportInfo_deleteEmail(product.supportInfo, email);
|
1461
1511
|
}
|
1512
|
+
if (product.supportInfo?.emails.length === 0) {
|
1513
|
+
dataProductEditorState.clearSupportInfo();
|
1514
|
+
}
|
1462
1515
|
};
|
1463
1516
|
|
1464
1517
|
const SupportEmailComponent = observer(
|
@@ -1527,37 +1580,87 @@ const SupportTab = observer(
|
|
1527
1580
|
);
|
1528
1581
|
|
1529
1582
|
return (
|
1530
|
-
<
|
1583
|
+
<div className="data-product-editor__support-info">
|
1531
1584
|
<div className="panel__content__form__section__header__label">
|
1532
1585
|
Support Information
|
1533
1586
|
</div>
|
1534
1587
|
<div className="panel__content__form__section__header__prompt">
|
1535
1588
|
Configure support information for this Lakehouse Data Product.
|
1536
1589
|
</div>
|
1537
|
-
<
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
1553
|
-
|
1554
|
-
|
1555
|
-
|
1556
|
-
|
1557
|
-
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1590
|
+
<div className="data-product-editor__support-info__link-container">
|
1591
|
+
<PanelFormTextField
|
1592
|
+
className="data-product-editor__support-info__input"
|
1593
|
+
name="Documentation"
|
1594
|
+
prompt="URL"
|
1595
|
+
value={product.supportInfo?.documentation?.url ?? ''}
|
1596
|
+
update={updateSupportInfoDocumentationUrl}
|
1597
|
+
placeholder="Documentation URL"
|
1598
|
+
/>
|
1599
|
+
<PanelFormTextField
|
1600
|
+
className="data-product-editor__support-info__input"
|
1601
|
+
name=""
|
1602
|
+
prompt="Label"
|
1603
|
+
isReadOnly={!Boolean(product.supportInfo?.documentation)}
|
1604
|
+
value={product.supportInfo?.documentation?.label ?? ''}
|
1605
|
+
update={updateSupportInfoDocumentationLabel}
|
1606
|
+
placeholder="Documentation Label"
|
1607
|
+
/>
|
1608
|
+
</div>
|
1609
|
+
|
1610
|
+
<div className="data-product-editor__support-info__link-container">
|
1611
|
+
<PanelFormTextField
|
1612
|
+
name="Website"
|
1613
|
+
prompt="URL"
|
1614
|
+
value={product.supportInfo?.website?.url ?? ''}
|
1615
|
+
update={updateSupportInfoWebsite}
|
1616
|
+
placeholder="Website URL"
|
1617
|
+
/>
|
1618
|
+
<PanelFormTextField
|
1619
|
+
name=""
|
1620
|
+
prompt="Label"
|
1621
|
+
isReadOnly={!Boolean(product.supportInfo?.website)}
|
1622
|
+
value={product.supportInfo?.website?.label ?? ''}
|
1623
|
+
update={updateSupportInfoWebsiteLabel}
|
1624
|
+
placeholder="Website Label"
|
1625
|
+
/>
|
1626
|
+
</div>
|
1627
|
+
|
1628
|
+
<div className="data-product-editor__support-info__link-container">
|
1629
|
+
<PanelFormTextField
|
1630
|
+
name="FAQ"
|
1631
|
+
prompt="URL"
|
1632
|
+
value={product.supportInfo?.faqUrl?.url}
|
1633
|
+
update={updateSupportInfoFaqUrl}
|
1634
|
+
placeholder="FAQ URL"
|
1635
|
+
/>
|
1636
|
+
<PanelFormTextField
|
1637
|
+
name=""
|
1638
|
+
prompt="Label"
|
1639
|
+
isReadOnly={!Boolean(product.supportInfo?.faqUrl)}
|
1640
|
+
value={product.supportInfo?.faqUrl?.label}
|
1641
|
+
update={updateSupportInfoFaqLabel}
|
1642
|
+
placeholder="FAQ Label"
|
1643
|
+
/>
|
1644
|
+
</div>
|
1645
|
+
|
1646
|
+
<div className="data-product-editor__support-info__link-container">
|
1647
|
+
<PanelFormTextField
|
1648
|
+
name="Support"
|
1649
|
+
prompt="URL"
|
1650
|
+
value={product.supportInfo?.supportUrl?.url ?? ''}
|
1651
|
+
update={updateSupportInfoSupportUrl}
|
1652
|
+
placeholder="Support URL"
|
1653
|
+
/>
|
1654
|
+
<PanelFormTextField
|
1655
|
+
name=""
|
1656
|
+
prompt="Label"
|
1657
|
+
isReadOnly={!Boolean(product.supportInfo?.supportUrl)}
|
1658
|
+
value={product.supportInfo?.supportUrl?.label}
|
1659
|
+
update={updateSupportInfoSupportLabel}
|
1660
|
+
placeholder="Support Label"
|
1661
|
+
/>
|
1662
|
+
</div>
|
1663
|
+
|
1561
1664
|
<ListEditor
|
1562
1665
|
title="Emails"
|
1563
1666
|
items={product.supportInfo?.emails}
|
@@ -1568,7 +1671,7 @@ const SupportTab = observer(
|
|
1568
1671
|
isReadOnly={isReadOnly}
|
1569
1672
|
emptyMessage="No emails specified"
|
1570
1673
|
/>
|
1571
|
-
</
|
1674
|
+
</div>
|
1572
1675
|
);
|
1573
1676
|
},
|
1574
1677
|
);
|
@@ -1611,7 +1714,12 @@ export const DataProductEditor = observer(() => {
|
|
1611
1714
|
case DATA_PRODUCT_TAB.HOME:
|
1612
1715
|
return <HomeTab product={product} isReadOnly={isReadOnly} />;
|
1613
1716
|
case DATA_PRODUCT_TAB.SUPPORT:
|
1614
|
-
return
|
1717
|
+
return (
|
1718
|
+
<SupportTab
|
1719
|
+
dataProductEditorState={dataProductEditorState}
|
1720
|
+
isReadOnly={isReadOnly}
|
1721
|
+
/>
|
1722
|
+
);
|
1615
1723
|
case DATA_PRODUCT_TAB.APG:
|
1616
1724
|
return (
|
1617
1725
|
<AccessPointGroupTab
|
@@ -60,6 +60,7 @@ import {
|
|
60
60
|
type TestAssertionEditorState,
|
61
61
|
type TestAssertionState,
|
62
62
|
EqualToAssertionState,
|
63
|
+
EqualToAssertFailState,
|
63
64
|
} from '../../../../stores/editor/editor-state/element-editor-state/testable/TestAssertionState.js';
|
64
65
|
import { externalFormatData_setData } from '../../../../stores/graph-modifier/DSL_Data_GraphModifierHelper.js';
|
65
66
|
import { TESTABLE_RESULT } from '../../../../stores/editor/sidebar-state/testable/GlobalTestRunnerState.js';
|
@@ -328,6 +329,26 @@ const EqualToJsonAssertFailViewer = observer(
|
|
328
329
|
const expected = equalToJsonAssertFailState.status.expected;
|
329
330
|
const actual = equalToJsonAssertFailState.status.actual;
|
330
331
|
|
332
|
+
const acceptActualValue = (): void => {
|
333
|
+
try {
|
334
|
+
const assertionState =
|
335
|
+
equalToJsonAssertFailState.resultState.assertionState;
|
336
|
+
if (
|
337
|
+
assertionState.assertionState instanceof EqualToJsonAssertionState
|
338
|
+
) {
|
339
|
+
assertionState.assertionState.setExpectedValue(actual);
|
340
|
+
applicationStore.notificationService.notifySuccess(
|
341
|
+
'Expected value updated successfully!',
|
342
|
+
);
|
343
|
+
close();
|
344
|
+
}
|
345
|
+
} catch (error) {
|
346
|
+
applicationStore.notificationService.notifyError(
|
347
|
+
`Failed to update expected value: ${error instanceof Error ? error.message : String(error)}`,
|
348
|
+
);
|
349
|
+
}
|
350
|
+
};
|
351
|
+
|
331
352
|
return (
|
332
353
|
<>
|
333
354
|
<div className="equal-to-json-editor__message" onClick={open}>
|
@@ -367,6 +388,10 @@ const EqualToJsonAssertFailViewer = observer(
|
|
367
388
|
<JSONDiffView from={expected} to={actual} lossless={true} />
|
368
389
|
</ModalBody>
|
369
390
|
<ModalFooter>
|
391
|
+
<ModalFooterButton
|
392
|
+
text="Accept Actual Result"
|
393
|
+
onClick={acceptActualValue}
|
394
|
+
/>
|
370
395
|
<ModalFooterButton
|
371
396
|
text="Close"
|
372
397
|
onClick={close}
|
@@ -381,6 +406,116 @@ const EqualToJsonAssertFailViewer = observer(
|
|
381
406
|
},
|
382
407
|
);
|
383
408
|
|
409
|
+
const EqualToAssertFailViewer = observer(
|
410
|
+
(props: { equalToAssertFailState: EqualToAssertFailState }) => {
|
411
|
+
const { equalToAssertFailState } = props;
|
412
|
+
const applicationStore =
|
413
|
+
equalToAssertFailState.resultState.editorStore.applicationStore;
|
414
|
+
const open = (): void => equalToAssertFailState.setDiffModal(true);
|
415
|
+
const close = (): void => equalToAssertFailState.setDiffModal(false);
|
416
|
+
|
417
|
+
const statusMessage = equalToAssertFailState.status.message ?? '';
|
418
|
+
const extractValues = (message: string) => {
|
419
|
+
const expectedMatch = message.match(
|
420
|
+
/expected:\s*(?<expected>.*?)(?:\s+Found\s*:|$)/s,
|
421
|
+
);
|
422
|
+
const actualMatch = message.match(/Found\s*:\s*(?<actual>.*?)$/s);
|
423
|
+
|
424
|
+
return {
|
425
|
+
expected: expectedMatch?.groups?.expected?.trim() ?? 'N/A',
|
426
|
+
actual: actualMatch?.groups?.actual?.trim() ?? 'N/A',
|
427
|
+
};
|
428
|
+
};
|
429
|
+
|
430
|
+
const { expected, actual } = extractValues(statusMessage);
|
431
|
+
|
432
|
+
const acceptActualValue = (): void => {
|
433
|
+
const assertionState = equalToAssertFailState.resultState.assertionState;
|
434
|
+
if (assertionState.assertionState instanceof EqualToAssertionState) {
|
435
|
+
try {
|
436
|
+
const editorStore = assertionState.editorStore;
|
437
|
+
const graph = editorStore.graphManagerState.graph;
|
438
|
+
|
439
|
+
const newValueSpec = buildDefaultInstanceValue(
|
440
|
+
graph,
|
441
|
+
PrimitiveType.STRING,
|
442
|
+
editorStore.changeDetectionState.observerContext,
|
443
|
+
true,
|
444
|
+
);
|
445
|
+
(newValueSpec as PrimitiveInstanceValue).values = [actual];
|
446
|
+
|
447
|
+
assertionState.assertionState.updateValueSpec(newValueSpec);
|
448
|
+
|
449
|
+
applicationStore.notificationService.notifySuccess(
|
450
|
+
'Expected value updated successfully!',
|
451
|
+
);
|
452
|
+
close();
|
453
|
+
} catch (error) {
|
454
|
+
applicationStore.notificationService.notifyError(
|
455
|
+
`Failed to update expected value: ${error instanceof Error ? error.message : String(error)}`,
|
456
|
+
);
|
457
|
+
}
|
458
|
+
} else {
|
459
|
+
applicationStore.notificationService.notifyError(
|
460
|
+
'Unable to access assertion state for this assertion type',
|
461
|
+
);
|
462
|
+
}
|
463
|
+
};
|
464
|
+
|
465
|
+
return (
|
466
|
+
<>
|
467
|
+
<div className="equal-to-json-editor__message" onClick={open}>
|
468
|
+
{`<Click to see difference>`}
|
469
|
+
</div>
|
470
|
+
{equalToAssertFailState.diffModal && (
|
471
|
+
<Dialog
|
472
|
+
open={equalToAssertFailState.diffModal}
|
473
|
+
onClose={close}
|
474
|
+
classes={{
|
475
|
+
root: 'editor-modal__root-container',
|
476
|
+
container: 'editor-modal__container',
|
477
|
+
paper: 'editor-modal__content',
|
478
|
+
}}
|
479
|
+
>
|
480
|
+
<Modal
|
481
|
+
darkMode={
|
482
|
+
!applicationStore.layoutService
|
483
|
+
.TEMPORARY__isLightColorThemeEnabled
|
484
|
+
}
|
485
|
+
className="editor-modal"
|
486
|
+
>
|
487
|
+
<ModalHeader>
|
488
|
+
<div className="equal-to-json-result__diff__summary">
|
489
|
+
<div className="equal-to-json-result__diff__header__label">
|
490
|
+
expected
|
491
|
+
</div>
|
492
|
+
<div className="equal-to-json-result__diff__icon">
|
493
|
+
<CompareIcon />
|
494
|
+
</div>
|
495
|
+
<div className="equal-to-json-result__diff__header__label">
|
496
|
+
actual
|
497
|
+
</div>
|
498
|
+
</div>
|
499
|
+
</ModalHeader>
|
500
|
+
|
501
|
+
<ModalBody className="test-assertion-diff-modal__body">
|
502
|
+
<JSONDiffView from={expected} to={actual} lossless={false} />
|
503
|
+
</ModalBody>
|
504
|
+
<ModalFooter>
|
505
|
+
<ModalFooterButton
|
506
|
+
text="Accept Actual Result"
|
507
|
+
onClick={acceptActualValue}
|
508
|
+
/>
|
509
|
+
<ModalFooterButton text="Close" onClick={close} />
|
510
|
+
</ModalFooter>
|
511
|
+
</Modal>
|
512
|
+
</Dialog>
|
513
|
+
)}
|
514
|
+
</>
|
515
|
+
);
|
516
|
+
},
|
517
|
+
);
|
518
|
+
|
384
519
|
const TestErrorViewer = observer((props: { testError: TestError }) => {
|
385
520
|
const { testError } = props;
|
386
521
|
return (
|
@@ -395,16 +530,81 @@ const TestErrorViewer = observer((props: { testError: TestError }) => {
|
|
395
530
|
const AssertFailViewer = observer(
|
396
531
|
(props: { assertFailState: AssertFailState }) => {
|
397
532
|
const { assertFailState } = props;
|
533
|
+
const applicationStore = useApplicationStore();
|
534
|
+
const [showGenericDiffModal, setShowGenericDiffModal] = useState(false);
|
535
|
+
const message = assertFailState.status.message ?? '';
|
536
|
+
const isGenericEqualToFail =
|
537
|
+
message.includes('expected:') && message.includes('Found :');
|
538
|
+
|
539
|
+
const extractValues = (msg: string) => {
|
540
|
+
const expectedMatch = msg.match(
|
541
|
+
/expected:\s*(?<expected>.*?)(?:\s+Found\s*:|$)/s,
|
542
|
+
);
|
543
|
+
const actualMatch = msg.match(/Found\s*:\s*(?<actual>.*?)$/s);
|
544
|
+
|
545
|
+
return {
|
546
|
+
expected: expectedMatch?.groups?.expected?.trim() ?? 'N/A',
|
547
|
+
actual: actualMatch?.groups?.actual?.trim() ?? 'N/A',
|
548
|
+
};
|
549
|
+
};
|
550
|
+
const { expected, actual } = extractValues(message);
|
551
|
+
|
398
552
|
return (
|
399
553
|
<>
|
400
554
|
<div className="testable-test-assertion-result__summary-info">
|
401
555
|
{assertFailState.status.message}
|
402
556
|
</div>
|
403
|
-
{assertFailState instanceof EqualToJsonAssertFailState
|
557
|
+
{assertFailState instanceof EqualToJsonAssertFailState ? (
|
404
558
|
<EqualToJsonAssertFailViewer
|
405
559
|
equalToJsonAssertFailState={assertFailState}
|
406
560
|
/>
|
407
|
-
)
|
561
|
+
) : assertFailState instanceof EqualToAssertFailState ? (
|
562
|
+
<EqualToAssertFailViewer equalToAssertFailState={assertFailState} />
|
563
|
+
) : isGenericEqualToFail ? (
|
564
|
+
<>
|
565
|
+
<div
|
566
|
+
className="equal-to-json-editor__message"
|
567
|
+
onClick={() => setShowGenericDiffModal(true)}
|
568
|
+
>
|
569
|
+
{`<Click to see difference>`}
|
570
|
+
</div>
|
571
|
+
{showGenericDiffModal && (
|
572
|
+
<Dialog
|
573
|
+
open={showGenericDiffModal}
|
574
|
+
onClose={() => setShowGenericDiffModal(false)}
|
575
|
+
classes={{ container: 'search-modal__container' }}
|
576
|
+
PaperProps={{
|
577
|
+
classes: { root: 'search-modal__inner-container' },
|
578
|
+
}}
|
579
|
+
>
|
580
|
+
<Modal
|
581
|
+
darkMode={
|
582
|
+
!applicationStore.layoutService
|
583
|
+
.TEMPORARY__isLightColorThemeEnabled
|
584
|
+
}
|
585
|
+
className="modal--xl"
|
586
|
+
>
|
587
|
+
<ModalHeader>
|
588
|
+
<ModalTitle title="Test Assertion Comparison" />
|
589
|
+
</ModalHeader>
|
590
|
+
<ModalBody>
|
591
|
+
<JSONDiffView
|
592
|
+
from={expected}
|
593
|
+
to={actual}
|
594
|
+
lossless={false}
|
595
|
+
/>
|
596
|
+
</ModalBody>
|
597
|
+
<ModalFooter>
|
598
|
+
<ModalFooterButton
|
599
|
+
text="Close"
|
600
|
+
onClick={() => setShowGenericDiffModal(false)}
|
601
|
+
/>
|
602
|
+
</ModalFooter>
|
603
|
+
</Modal>
|
604
|
+
</Dialog>
|
605
|
+
)}
|
606
|
+
</>
|
607
|
+
) : null}
|
408
608
|
</>
|
409
609
|
);
|
410
610
|
},
|
package/src/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.ts
CHANGED
@@ -558,6 +558,32 @@ export class DataProductEditorState extends ElementEditorState {
|
|
558
558
|
}
|
559
559
|
}
|
560
560
|
|
561
|
+
clearSupportInfo(): void {
|
562
|
+
const supportInfo = this.product.supportInfo;
|
563
|
+
runInAction(() => {
|
564
|
+
//if the url is empty, the label should be too
|
565
|
+
if (supportInfo?.documentation && !supportInfo.documentation.url) {
|
566
|
+
supportInfo.documentation = undefined;
|
567
|
+
} else if (supportInfo?.website && !supportInfo.website.url) {
|
568
|
+
supportInfo.website = undefined;
|
569
|
+
} else if (supportInfo?.faqUrl && !supportInfo.faqUrl.url) {
|
570
|
+
supportInfo.faqUrl = undefined;
|
571
|
+
} else if (supportInfo?.supportUrl && !supportInfo.supportUrl.url) {
|
572
|
+
supportInfo.supportUrl = undefined;
|
573
|
+
}
|
574
|
+
//clear support info section if everything is clear
|
575
|
+
if (
|
576
|
+
!supportInfo?.documentation &&
|
577
|
+
!supportInfo?.website &&
|
578
|
+
!supportInfo?.faqUrl &&
|
579
|
+
!supportInfo?.supportUrl &&
|
580
|
+
supportInfo?.emails.length === 0
|
581
|
+
) {
|
582
|
+
this.product.supportInfo = undefined;
|
583
|
+
}
|
584
|
+
});
|
585
|
+
}
|
586
|
+
|
561
587
|
get product(): DataProduct {
|
562
588
|
return guaranteeType(
|
563
589
|
this.element,
|
@@ -83,6 +83,22 @@ export class AssertFailState extends TestAssertionStatusState {
|
|
83
83
|
}
|
84
84
|
}
|
85
85
|
|
86
|
+
export class EqualToAssertFailState extends AssertFailState {
|
87
|
+
diffModal = false;
|
88
|
+
|
89
|
+
constructor(resultState: TestAssertionResultState, status: AssertionStatus) {
|
90
|
+
super(resultState, status);
|
91
|
+
makeObservable(this, {
|
92
|
+
diffModal: observable,
|
93
|
+
setDiffModal: action,
|
94
|
+
});
|
95
|
+
}
|
96
|
+
|
97
|
+
setDiffModal(val: boolean): void {
|
98
|
+
this.diffModal = val;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
86
102
|
export class EqualToJsonAssertFailState extends AssertFailState {
|
87
103
|
declare status: EqualToJsonAssertFail;
|
88
104
|
diffModal = false;
|
@@ -157,13 +173,21 @@ export class TestAssertionResultState {
|
|
157
173
|
return new EqualToJsonAssertFailState(this, val);
|
158
174
|
}
|
159
175
|
if (val instanceof AssertFail) {
|
176
|
+
if (this.assertionState.assertion instanceof EqualTo) {
|
177
|
+
const message = val.message ?? '';
|
178
|
+
const hasExpectedFoundPattern =
|
179
|
+
message.includes('expected:') && message.includes('Found :');
|
180
|
+
|
181
|
+
if (hasExpectedFoundPattern) {
|
182
|
+
return new EqualToAssertFailState(this, val);
|
183
|
+
}
|
184
|
+
}
|
160
185
|
return new AssertFailState(this, val);
|
161
186
|
}
|
162
187
|
return new UnsupportedAssertionStatusState(this, val);
|
163
188
|
}
|
164
189
|
return undefined;
|
165
190
|
}
|
166
|
-
|
167
191
|
get result(): TESTABLE_RESULT {
|
168
192
|
if (this.assertionState.testState.runningTestAction.isInProgress) {
|
169
193
|
return TESTABLE_RESULT.IN_PROGRESS;
|