@truedat/core 8.12.6 → 8.12.8
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/package.json +4 -4
- package/src/components/AddMemberForm.js +1 -1
- package/src/components/Markdown.js +2 -55
- package/src/components/MarkdownReader.js +59 -0
- package/src/components/UploadJob.js +1 -1
- package/src/components/UploadJobParser.js +1 -1
- package/src/components/__tests__/Alert.spec.js +2 -1
- package/src/components/__tests__/ArrayDecorator.spec.js +2 -2
- package/src/components/__tests__/AvailableFilters.spec.js +2 -1
- package/src/components/__tests__/CardGroupsAccordion.spec.js +5 -4
- package/src/components/__tests__/ColoredEdge.spec.js +1 -1
- package/src/components/__tests__/CommentsLoader.spec.js +2 -1
- package/src/components/__tests__/ConceptNode.spec.js +1 -1
- package/src/components/__tests__/DateFilter.spec.js +2 -1
- package/src/components/__tests__/DateTime.spec.js +2 -2
- package/src/components/__tests__/DomainSearchFilter.spec.js +1 -1
- package/src/components/__tests__/DomainSearchFilterItem.spec.js +1 -1
- package/src/components/__tests__/DropdownMenuItem.spec.js +5 -3
- package/src/components/__tests__/FilterDropdown.spec.js +1 -1
- package/src/components/__tests__/FilterItem.spec.js +2 -1
- package/src/components/__tests__/FilterMultilevelDropdown.spec.js +1 -1
- package/src/components/__tests__/FiltersLoader.spec.js +2 -1
- package/src/components/__tests__/Graph.spec.js +1 -1
- package/src/components/__tests__/GroupActions.spec.js +2 -2
- package/src/components/__tests__/Hierarchy.spec.js +1 -1
- package/src/components/__tests__/HierarchyFilterDropdown.spec.js +1 -1
- package/src/components/__tests__/HierarchySelector.spec.js +2 -1
- package/src/components/__tests__/LineageEdgeRendering.spec.js +39 -34
- package/src/components/__tests__/LineageGroupNode.spec.js +1 -1
- package/src/components/__tests__/Loading.spec.js +1 -1
- package/src/components/__tests__/Markdown.spec.js +1 -1
- package/src/components/__tests__/OptionGroup.spec.js +2 -1
- package/src/components/__tests__/OriginLabel.spec.js +15 -13
- package/src/components/__tests__/Pagination.spec.js +2 -1
- package/src/components/__tests__/SafeLink.spec.js +1 -1
- package/src/components/__tests__/SearchDateFilter.spec.js +1 -1
- package/src/components/__tests__/SearchFilterDropdown.spec.js +2 -1
- package/src/components/__tests__/SearchInput.spec.js +2 -1
- package/src/components/__tests__/StructureFilterItem.spec.js +2 -1
- package/src/components/__tests__/SystemsLoader.spec.js +2 -1
- package/src/components/__tests__/TemplatesLoader.spec.js +2 -1
- package/src/components/__tests__/TextPromptModal.spec.js +1 -1
- package/src/components/__tests__/TreeSelector.spec.js +2 -1
- package/src/components/__tests__/UploadJobParser.spec.js +4 -1
- package/src/components/graph/ColoredEdge.js +1 -1
- package/src/i18n/components/LangProvider.js +1 -1
- package/src/i18n/components/Languages.js +1 -1
- package/src/i18n/components/MessageForm.js +1 -1
- package/src/i18n/components/Messages.js +2 -2
- package/src/i18n/components/__tests__/EditableCell.spec.js +2 -1
- package/src/router/__tests__/ProtectedRoute.spec.js +2 -1
- package/src/router/__tests__/Unauthorized.spec.js +3 -4
- package/src/search/__tests__/FilterDropdown.spec.js +5 -2
- package/src/search/__tests__/FilterItem.spec.js +2 -1
- package/src/search/__tests__/FilterQueryDropdown.spec.js +2 -1
- package/src/search/__tests__/ModalSaveFilter.spec.js +3 -3
- package/src/search/__tests__/SearchContext.spec.js +1 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@truedat/core",
|
|
3
|
-
"version": "8.12.
|
|
3
|
+
"version": "8.12.8",
|
|
4
4
|
"description": "Truedat Web Core",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"**/*.css",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"@testing-library/jest-dom": "^6.6.3",
|
|
58
58
|
"@testing-library/react": "^16.3.0",
|
|
59
59
|
"@testing-library/user-event": "^14.6.1",
|
|
60
|
-
"@truedat/test": "8.12.
|
|
60
|
+
"@truedat/test": "8.12.8",
|
|
61
61
|
"identity-obj-proxy": "^3.0.0",
|
|
62
62
|
"jest": "^29.7.0",
|
|
63
63
|
"redux-saga-test-plan": "^4.0.6"
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@tiptap/react": "3.31.3",
|
|
72
72
|
"@tiptap/starter-kit": "3.31.3",
|
|
73
73
|
"@xyflow/react": "^12.6.4",
|
|
74
|
-
"axios": "^1.
|
|
74
|
+
"axios": "^1.20.0",
|
|
75
75
|
"dompurify": "^3.4.11",
|
|
76
76
|
"elkjs": "^0.10.0",
|
|
77
77
|
"graphql": "^16.11.0",
|
|
@@ -99,5 +99,5 @@
|
|
|
99
99
|
"swr": "^2.3.3",
|
|
100
100
|
"turndown": "^7.2.2"
|
|
101
101
|
},
|
|
102
|
-
"gitHead": "
|
|
102
|
+
"gitHead": "682b801555be3f898e0502fd70a48ea32110c327"
|
|
103
103
|
}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
accentInsensitivePathOrder,
|
|
10
10
|
lowerDeburrTrim,
|
|
11
11
|
} from "@truedat/core/services/sort";
|
|
12
|
-
import
|
|
12
|
+
import HistoryBackButton from "@truedat/core/components/HistoryBackButton";
|
|
13
13
|
import { getRecipients } from "@truedat/core/selectors";
|
|
14
14
|
import { useAclEntryCreate } from "@truedat/core/hooks/useAclEntries";
|
|
15
15
|
|
|
@@ -7,19 +7,11 @@ import Link from "@tiptap/extension-link";
|
|
|
7
7
|
import Heading from "@tiptap/extension-heading";
|
|
8
8
|
import { Menu, Icon } from "semantic-ui-react";
|
|
9
9
|
import { FormattedMessage } from "react-intl";
|
|
10
|
-
import { Marked } from "marked";
|
|
11
|
-
import DOMPurify from "dompurify";
|
|
12
10
|
import TurndownService from "turndown";
|
|
13
11
|
import TextPromptModal from "./TextPromptModal";
|
|
12
|
+
import { markdownToHtml } from "./MarkdownReader";
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
markdownParser.use({
|
|
17
|
-
tokenizer: {
|
|
18
|
-
code() {
|
|
19
|
-
return undefined;
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
});
|
|
14
|
+
export { MarkdownReader } from "./MarkdownReader";
|
|
23
15
|
|
|
24
16
|
const turndownService = new TurndownService({ headingStyle: "atx" });
|
|
25
17
|
turndownService.addRule("underline", {
|
|
@@ -88,34 +80,6 @@ const validateUrl = (value, allowEmpty = false) => {
|
|
|
88
80
|
return { valid: true, value: urlWithProtocol };
|
|
89
81
|
};
|
|
90
82
|
|
|
91
|
-
function stripOuterCodeFence(text) {
|
|
92
|
-
const match = text.match(/^\s*```(?:markdown)?\s*\n([\s\S]*?)\n\s*```\s*$/);
|
|
93
|
-
return match ? match[1] : text;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function markdownToHtml(markdown) {
|
|
97
|
-
if (!markdown || (typeof markdown === "string" && markdown.trim() === "")) {
|
|
98
|
-
return "<p></p>";
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const cleaned = stripOuterCodeFence(markdown);
|
|
102
|
-
|
|
103
|
-
const withLinks = markdownParser
|
|
104
|
-
.parse(cleaned, { async: false })
|
|
105
|
-
.replace(
|
|
106
|
-
/<a (?=[^>]*href=)/gi,
|
|
107
|
-
`<a target="_blank" rel="noopener noreferrer" `,
|
|
108
|
-
)
|
|
109
|
-
.replace(
|
|
110
|
-
/href="(?!https?:\/\/|mailto:)([^"]+)"/gi,
|
|
111
|
-
(match, url) => `href="https://${url}"`,
|
|
112
|
-
);
|
|
113
|
-
|
|
114
|
-
const safeHtml = DOMPurify.sanitize(withLinks, { ADD_ATTR: ["target"] });
|
|
115
|
-
|
|
116
|
-
return safeHtml;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
83
|
function htmlToMarkdown(html) {
|
|
120
84
|
if (!html || (typeof html === "string" && html.trim() === "")) {
|
|
121
85
|
return "";
|
|
@@ -123,23 +87,6 @@ function htmlToMarkdown(html) {
|
|
|
123
87
|
return turndownService.turndown(html);
|
|
124
88
|
}
|
|
125
89
|
|
|
126
|
-
export function MarkdownReader({ content = "" }) {
|
|
127
|
-
const html = markdownToHtml(content);
|
|
128
|
-
if (!content || (typeof content === "string" && content.trim() === "")) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
return (
|
|
132
|
-
<div
|
|
133
|
-
className="markdown-reader"
|
|
134
|
-
dangerouslySetInnerHTML={{ __html: html }}
|
|
135
|
-
/>
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
MarkdownReader.propTypes = {
|
|
140
|
-
content: PropTypes.string,
|
|
141
|
-
};
|
|
142
|
-
|
|
143
90
|
export function MarkdownEditor({
|
|
144
91
|
value = "",
|
|
145
92
|
onChange = null,
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import PropTypes from "prop-types";
|
|
2
|
+
import { Marked } from "marked";
|
|
3
|
+
import DOMPurify from "dompurify";
|
|
4
|
+
|
|
5
|
+
const markdownParser = new Marked();
|
|
6
|
+
markdownParser.use({
|
|
7
|
+
tokenizer: {
|
|
8
|
+
code() {
|
|
9
|
+
return undefined;
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
function stripOuterCodeFence(text) {
|
|
15
|
+
const match = text.match(/^\s*```(?:markdown)?\s*\n([\s\S]*?)\n\s*```\s*$/);
|
|
16
|
+
return match ? match[1] : text;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function markdownToHtml(markdown) {
|
|
20
|
+
if (!markdown || (typeof markdown === "string" && markdown.trim() === "")) {
|
|
21
|
+
return "<p></p>";
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const cleaned = stripOuterCodeFence(markdown);
|
|
25
|
+
|
|
26
|
+
const withLinks = markdownParser
|
|
27
|
+
.parse(cleaned, { async: false })
|
|
28
|
+
.replace(
|
|
29
|
+
/<a (?=[^>]*href=)/gi,
|
|
30
|
+
`<a target="_blank" rel="noopener noreferrer" `,
|
|
31
|
+
)
|
|
32
|
+
.replace(
|
|
33
|
+
/href="(?!https?:\/\/|mailto:)([^"]+)"/gi,
|
|
34
|
+
(match, url) => `href="https://${url}"`,
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const safeHtml = DOMPurify.sanitize(withLinks, { ADD_ATTR: ["target"] });
|
|
38
|
+
|
|
39
|
+
return safeHtml;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function MarkdownReader({ content = "" }) {
|
|
43
|
+
const html = markdownToHtml(content);
|
|
44
|
+
if (!content || (typeof content === "string" && content.trim() === "")) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return (
|
|
48
|
+
<div
|
|
49
|
+
className="markdown-reader"
|
|
50
|
+
dangerouslySetInnerHTML={{ __html: html }}
|
|
51
|
+
/>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
MarkdownReader.propTypes = {
|
|
56
|
+
content: PropTypes.string,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export { markdownToHtml };
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
Label,
|
|
13
13
|
Button,
|
|
14
14
|
} from "semantic-ui-react";
|
|
15
|
-
import
|
|
15
|
+
import DateTime from "@truedat/core/components/DateTime";
|
|
16
16
|
import { useUploadJob } from "../hooks/useUploadJobs";
|
|
17
17
|
import { StatusPill, ResponseCell } from "./UploadJobParser";
|
|
18
18
|
import UploadJobBreadcrumbs from "./UploadJobBreadcrumbs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
4
|
-
import
|
|
4
|
+
import Label from "semantic-ui-react/dist/commonjs/elements/Label";
|
|
5
5
|
import RuleImplementationLink from "@truedat/dq/components/RuleImplementationLink";
|
|
6
6
|
import StructureNoteLink from "@truedat/dd/components/StructureNoteLink";
|
|
7
7
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { render } from "@truedat/test/
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
2
|
import { waitFor } from "@testing-library/react";
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
import ArrayDecorator from "../ArrayDecorator";
|
|
@@ -36,7 +36,7 @@ describe("<ArrayDecorator />", () => {
|
|
|
36
36
|
|
|
37
37
|
expect(queryAllByRole("listitem")).toEqual([]);
|
|
38
38
|
expect(getByText(showableItems.join(concatenator))).toBeInTheDocument();
|
|
39
|
-
userEvent.hover(
|
|
39
|
+
await userEvent.hover(getByText("+2"));
|
|
40
40
|
await waitFor(() => expect(getByRole("list")).toBeInTheDocument());
|
|
41
41
|
const listItems = queryAllByRole("listitem");
|
|
42
42
|
expect(listItems.length).toBe(2);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import { waitFor } from "@testing-library/react";
|
|
4
5
|
import { AvailableFilters } from "../AvailableFilters";
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { waitFor } from "@testing-library/react";
|
|
2
|
-
import { render
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
3
4
|
import { Card } from "semantic-ui-react";
|
|
4
5
|
import userEvent from "@testing-library/user-event";
|
|
5
|
-
import
|
|
6
|
+
import CardGroupsAccordion from "@truedat/core/components/CardGroupsAccordion";
|
|
6
7
|
|
|
7
8
|
const groups_all_cards_grouped = {
|
|
8
9
|
foo: [
|
|
@@ -136,13 +137,13 @@ describe("<CardGroupsAccordion />", () => {
|
|
|
136
137
|
|
|
137
138
|
const firstTitle = rendered.container.querySelector(".title");
|
|
138
139
|
|
|
139
|
-
userEvent.click(firstTitle);
|
|
140
|
+
await userEvent.click(firstTitle);
|
|
140
141
|
|
|
141
142
|
await waitFor(() => {
|
|
142
143
|
expect(firstTitle.classList.contains("active")).toBeFalsy();
|
|
143
144
|
});
|
|
144
145
|
|
|
145
|
-
userEvent.click(firstTitle);
|
|
146
|
+
await userEvent.click(firstTitle);
|
|
146
147
|
|
|
147
148
|
await waitFor(() => {
|
|
148
149
|
expect(firstTitle.classList.contains("active")).toBeTruthy();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { CommentsLoader } from "../CommentsLoader";
|
|
3
4
|
|
|
4
5
|
describe("<CommentsLoader />", () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fireEvent } from "@testing-library/react";
|
|
2
|
-
import { render } from "@truedat/test/
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
3
|
import ConceptNode from "../graph/ConceptNode";
|
|
4
4
|
import { EdgeHoverContext } from "../graph/ColoredEdge";
|
|
5
5
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { DateFilter } from "../DateFilter";
|
|
3
4
|
|
|
4
5
|
describe("<DateFilter/>", () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { render } from "@truedat/test/
|
|
2
|
-
import
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import DateTime from "@truedat/core/components/DateTime";
|
|
3
3
|
|
|
4
4
|
describe("<DateTime />", () => {
|
|
5
5
|
it("matches the latest snapshot", () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fireEvent } from "@testing-library/react";
|
|
2
2
|
import userEvent from "@testing-library/user-event";
|
|
3
|
-
import { render } from "@truedat/test/
|
|
3
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
4
4
|
import { DomainSearchFilter } from "../DomainSearchFilter";
|
|
5
5
|
|
|
6
6
|
jest.mock("../DomainSearchFilterItem", () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import userEvent from "@testing-library/user-event";
|
|
2
|
-
import { render } from "@truedat/test/
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
3
|
import { DomainSearchFilterItem } from "../DomainSearchFilterItem";
|
|
4
4
|
|
|
5
5
|
describe("<DomainSearchFilterItem />", () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { waitFor } from "@testing-library/react";
|
|
2
2
|
import userEvent from "@testing-library/user-event";
|
|
3
|
-
import { render } from "@truedat/test/
|
|
3
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
4
4
|
import { DropdownMenuItem } from "../DropdownMenuItem";
|
|
5
5
|
|
|
6
6
|
describe("<DropdownMenuItem />", () => {
|
|
@@ -32,7 +32,9 @@ describe("<DropdownMenuItem />", () => {
|
|
|
32
32
|
messages: {},
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
-
userEvent.click(
|
|
35
|
+
await userEvent.click(
|
|
36
|
+
container.querySelector('[class="chevron right icon"]'),
|
|
37
|
+
);
|
|
36
38
|
await waitFor(() => {
|
|
37
39
|
expect(onOpen).toHaveBeenCalledWith(id);
|
|
38
40
|
});
|
|
@@ -53,7 +55,7 @@ describe("<DropdownMenuItem />", () => {
|
|
|
53
55
|
},
|
|
54
56
|
);
|
|
55
57
|
|
|
56
|
-
userEvent.click(getByRole("option"));
|
|
58
|
+
await userEvent.click(getByRole("option"));
|
|
57
59
|
|
|
58
60
|
await waitFor(() => {
|
|
59
61
|
expect(onClick.mock.calls[0][1]).toBe(id);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { FilterItem } from "../FilterItem";
|
|
3
4
|
|
|
4
5
|
describe("<FilterItem/>", () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { waitFor } from "@testing-library/react";
|
|
2
2
|
import userEvent from "@testing-library/user-event";
|
|
3
|
-
import { render } from "@truedat/test/
|
|
3
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
4
4
|
import { FilterMultilevelDropdown } from "../FilterMultilevelDropdown";
|
|
5
5
|
|
|
6
6
|
describe("<FilterMultilevelDropdown />", () => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { FiltersLoader } from "../FiltersLoader";
|
|
3
4
|
|
|
4
5
|
describe("<FiltersLoader/>", () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { act, fireEvent, screen, waitFor } from "@testing-library/react";
|
|
2
|
-
import { render } from "@truedat/test/
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
3
|
import { Graph, getMinZoomForDiagram } from "../Graph";
|
|
4
4
|
|
|
5
5
|
const mockGetNodesBounds = jest.fn();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fireEvent } from "@testing-library/react";
|
|
2
|
-
import { render } from "@truedat/test/
|
|
3
|
-
import
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
|
+
import GroupActions from "@truedat/core/components/GroupActions";
|
|
4
4
|
|
|
5
5
|
const actions = [
|
|
6
6
|
{ key: 1, icon: "edit", text: "First Item", value: 1 },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { waitFor } from "@testing-library/react";
|
|
2
2
|
import userEvent from "@testing-library/user-event";
|
|
3
|
-
import { render } from "@truedat/test/
|
|
3
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
4
4
|
import HierarchyFilterDropdown from "../HierarchyFilterDropdown";
|
|
5
5
|
|
|
6
6
|
const hierarchy = {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import userEvent from "@testing-library/user-event";
|
|
2
2
|
import { waitFor } from "@testing-library/react";
|
|
3
|
-
import { render
|
|
3
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
4
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
4
5
|
import HierarchySelector from "../HierarchySelector";
|
|
5
6
|
|
|
6
7
|
const hierarchy = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { fireEvent } from "@testing-library/react";
|
|
2
|
-
import { render } from "@truedat/test/
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
3
|
import ColoredEdge from "@truedat/core/components/graph/ColoredEdge";
|
|
4
|
-
import { redesignedLineageEdges } from "@truedat/dd/
|
|
4
|
+
import { redesignedLineageEdges } from "@truedat/dd/utils/lineageGraph";
|
|
5
5
|
|
|
6
6
|
jest.mock("@xyflow/react", () => ({
|
|
7
7
|
BaseEdge: ({ className, id, path, style }) => (
|
|
@@ -11,35 +11,40 @@ jest.mock("@xyflow/react", () => ({
|
|
|
11
11
|
getBezierPath: () => ["M 0,0 L 400,0", 200, 0],
|
|
12
12
|
}));
|
|
13
13
|
|
|
14
|
-
it(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
14
|
+
it.each([false, true])(
|
|
15
|
+
"lets the rendered edge respond to hover with focusDimmed=%s",
|
|
16
|
+
(focusDimmed) => {
|
|
17
|
+
const [edge] = redesignedLineageEdges([
|
|
18
|
+
{
|
|
19
|
+
id: "edge",
|
|
20
|
+
source: "a",
|
|
21
|
+
target: "b",
|
|
22
|
+
style: { stroke: "#b0b8c8", strokeWidth: 2, strokeOpacity: 0.95 },
|
|
23
|
+
data: { focusDimmed },
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
26
|
+
const { container } = render(
|
|
27
|
+
<svg>
|
|
28
|
+
<ColoredEdge
|
|
29
|
+
{...edge}
|
|
30
|
+
sourceX={0}
|
|
31
|
+
sourceY={0}
|
|
32
|
+
targetX={400}
|
|
33
|
+
targetY={0}
|
|
34
|
+
sourcePosition="right"
|
|
35
|
+
targetPosition="left"
|
|
36
|
+
/>
|
|
37
|
+
</svg>,
|
|
38
|
+
);
|
|
39
|
+
const path = container.querySelector(".td-graph-edge");
|
|
40
|
+
expect(path.style.strokeWidth).toBe("");
|
|
41
|
+
expect(path.style.strokeOpacity).toBe("");
|
|
42
|
+
expect(path.style.stroke).toContain("var(--td-graph-edge-stroke");
|
|
43
|
+
fireEvent.mouseEnter(container.querySelector(".td-graph-edge-hit-area"));
|
|
44
|
+
expect(path).toHaveClass("td-graph-edge--hovered");
|
|
45
|
+
expect(path.style.stroke).toContain("var(--td-graph-edge-active");
|
|
46
|
+
fireEvent.mouseLeave(container.querySelector(".td-graph-edge-hit-area"));
|
|
47
|
+
expect(path).not.toHaveClass("td-graph-edge--hovered");
|
|
48
|
+
expect(path.style.stroke).toContain("var(--td-graph-edge-stroke");
|
|
49
|
+
},
|
|
50
|
+
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { act, fireEvent, screen } from "@testing-library/react";
|
|
2
|
-
import { render } from "@truedat/test/
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
3
|
import LineageGroupNode from "../graph/LineageGroupNode";
|
|
4
4
|
import { EdgeHoverContext } from "../graph/ColoredEdge";
|
|
5
5
|
import { lineageNodeIcon } from "../graph/lineageNodeIcon";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { OptionGroup } from "../OptionGroup";
|
|
3
4
|
|
|
4
5
|
describe("<OptionGroup />", () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { renderWithIntl } from "@truedat/test/renderWithIntl";
|
|
2
2
|
import OriginLabel, { OriginIcon } from "../OriginLabel";
|
|
3
3
|
|
|
4
4
|
const labelRenderOpts = {
|
|
@@ -21,29 +21,31 @@ const iconRenderOpts = {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
describe("<OriginLabel />", () => {
|
|
24
|
-
it("matches the latest snapshot without origin",
|
|
25
|
-
const rendered =
|
|
26
|
-
await waitForLoad(rendered);
|
|
24
|
+
it("matches the latest snapshot without origin", () => {
|
|
25
|
+
const rendered = renderWithIntl(<OriginLabel />, labelRenderOpts);
|
|
27
26
|
expect(rendered.container).toMatchSnapshot();
|
|
28
27
|
});
|
|
29
28
|
|
|
30
|
-
it("matches the latest snapshot with origin",
|
|
31
|
-
const rendered =
|
|
32
|
-
|
|
29
|
+
it("matches the latest snapshot with origin", () => {
|
|
30
|
+
const rendered = renderWithIntl(
|
|
31
|
+
<OriginLabel origin="test" />,
|
|
32
|
+
labelRenderOpts,
|
|
33
|
+
);
|
|
33
34
|
expect(rendered.container).toMatchSnapshot();
|
|
34
35
|
});
|
|
35
36
|
});
|
|
36
37
|
|
|
37
38
|
describe("<OriginIcon />", () => {
|
|
38
|
-
it("matches the latest snapshot without origin",
|
|
39
|
-
const rendered =
|
|
40
|
-
await waitForLoad(rendered);
|
|
39
|
+
it("matches the latest snapshot without origin", () => {
|
|
40
|
+
const rendered = renderWithIntl(<OriginIcon />, iconRenderOpts);
|
|
41
41
|
expect(rendered.container).toMatchSnapshot();
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
it("matches the latest snapshot with origin",
|
|
45
|
-
const rendered =
|
|
46
|
-
|
|
44
|
+
it("matches the latest snapshot with origin", () => {
|
|
45
|
+
const rendered = renderWithIntl(
|
|
46
|
+
<OriginIcon origin="test" />,
|
|
47
|
+
iconRenderOpts,
|
|
48
|
+
);
|
|
47
49
|
expect(rendered.container).toMatchSnapshot();
|
|
48
50
|
});
|
|
49
51
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { Pagination, MAX_PAGES } from "../Pagination";
|
|
3
4
|
|
|
4
5
|
describe("<Pagination />", () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { render } from "@truedat/test/
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
2
|
import SearchDateFilter from "@truedat/core/search/SearchDateFilter";
|
|
3
3
|
import SearchContextWrapper from "@truedat/core/components/common/SearchContextWrapper";
|
|
4
4
|
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { Icon, Dropdown, Segment } from "semantic-ui-react";
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
import { within, waitFor } from "@testing-library/react";
|
|
5
|
-
import { render
|
|
5
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
6
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
6
7
|
|
|
7
8
|
import SearchFilterDropdown from "../SearchFilterDropdown";
|
|
8
9
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { SearchInput } from "../SearchInput";
|
|
3
4
|
|
|
4
5
|
describe("<SearchInput />", () => {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import userEvent from "@testing-library/user-event";
|
|
2
|
-
import { render
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
3
4
|
import { StructureFilterItem } from "../StructureFilterItem";
|
|
4
5
|
|
|
5
6
|
const user = userEvent.setup({ delay: null });
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { SystemsLoader } from "../SystemsLoader";
|
|
3
4
|
|
|
4
5
|
describe("<SystemsLoader />", () => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { TemplatesLoader } from "@truedat/core/components/TemplatesLoader";
|
|
3
4
|
|
|
4
5
|
describe("<TemplatesLoader />", () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { screen, fireEvent } from "@testing-library/react";
|
|
2
2
|
import userEvent from "@testing-library/user-event";
|
|
3
3
|
import messages from "@truedat/core/messages";
|
|
4
|
-
import { render } from "@truedat/test/
|
|
4
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
5
5
|
import TextPromptModal from "../TextPromptModal";
|
|
6
6
|
|
|
7
7
|
const renderWithIntl = (component) => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import userEvent from "@testing-library/user-event";
|
|
2
2
|
import { waitFor } from "@testing-library/react";
|
|
3
|
-
import { render
|
|
3
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
4
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
4
5
|
import TreeSelector from "../TreeSelector";
|
|
5
6
|
|
|
6
7
|
const baz = { id: "3", level: 2, name: "baz", children: [] };
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import userEvent from "@testing-library/user-event";
|
|
2
|
-
import { render } from "@truedat/test/
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
3
|
import { StatusPill, ResponseCell } from "../UploadJobParser";
|
|
4
4
|
|
|
5
|
+
jest.mock("@truedat/dq/components/RuleImplementationLink", () => () => null);
|
|
6
|
+
jest.mock("@truedat/dd/components/StructureNoteLink", () => () => null);
|
|
7
|
+
|
|
5
8
|
describe("<StatusPill />", () => {
|
|
6
9
|
it("renders with correct color based on status", async () => {
|
|
7
10
|
const statuses = ["COMPLETED", "FAILED", "ERROR", "INFO", "OTHER"];
|
|
@@ -397,7 +397,7 @@ export const getEdgeSlotOffsets = (data = {}) => ({
|
|
|
397
397
|
export const getLineageEdgeVisualState = (data = {}, hovered = false) => {
|
|
398
398
|
const aggregatedCount = Number(data.aggregatedCount);
|
|
399
399
|
const aggregated = Number.isFinite(aggregatedCount) && aggregatedCount > 1;
|
|
400
|
-
const dimmed = Boolean(data.focusDimmed);
|
|
400
|
+
const dimmed = Boolean(data.focusDimmed) && !hovered;
|
|
401
401
|
|
|
402
402
|
return {
|
|
403
403
|
aggregated,
|
|
@@ -2,7 +2,7 @@ import _ from "lodash/fp";
|
|
|
2
2
|
import { use, createContext, useEffect, useState } from "react";
|
|
3
3
|
import { IntlProvider } from "react-intl";
|
|
4
4
|
import PropTypes from "prop-types";
|
|
5
|
-
import
|
|
5
|
+
import Loading from "@truedat/core/components/Loading";
|
|
6
6
|
import { useLocales } from "../../hooks/useLocales";
|
|
7
7
|
import { getNavigatorLanguage } from "../../services/i18n";
|
|
8
8
|
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
TableHeader,
|
|
18
18
|
TableRow,
|
|
19
19
|
} from "semantic-ui-react";
|
|
20
|
-
import
|
|
20
|
+
import ConfirmModal from "@truedat/core/components/ConfirmModal";
|
|
21
21
|
import { useLocalesUpdate } from "../../hooks/useLocales";
|
|
22
22
|
import { useLanguage } from "./LangProvider";
|
|
23
23
|
|
|
@@ -3,7 +3,7 @@ import PropTypes from "prop-types";
|
|
|
3
3
|
import { useForm, Controller } from "react-hook-form";
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
5
|
import { Button, Form, Segment, Header, Loader } from "semantic-ui-react";
|
|
6
|
-
import
|
|
6
|
+
import HistoryBackButton from "@truedat/core/components/HistoryBackButton";
|
|
7
7
|
import { useLanguage } from "./LangProvider";
|
|
8
8
|
|
|
9
9
|
export const LangForm = ({
|
|
@@ -11,10 +11,10 @@ import {
|
|
|
11
11
|
Segment,
|
|
12
12
|
Menu,
|
|
13
13
|
} from "semantic-ui-react";
|
|
14
|
-
import
|
|
14
|
+
import SearchInput from "@truedat/core/components/SearchInput";
|
|
15
15
|
import { lowerDeburrTrim } from "@truedat/core/services/sort";
|
|
16
16
|
import { I18N_MESSAGES, I18N_MESSAGES_NEW } from "@truedat/core/routes";
|
|
17
|
-
import
|
|
17
|
+
import Pagination from "@truedat/core/components/Pagination";
|
|
18
18
|
import { useLanguage } from "./LangProvider";
|
|
19
19
|
import MessagesTable from "./MessagesTable";
|
|
20
20
|
import Languages from "./Languages";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import userEvent from "@testing-library/user-event";
|
|
2
|
-
import { render
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
3
4
|
import messages from "@truedat/core/messages";
|
|
4
5
|
import EditableCell from "../EditableCell";
|
|
5
6
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import { useAuthorized } from "@truedat/core/hooks/useAuthorized";
|
|
3
4
|
import ProtectedRoute from "../ProtectedRoute";
|
|
4
5
|
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { renderWithIntl } from "@truedat/test/renderWithIntl";
|
|
2
2
|
import Unauthorized from "../Unauthorized";
|
|
3
3
|
|
|
4
4
|
describe("Unauthorized", () => {
|
|
5
|
-
it("renders unauthorized message",
|
|
6
|
-
const rendered =
|
|
7
|
-
await waitForLoad(rendered);
|
|
5
|
+
it("renders unauthorized message", () => {
|
|
6
|
+
const rendered = renderWithIntl(<Unauthorized />);
|
|
8
7
|
|
|
9
8
|
expect(rendered.getByText(/view.unauthorized.head/i)).toBeInTheDocument();
|
|
10
9
|
expect(
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import { render
|
|
2
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
3
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
3
4
|
import { waitFor } from "@testing-library/react";
|
|
4
5
|
import userEvent from "@testing-library/user-event";
|
|
5
6
|
import SearchContext from "@truedat/core/search/SearchContext";
|
|
@@ -94,7 +95,9 @@ describe("<FilterDropdown/>", () => {
|
|
|
94
95
|
</SearchContext>,
|
|
95
96
|
);
|
|
96
97
|
await waitForLoad(rendered);
|
|
97
|
-
userEvent.click(
|
|
98
|
+
await userEvent.click(
|
|
99
|
+
rendered.container.querySelector('[class="delete icon"]'),
|
|
100
|
+
);
|
|
98
101
|
await waitFor(() => {
|
|
99
102
|
expect(searchProps.removeFilter).toBeCalledTimes(1);
|
|
100
103
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { render
|
|
1
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
2
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
2
3
|
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import { FilterItem } from "../FilterItem";
|
|
4
5
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
2
|
import { waitFor, within } from "@testing-library/react";
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
|
-
import { render
|
|
4
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
5
|
+
import { waitForLoad } from "@truedat/test/waitForLoad";
|
|
5
6
|
import SearchContext from "@truedat/core/search/SearchContext";
|
|
6
7
|
import FilterQueryDropdown from "../FilterQueryDropdown";
|
|
7
8
|
|
|
@@ -2,13 +2,13 @@ import userEvent from "@testing-library/user-event";
|
|
|
2
2
|
import { render, waitForLoad } from "@truedat/test/render";
|
|
3
3
|
import messages from "@truedat/core/messages";
|
|
4
4
|
import SearchContext from "@truedat/core/search/SearchContext";
|
|
5
|
+
import { mutateUserFilters } from "../../hooks/useUserFilters";
|
|
5
6
|
import ModalSaveFilter from "../ModalSaveFilter";
|
|
6
7
|
|
|
7
|
-
const mockMutateUserFilters = jest.fn();
|
|
8
8
|
const mockTrigger = jest.fn();
|
|
9
9
|
|
|
10
10
|
jest.mock("../../hooks/useUserFilters", () => ({
|
|
11
|
-
mutateUserFilters:
|
|
11
|
+
mutateUserFilters: jest.fn(),
|
|
12
12
|
useUserFilters: jest.fn(),
|
|
13
13
|
useUserFiltersCreate: () => ({ trigger: mockTrigger }),
|
|
14
14
|
useUserFiltersDelete: jest.fn(),
|
|
@@ -35,7 +35,7 @@ describe("<ModalSaveFilter /> admin", () => {
|
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
beforeEach(() => {
|
|
38
|
-
|
|
38
|
+
mutateUserFilters.mockClear();
|
|
39
39
|
mockTrigger.mockReset();
|
|
40
40
|
});
|
|
41
41
|
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import { act, waitFor } from "@testing-library/react";
|
|
2
2
|
import userEvent from "@testing-library/user-event";
|
|
3
|
-
import { render } from "@truedat/test/
|
|
3
|
+
import { renderWithIntl as render } from "@truedat/test/renderWithIntl";
|
|
4
4
|
import {
|
|
5
5
|
SearchContextProvider,
|
|
6
6
|
useSearchContext,
|
|
7
7
|
} from "@truedat/core/search/SearchContext";
|
|
8
8
|
|
|
9
|
-
jest.mock("react-router", () => ({
|
|
10
|
-
...jest.requireActual("react-router"),
|
|
11
|
-
useLocation: jest.fn(),
|
|
12
|
-
}));
|
|
13
|
-
|
|
14
9
|
const useFilters = () => ({
|
|
15
10
|
trigger: () => ({
|
|
16
11
|
then: (callback) =>
|
|
@@ -152,10 +147,6 @@ describe("<SearchContextProvider />", () => {
|
|
|
152
147
|
};
|
|
153
148
|
|
|
154
149
|
it(`matches the latest snapshot`, async () => {
|
|
155
|
-
jest
|
|
156
|
-
.spyOn(require("react-router"), "useLocation")
|
|
157
|
-
.mockReturnValue({ pathname: "/concepts" });
|
|
158
|
-
|
|
159
150
|
const { container, findByText } = render(
|
|
160
151
|
<SearchContextProvider {...searchProps} defaultFilters={{}}>
|
|
161
152
|
<ChildComponent />
|