@truedat/bg 7.10.3 → 7.11.0

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 (33) hide show
  1. package/package.json +3 -3
  2. package/src/concepts/api.js +2 -0
  3. package/src/concepts/components/ConceptLinksUploadButton.js +0 -4
  4. package/src/concepts/components/ConceptRoutes.js +28 -46
  5. package/src/concepts/components/ConceptSuggestions.js +71 -0
  6. package/src/concepts/components/__tests__/ConceptRoutes.spec.js +201 -0
  7. package/src/concepts/components/__tests__/ConceptSuggestions.spec.js +74 -0
  8. package/src/concepts/components/__tests__/__snapshots__/ConceptRoutes.spec.js.snap +165 -0
  9. package/src/concepts/hooks/useConcepts.js +7 -0
  10. package/src/concepts/relations/api.js +9 -1
  11. package/src/concepts/relations/components/ConceptLinksApprovalResults.js +91 -0
  12. package/src/concepts/relations/components/ConceptLinksApprovals.js +225 -0
  13. package/src/concepts/relations/components/ConceptLinksApprovalsLabelResults.js +42 -0
  14. package/src/concepts/relations/components/ConceptLinksApprovalsRow.js +43 -0
  15. package/src/concepts/relations/components/ConceptLinksApprovalsTable.js +104 -0
  16. package/src/concepts/relations/components/ConceptSelector.js +117 -75
  17. package/src/concepts/relations/components/__tests__/ConceptLinksApprovalResults.spec.js +123 -0
  18. package/src/concepts/relations/components/__tests__/ConceptLinksApprovals.spec.js +77 -0
  19. package/src/concepts/relations/components/__tests__/ConceptLinksApprovalsLabelResults.spec.js +47 -0
  20. package/src/concepts/relations/components/__tests__/ConceptLinksApprovalsRow.spec.js +68 -0
  21. package/src/concepts/relations/components/__tests__/ConceptLinksApprovalsTable.spec.js +107 -0
  22. package/src/concepts/relations/components/__tests__/ConceptSelector.spec.js +90 -1
  23. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovalResults.spec.js.snap +217 -0
  24. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovals.spec.js.snap +559 -0
  25. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovalsLabelResults.spec.js.snap +34 -0
  26. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovalsRow.spec.js.snap +47 -0
  27. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovalsTable.spec.js.snap +132 -0
  28. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptSelector.spec.js.snap +99 -0
  29. package/src/concepts/relations/hooks/useLinks.js +25 -0
  30. package/src/concepts/relations/sagas/linkConcept.js +1 -0
  31. package/src/concepts/relations/selectors/getLinksSearchColumns.js +106 -0
  32. package/src/concepts/relations/selectors/index.js +2 -0
  33. package/src/concepts/relations/styles/ConceptLinksApprovals.less +15 -0
@@ -1,7 +1,8 @@
1
- import { waitFor } from "@testing-library/react";
1
+ import { waitFor, within } from "@testing-library/react";
2
2
  import userEvent from "@testing-library/user-event";
3
3
  import { render, waitForLoad } from "@truedat/test/render";
4
4
  import ConceptSelector from "../ConceptSelector";
5
+ import { ConceptSelectorTable } from "../ConceptSelector";
5
6
 
6
7
  const concept = {
7
8
  id: 1,
@@ -116,3 +117,91 @@ describe("<ConceptSelector />", () => {
116
117
  );
117
118
  });
118
119
  });
120
+
121
+ describe("<ConceptSelectorTable />", () => {
122
+ jest.mock("react-intl", () => ({
123
+ FormattedMessage: ({ id }) => <span data-testid="fm">{id}</span>,
124
+ }));
125
+
126
+ const concept = {
127
+ id: 1,
128
+ name: "foo",
129
+ domain: { id: 1, name: "bar" },
130
+ status: "draft",
131
+ business_concept_id: 1,
132
+ last_change_at: "2020-01-01T00:00:00.000Z",
133
+ similarity: 0.5,
134
+ };
135
+
136
+ const links = [
137
+ {
138
+ target_id: 1,
139
+ target_type: "business_concept",
140
+ },
141
+ ];
142
+
143
+ const selectedConcept = { id: 2 };
144
+
145
+ const extraColumns = [
146
+ {
147
+ name: "similarity",
148
+ fieldSelector: (concept) => concept.similarity,
149
+ fieldDecorator: (similarity) => (
150
+ <span data-testid="similarity">{similarity}</span>
151
+ ),
152
+ },
153
+ ];
154
+
155
+ const props = {
156
+ businessConceptId: 1,
157
+ concepts: [concept],
158
+ selectedConcept,
159
+ handleConceptSelected: jest.fn(),
160
+ extraColumns,
161
+ links,
162
+ };
163
+
164
+ beforeEach(() => {
165
+ jest.clearAllMocks();
166
+ });
167
+
168
+ it("matches the latest snapshot", async () => {
169
+ const rendered = render(<ConceptSelectorTable {...props} />);
170
+ await waitForLoad(rendered);
171
+ expect(rendered.container).toMatchSnapshot();
172
+ });
173
+
174
+ test("renders Message when there are no concepts and no selectedConcept", () => {
175
+ const rendered = render(
176
+ <ConceptSelectorTable
177
+ {...{ ...props, concepts: [], selectedConcept: null }}
178
+ />
179
+ );
180
+ // It should render the Message with the empty results header id
181
+ expect(
182
+ rendered.getByText("concepts.search.results.empty")
183
+ ).toBeInTheDocument();
184
+ });
185
+
186
+ test("renders Table when there are concepts", async () => {
187
+ const rendered = render(
188
+ <ConceptSelectorTable {...{ ...props, selectedConcept: { id: 1 } }} />
189
+ );
190
+ await waitForLoad(rendered);
191
+
192
+ // Header labels via FormattedMessage
193
+ expect(rendered.getByText("concepts.props.name")).toBeInTheDocument();
194
+ expect(rendered.getByText("concepts.props.domain")).toBeInTheDocument();
195
+ expect(rendered.getByText("concepts.props.status")).toBeInTheDocument();
196
+ expect(rendered.getByText("concepts.props.similarity")).toBeInTheDocument();
197
+ // Rows exist
198
+ const rowgroups = rendered.getAllByRole("rowgroup");
199
+ const tbody = rowgroups[1];
200
+ const rows = within(tbody).getAllByRole("row");
201
+ expect(rows).toHaveLength(1);
202
+
203
+ expect(rows[0]).toHaveTextContent("bar");
204
+ expect(rows[0]).toHaveTextContent("draft");
205
+ expect(rows[0]).toHaveTextContent("0.5");
206
+ });
207
+ });
@@ -0,0 +1,217 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<LinksApprovalResults /> renders approval results with relations and errors 1`] = `
4
+ <div>
5
+ <div
6
+ class="ui breadcrumb"
7
+ >
8
+ <a
9
+ class="section"
10
+ data-discover="true"
11
+ href="/concepts/management/approvals"
12
+ >
13
+ conceptRelations.approvals.header
14
+ </a>
15
+ <i
16
+ aria-hidden="true"
17
+ class="right angle icon divider"
18
+ />
19
+ <div
20
+ class="active section"
21
+ >
22
+ conceptRelations.approvals.results.header
23
+ </div>
24
+ </div>
25
+ <div
26
+ class="ui positive message"
27
+ >
28
+ <div
29
+ class="header"
30
+ >
31
+ conceptRelations.approvals.results.approved.header
32
+ </div>
33
+ <li
34
+ class="content"
35
+ >
36
+ conceptRelations.approvals.results.message.source_name
37
+ <a
38
+ data-discover="true"
39
+ href="/concepts/10/versions/current"
40
+ target="_blank"
41
+ >
42
+ Source 1
43
+ </a>
44
+ conceptRelations.approvals.results.message.target_name
45
+ <a
46
+ data-discover="true"
47
+ href="/structures/20"
48
+ target="_blank"
49
+ >
50
+ Target 1
51
+ </a>
52
+ </li>
53
+ </div>
54
+ <div
55
+ class="ui error message"
56
+ >
57
+ <div
58
+ class="header"
59
+ >
60
+ conceptRelations.approvals.results.errors.permissions.header
61
+ </div>
62
+ <li
63
+ class="content"
64
+ >
65
+ conceptRelations.approvals.results.message.source_name
66
+ <a
67
+ data-discover="true"
68
+ href="/concepts/11/versions/current"
69
+ target="_blank"
70
+ >
71
+ Source 2
72
+ </a>
73
+ conceptRelations.approvals.results.message.target_name
74
+ <a
75
+ data-discover="true"
76
+ href="/structures/21"
77
+ target="_blank"
78
+ >
79
+ Target 2
80
+ </a>
81
+ </li>
82
+ </div>
83
+ </div>
84
+ `;
85
+
86
+ exports[`<LinksApprovalResults /> renders rejection results 1`] = `
87
+ <div>
88
+ <div
89
+ class="ui breadcrumb"
90
+ >
91
+ <a
92
+ class="section"
93
+ data-discover="true"
94
+ href="/concepts/management/approvals"
95
+ >
96
+ conceptRelations.approvals.header
97
+ </a>
98
+ <i
99
+ aria-hidden="true"
100
+ class="right angle icon divider"
101
+ />
102
+ <div
103
+ class="active section"
104
+ >
105
+ conceptRelations.approvals.results.header
106
+ </div>
107
+ </div>
108
+ <div
109
+ class="ui warning message"
110
+ >
111
+ <div
112
+ class="header"
113
+ >
114
+ conceptRelations.approvals.results.rejected.header
115
+ </div>
116
+ <li
117
+ class="content"
118
+ >
119
+ conceptRelations.approvals.results.message.source_name
120
+ <a
121
+ data-discover="true"
122
+ href="/concepts/12/versions/current"
123
+ target="_blank"
124
+ >
125
+ Source 3
126
+ </a>
127
+ conceptRelations.approvals.results.message.target_name
128
+ <a
129
+ data-discover="true"
130
+ href="/structures/22"
131
+ target="_blank"
132
+ >
133
+ Target 3
134
+ </a>
135
+ </li>
136
+ </div>
137
+ </div>
138
+ `;
139
+
140
+ exports[`<LinksApprovalResults /> renders with empty relations and errors 1`] = `
141
+ <div>
142
+ <div
143
+ class="ui breadcrumb"
144
+ >
145
+ <a
146
+ class="section"
147
+ data-discover="true"
148
+ href="/concepts/management/approvals"
149
+ >
150
+ conceptRelations.approvals.header
151
+ </a>
152
+ <i
153
+ aria-hidden="true"
154
+ class="right angle icon divider"
155
+ />
156
+ <div
157
+ class="active section"
158
+ >
159
+ conceptRelations.approvals.results.header
160
+ </div>
161
+ </div>
162
+ </div>
163
+ `;
164
+
165
+ exports[`<LinksApprovalResults /> renders with no errors 1`] = `
166
+ <div>
167
+ <div
168
+ class="ui breadcrumb"
169
+ >
170
+ <a
171
+ class="section"
172
+ data-discover="true"
173
+ href="/concepts/management/approvals"
174
+ >
175
+ conceptRelations.approvals.header
176
+ </a>
177
+ <i
178
+ aria-hidden="true"
179
+ class="right angle icon divider"
180
+ />
181
+ <div
182
+ class="active section"
183
+ >
184
+ conceptRelations.approvals.results.header
185
+ </div>
186
+ </div>
187
+ <div
188
+ class="ui positive message"
189
+ >
190
+ <div
191
+ class="header"
192
+ >
193
+ conceptRelations.approvals.results.approved.header
194
+ </div>
195
+ <li
196
+ class="content"
197
+ >
198
+ conceptRelations.approvals.results.message.source_name
199
+ <a
200
+ data-discover="true"
201
+ href="/concepts/13/versions/current"
202
+ target="_blank"
203
+ >
204
+ Source 4
205
+ </a>
206
+ conceptRelations.approvals.results.message.target_name
207
+ <a
208
+ data-discover="true"
209
+ href="/structures/23"
210
+ target="_blank"
211
+ >
212
+ Target 4
213
+ </a>
214
+ </li>
215
+ </div>
216
+ </div>
217
+ `;