@truedat/dq 4.48.4 → 4.48.7

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.48.7]
4
+
5
+ ### Added
6
+
7
+ - [TD-5029] Reenable submit test commented out in [TD-4661]
8
+
9
+ ## [4.48.6] 2022-07-15
10
+
11
+ ### Fixed
12
+
13
+ - [TD-4576] Send business_concept_id in concept rules tab rule creation form
14
+
3
15
  ## [4.48.2] 2022-07-08
4
16
 
5
17
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truedat/dq",
3
- "version": "4.48.4",
3
+ "version": "4.48.7",
4
4
  "description": "Truedat Web Data Quality Module",
5
5
  "sideEffects": false,
6
6
  "jsnext:main": "src/index.js",
@@ -88,8 +88,8 @@
88
88
  },
89
89
  "dependencies": {
90
90
  "@apollo/client": "^3.6.4",
91
- "@truedat/core": "4.48.4",
92
- "@truedat/df": "4.48.4",
91
+ "@truedat/core": "4.48.7",
92
+ "@truedat/df": "4.48.7",
93
93
  "axios": "^0.19.2",
94
94
  "graphql": "^15.5.3",
95
95
  "path-to-regexp": "^1.7.0",
@@ -110,5 +110,5 @@
110
110
  "react-dom": ">= 16.8.6 < 17",
111
111
  "semantic-ui-react": ">= 0.88.2 < 2.1"
112
112
  },
113
- "gitHead": "5e50a034469bf3ad8e02a64eb875ad2b710b6b03"
113
+ "gitHead": "f4a20ecf51eb101c2c25facfec48ee8cd0e621a3"
114
114
  }
@@ -148,10 +148,29 @@ export class RuleForm extends React.Component {
148
148
  e.preventDefault();
149
149
  if (this.messagesInformed(this.generateValidationMessages())) return;
150
150
  const { onSubmit, match } = this.props;
151
- const { concept, ...rule } = this.state;
151
+
152
+ const {
153
+ concept,
154
+ domain_id,
155
+ active,
156
+ description,
157
+ df_content,
158
+ df_name,
159
+ name,
160
+ } = this.state;
152
161
 
153
162
  onSubmit({
154
- rule,
163
+ rule: {
164
+ ...(concept?.business_concept_id && {
165
+ business_concept_id: concept?.business_concept_id,
166
+ }),
167
+ domain_id,
168
+ active,
169
+ description,
170
+ df_content,
171
+ df_name,
172
+ name,
173
+ },
155
174
  ids: match.params,
156
175
  });
157
176
  };
@@ -204,7 +223,7 @@ export class RuleForm extends React.Component {
204
223
  isSubmitting,
205
224
  intl: { formatMessage },
206
225
  } = this.props;
207
- const { template, valid, ...rule } = this.state;
226
+ const { valid, ...rule } = this.state;
208
227
  const { domain_id } = rule;
209
228
  const { concept, domainOptions } = this.props;
210
229
  const messages = this.generateValidationMessages();
@@ -0,0 +1,118 @@
1
+ export const globalState = {
2
+ ruleCreating: false,
3
+ ruleUpdating: false,
4
+ conceptRulesActions: {
5
+ domain_ids: [
6
+ {
7
+ external_id: "ARQUITECTURA",
8
+ id: 1,
9
+ name: "ARQ",
10
+ parent_id: null,
11
+ updated_at: "2020-04-01 11:30:42.177807Z",
12
+ },
13
+ ],
14
+ },
15
+ concept: {
16
+ id: 12157,
17
+ content: {
18
+ CHECKBOXES: "",
19
+ dependiente: "v4",
20
+ },
21
+ confidential: false,
22
+ description: {
23
+ document: {
24
+ data: {},
25
+ nodes: [
26
+ {
27
+ data: {},
28
+ nodes: [
29
+ {
30
+ marks: [],
31
+ object: "text",
32
+ text: "a",
33
+ },
34
+ ],
35
+ object: "block",
36
+ type: "paragraph",
37
+ },
38
+ ],
39
+ object: "document",
40
+ },
41
+ object: "value",
42
+ },
43
+ domain: {
44
+ id: 1,
45
+ name: "ARQ",
46
+ },
47
+ domain_parents: [
48
+ {
49
+ external_id: "ARQUITECTURA",
50
+ id: 1,
51
+ name: "ARQ",
52
+ },
53
+ {
54
+ external_id: "Bankia Prueba",
55
+ id: 191,
56
+ name: "Bankia Prueba",
57
+ },
58
+ ],
59
+ name: "abc-def",
60
+ business_concept_id: 11960,
61
+ status: "published",
62
+ type: "test_checkboxes",
63
+ version: 1,
64
+ template: {
65
+ content: [
66
+ {
67
+ fields: [
68
+ {
69
+ cardinality: "?",
70
+ default: "",
71
+ label: "dependiente",
72
+ name: "dependiente",
73
+ type: "string",
74
+ values: {
75
+ fixed: ["v1", "v2", "v3", "v4"],
76
+ },
77
+ widget: "radio",
78
+ },
79
+ {
80
+ cardinality: "*",
81
+ default: "",
82
+ label: "CHECKBOXES",
83
+ name: "CHECKBOXES",
84
+ type: "string",
85
+ values: {
86
+ switch: {
87
+ on: "dependiente",
88
+ values: {
89
+ v1: ["v11", "v22"],
90
+ v2: ["c2a", "c2b"],
91
+ v3: ["v3x", "v3y"],
92
+ },
93
+ },
94
+ },
95
+ widget: "checkbox",
96
+ },
97
+ ],
98
+ name: "New Group 1",
99
+ },
100
+ ],
101
+ label: "test_checkboxes",
102
+ },
103
+ last_change_at: "2021-12-28T09:35:25.624552Z",
104
+ last_change_by: 29,
105
+ last_change_user: {
106
+ email: "user@domain.tld",
107
+ external_id: "",
108
+ full_name: "Full Name",
109
+ id: 29,
110
+ user_name: "user@domain.tld",
111
+ },
112
+ completeness: 50,
113
+ in_progress: false,
114
+ link_count: 0,
115
+ rule_count: 11,
116
+ concept_count: 4,
117
+ },
118
+ };
@@ -207,126 +207,133 @@ describe("<NewRuleImplementation> NewRuleImplementation doSubmit", () => {
207
207
  });
208
208
  });
209
209
 
210
- // it("doSubmit: unique across fields operator", async () => {
211
- // const expectedRuleImplementation = {
212
- // ...expectedRuleImplementationBase,
213
- // validations: [
214
- // {
215
- // modifier: null,
216
- // operator: { name: "unique", value_type: "field_list" },
217
- // population: [],
218
- // structure: { id: 11127109, parent_index: 4, name: "EMAIL", type: "VARCHAR2" },
219
- // value: [
220
- // {
221
- // fields: [
222
- // {
223
- // id: 11127109,
224
- // name: "EMAIL",
225
- // parent_index: 4,
226
- // path: undefined,
227
- // },
228
- // {
229
- // id: 11127116,
230
- // name: "PHONE_NUMBER",
231
- // parent_index: 4,
232
- // path: undefined,
233
- // },
234
- // ],
235
- // },
236
- // ],
237
- // value_modifier: [],
238
- // },
239
- // ],
240
- // };
241
-
242
- // const { queryByText, getByRole, findByRole, findByTestId } = render(
243
- // <NewRuleImplementation {...props} />,
244
- // renderOptsImplementationEdit
245
- // );
246
-
247
- // // Information Form
248
-
249
- // await waitFor(() => {
250
- // expect(queryByText(/Template/)).toBeTruthy();
251
- // });
252
-
253
- // userEvent.click(await findByRole("option", { name: "template1" }));
254
-
255
- // await waitFor(() => {
256
- // expect(getByRole("button", { name: "Next" })).toBeEnabled();
257
- // });
258
- // userEvent.click(await getByRole("button", { name: "Next" }));
259
-
260
- // // Dataset Form
261
-
262
- // await waitFor(() => {
263
- // expect(getByRole("button", { name: "Next" })).toBeEnabled();
264
- // });
265
- // userEvent.click(await getByRole("button", { name: "Next" }));
266
-
267
- // // Population Form
268
-
269
- // await waitFor(() => {
270
- // expect(getByRole("button", { name: "Next" })).toBeEnabled();
271
- // });
272
- // userEvent.click(await getByRole("button", { name: "Next" }));
273
-
274
- // // Validations Form
275
-
276
- // userEvent.click(await findByRole("button", { name: "add-condition-row" }));
277
-
278
- // const row = await findByTestId("row-0");
279
-
280
- // const field = row.querySelector('div[label="Field"]');
281
- // const operator = row.querySelector('div[label="Operator"]');
282
-
283
- // userEvent.click(field);
284
- // const fieldOptions = await within(field).findByRole("listbox");
285
- // const emailFieldOption = within(fieldOptions).getByText("EMAIL");
286
- // userEvent.click(emailFieldOption);
287
- // const selectedField = fieldOptions.querySelector(".selected>span");
288
- // expect(within(selectedField).queryByText(/EMAIL/)).toBeInTheDocument();
289
-
290
- // userEvent.click(operator);
291
- // const operatorOptions = await within(operator).findByRole("listbox");
292
- // const uniqueAcrossFieldsOperatorOption = within(operatorOptions).getByText(
293
- // "unique across fields"
294
- // );
295
- // userEvent.click(uniqueAcrossFieldsOperatorOption);
296
- // const selectedOperator = operatorOptions.querySelector(".selected>span");
297
- // expect(
298
- // within(selectedOperator).queryByText(/unique across fields/)
299
- // ).toBeInTheDocument();
300
-
301
- // const updatedRow = await findByTestId("row-0");
302
- // const value = updatedRow.querySelector('div[label="Value"]');
303
- // userEvent.click(value);
304
- // const valueOptions = await within(value).findByRole("listbox");
305
- // const valueEmailFieldOption = within(valueOptions).getByText("EMAIL");
306
- // const valuePhoneNumberFieldOption =
307
- // within(valueOptions).getByText("PHONE_NUMBER");
308
-
309
- // userEvent.click(valueEmailFieldOption);
310
- // userEvent.click(valuePhoneNumberFieldOption);
311
-
312
- // const selectedFieldValues = updatedRow.querySelectorAll(".label");
313
-
314
- // const selectedFieldTexts = [...selectedFieldValues].map(
315
- // (selectedFieldValue) => selectedFieldValue.text
316
- // );
317
-
318
- // expect(_.difference(selectedFieldTexts, ["EMAIL", "PHONE_NUMBER"])).toEqual(
319
- // []
320
- // );
321
-
322
- // await waitFor(() => {
323
- // expect(getByRole("button", { name: "Save" })).toBeEnabled();
324
- // });
325
- // userEvent.click(await getByRole("button", { name: "Save" }));
326
-
327
- // expect(dispatch).toHaveBeenCalledWith({
328
- // ...ruleImplementationLoaderActions.updateRuleImplementation(),
329
- // payload: { rule_implementation: expectedRuleImplementation },
330
- // });
331
- // });
210
+ it("doSubmit: unique across fields operator", async () => {
211
+ const expectedRuleImplementation = {
212
+ ...expectedRuleImplementationBase,
213
+ validations: [
214
+ {
215
+ modifier: null,
216
+ operator: { name: "unique", value_type: "field_list" },
217
+ population: [],
218
+ structure: {
219
+ id: 11127109,
220
+ parent_index: 4,
221
+ name: "EMAIL",
222
+ type: "VARCHAR2",
223
+ },
224
+ value: [
225
+ {
226
+ fields: [
227
+ {
228
+ id: 11127109,
229
+ name: "EMAIL",
230
+ parent_index: 4,
231
+ path: undefined,
232
+ type: "VARCHAR2",
233
+ },
234
+ {
235
+ id: 11127116,
236
+ name: "PHONE_NUMBER",
237
+ parent_index: 4,
238
+ path: undefined,
239
+ type: "VARCHAR2",
240
+ },
241
+ ],
242
+ },
243
+ ],
244
+ value_modifier: [],
245
+ },
246
+ ],
247
+ };
248
+
249
+ const { queryByText, getByRole, findByRole, findByTestId } = render(
250
+ <NewRuleImplementation {...props} />,
251
+ renderOptsImplementationEdit
252
+ );
253
+
254
+ // Information Form
255
+
256
+ await waitFor(() => {
257
+ expect(queryByText(/Template/)).toBeTruthy();
258
+ });
259
+
260
+ userEvent.click(await findByRole("option", { name: "template1" }));
261
+
262
+ await waitFor(() => {
263
+ expect(getByRole("button", { name: "Next" })).toBeEnabled();
264
+ });
265
+ userEvent.click(await getByRole("button", { name: "Next" }));
266
+
267
+ // Dataset Form
268
+
269
+ await waitFor(() => {
270
+ expect(getByRole("button", { name: "Next" })).toBeEnabled();
271
+ });
272
+ userEvent.click(await getByRole("button", { name: "Next" }));
273
+
274
+ // Population Form
275
+
276
+ await waitFor(() => {
277
+ expect(getByRole("button", { name: "Next" })).toBeEnabled();
278
+ });
279
+ userEvent.click(await getByRole("button", { name: "Next" }));
280
+
281
+ // Validations Form
282
+
283
+ userEvent.click(await findByRole("button", { name: "add-condition-row" }));
284
+
285
+ const row = await findByTestId("row-0");
286
+
287
+ const field = row.querySelector('div[label="Field"]');
288
+ const operator = row.querySelector('div[label="Operator"]');
289
+
290
+ userEvent.click(field);
291
+ const fieldOptions = await within(field).findByRole("listbox");
292
+ const emailFieldOption = within(fieldOptions).getByText("EMAIL");
293
+ userEvent.click(emailFieldOption);
294
+ const selectedField = fieldOptions.querySelector(".selected>span");
295
+ expect(within(selectedField).queryByText(/EMAIL/)).toBeInTheDocument();
296
+
297
+ userEvent.click(operator);
298
+ const operatorOptions = await within(operator).findByRole("listbox");
299
+ const uniqueAcrossFieldsOperatorOption = within(operatorOptions).getByText(
300
+ "unique across fields"
301
+ );
302
+ userEvent.click(uniqueAcrossFieldsOperatorOption);
303
+ const selectedOperator = operatorOptions.querySelector(".selected>span");
304
+ expect(
305
+ within(selectedOperator).queryByText(/unique across fields/)
306
+ ).toBeInTheDocument();
307
+
308
+ const updatedRow = await findByTestId("row-0");
309
+ const value = updatedRow.querySelector('div[label="Value"]');
310
+ userEvent.click(value);
311
+ const valueOptions = await within(value).findByRole("listbox");
312
+ const valueEmailFieldOption = within(valueOptions).getByText("EMAIL");
313
+ const valuePhoneNumberFieldOption =
314
+ within(valueOptions).getByText("PHONE_NUMBER");
315
+
316
+ userEvent.click(valueEmailFieldOption);
317
+ userEvent.click(valuePhoneNumberFieldOption);
318
+
319
+ const selectedFieldValues = updatedRow.querySelectorAll(".label");
320
+
321
+ const selectedFieldTexts = [...selectedFieldValues].map(
322
+ (selectedFieldValue) => selectedFieldValue.text
323
+ );
324
+
325
+ expect(_.difference(selectedFieldTexts, ["EMAIL", "PHONE_NUMBER"])).toEqual(
326
+ []
327
+ );
328
+
329
+ await waitFor(() => {
330
+ expect(getByRole("button", { name: "Save" })).toBeEnabled();
331
+ });
332
+ userEvent.click(await getByRole("button", { name: "Save" }));
333
+
334
+ expect(dispatch).toHaveBeenCalledWith({
335
+ ...ruleImplementationLoaderActions.updateRuleImplementation(),
336
+ payload: { rule_implementation: expectedRuleImplementation },
337
+ });
338
+ });
332
339
  });
@@ -4,6 +4,7 @@ import { render } from "@truedat/test/render";
4
4
  import userEvent from "@testing-library/user-event";
5
5
  import { multipleTemplatesMock } from "@truedat/test/mocks";
6
6
  import RuleForm from "../RuleForm";
7
+ import { globalState } from "../__test_samples__/RuleForm";
7
8
 
8
9
  const rule = {
9
10
  id: 123,
@@ -62,4 +63,41 @@ describe("<RuleForm />", () => {
62
63
  expect(getByRole("button", { name: /save/i })).not.toBeDisabled();
63
64
  });
64
65
  });
66
+
67
+ it("submit rule data", async () => {
68
+ const onSubmit = jest.fn();
69
+
70
+ const renderOpts = {
71
+ mocks: [multipleTemplatesMock({ scope: "dq", domainIds: [1] })],
72
+ state: globalState,
73
+ fallback: "lazy",
74
+ };
75
+
76
+ const { getByRole } = render(<RuleForm onSubmit={onSubmit} />, renderOpts);
77
+ await waitFor(() =>
78
+ expect(getByRole("button", { name: /save/i })).toBeDisabled()
79
+ );
80
+ userEvent.click(getByRole("option", { name: "ARQ" }));
81
+ const ruleNameTextbox = getByRole("textbox", { name: /rule name/i });
82
+ userEvent.paste(ruleNameTextbox, "rule1");
83
+ expect(ruleNameTextbox).toHaveValue("rule1");
84
+ await waitFor(() => {
85
+ expect(getByRole("button", { name: /save/i })).not.toBeDisabled();
86
+ });
87
+
88
+ userEvent.click(await getByRole("button", { name: /save/i }));
89
+
90
+ expect(onSubmit).toHaveBeenCalledWith({
91
+ ids: {},
92
+ rule: {
93
+ active: true,
94
+ business_concept_id: 11960,
95
+ description: {},
96
+ df_content: {},
97
+ df_name: undefined,
98
+ domain_id: 1,
99
+ name: "rule1",
100
+ },
101
+ });
102
+ });
65
103
  });