@truedat/core 6.3.0 → 6.3.2

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.
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import { AddResourceMember } from "../AddResourceMember";
4
+
5
+ const props = {
6
+ type: "domain",
7
+ id: 1,
8
+ onSuccess: jest.fn(),
9
+ };
10
+
11
+ describe("<AddResourceMember />", () => {
12
+ it("matches the latest snapshot", () => {
13
+ const { container } = render(<AddResourceMember {...props} />);
14
+ expect(container).toMatchSnapshot();
15
+ });
16
+ });
@@ -0,0 +1,117 @@
1
+ import React from "react";
2
+ import userEvent from "@testing-library/user-event";
3
+ import { render } from "@truedat/test/render";
4
+ import { intl } from "@truedat/test/intl-stub";
5
+ import { useAclEntries } from "@truedat/core/hooks/useAclEntries";
6
+ import { ResourceMembers } from "../ResourceMembers";
7
+
8
+ // workaround for enzyme issue with React.useContext
9
+ // see https://github.com/airbnb/enzyme/issues/2176#issuecomment-532361526
10
+ jest.spyOn(React, "useContext").mockImplementation(() => intl);
11
+ jest.mock("@truedat/core/hooks/useAclEntries");
12
+ jest.mock("react-router-dom", () => ({
13
+ ...jest.requireActual("react-router-dom"),
14
+ useParams: () => ({ id: 1 }),
15
+ }));
16
+
17
+ jest.mock("@truedat/core/hooks/useAclEntries", () => ({
18
+ ...jest.requireActual("@truedat/core/hooks/useAclEntries"),
19
+ useAclEntries: jest.fn(),
20
+ useAclEntryUpdate: jest.fn().mockReturnValue({
21
+ trigger: jest.fn(),
22
+ }),
23
+ useAclEntryDelete: jest.fn().mockReturnValue({
24
+ trigger: jest.fn(),
25
+ }),
26
+ }));
27
+
28
+ describe("<ResourceMembers />", () => {
29
+ const aclEntries = {
30
+ aclEntries: [
31
+ {
32
+ principal_type: "group",
33
+ role_id: 2,
34
+ role_name: "data_owner",
35
+ principal: { description: "aaa bbb cc d", id: 2, name: "grupo1 " },
36
+ acl_entry_id: 1,
37
+ },
38
+ {
39
+ principal: {
40
+ email: "test@test.com",
41
+ full_name: "Data Owner 2",
42
+ id: 14,
43
+ user_name: "data_owner2",
44
+ },
45
+ principal_type: "user",
46
+ role_id: 2,
47
+ role_name: "data_owner",
48
+ acl_entry_id: 2,
49
+ },
50
+ {
51
+ principal: {
52
+ email: "test@test.com",
53
+ full_name: "Datos A",
54
+ id: 1,
55
+ user_name: "datos_a",
56
+ },
57
+ principal_type: "user",
58
+ role_id: 3,
59
+ role_name: "Datos A",
60
+ acl_entry_id: 3,
61
+ },
62
+ {
63
+ principal: {
64
+ email: "test@test.com",
65
+ full_name: "Last U",
66
+ id: 1,
67
+ user_name: "last_u",
68
+ },
69
+ principal_type: "user",
70
+ role_id: 6,
71
+ role_name: "Last R",
72
+ acl_entry_id: 4,
73
+ },
74
+ ],
75
+ };
76
+
77
+ const props = { type: "domain" };
78
+
79
+ useAclEntries.mockReturnValue({
80
+ data: { ...aclEntries, actions: { canCreate: true } },
81
+ loading: false,
82
+ mutate: jest.fn(),
83
+ });
84
+
85
+ it("matches the latest snapshot", () => {
86
+ const { container } = render(<ResourceMembers {...props} />);
87
+ expect(container).toMatchSnapshot();
88
+ });
89
+
90
+ it("filters users and groups according to search filter", () => {
91
+ const { getByRole } = render(<ResourceMembers {...props} />);
92
+
93
+ const input = getByRole("textbox");
94
+
95
+ userEvent.type(input, "data");
96
+ expect(document.getElementsByClassName("card").length).toBe(2);
97
+
98
+ userEvent.type(input, " owner");
99
+ expect(document.getElementsByClassName("card").length).toBe(1);
100
+ });
101
+
102
+ it("renders users and groups grouped by role name", () => {
103
+ const { getByRole, queryByRole } = render(<ResourceMembers {...props} />);
104
+
105
+ expect(getByRole("heading", { name: /data_owner/i })).toBeInTheDocument();
106
+ expect(getByRole("heading", { name: /datos a/i })).toBeInTheDocument();
107
+ expect(getByRole("heading", { name: /last r/i })).toBeInTheDocument();
108
+
109
+ const input = getByRole("textbox");
110
+
111
+ userEvent.type(input, "data");
112
+
113
+ expect(getByRole("heading", { name: /data_owner/i })).toBeInTheDocument();
114
+ expect(queryByRole("heading", { name: /datos a/i })).toBeNull();
115
+ expect(queryByRole("heading", { name: /last r/i })).toBeNull();
116
+ });
117
+ });
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import { ResourceMembersActions } from "../ResourceMembersActions";
4
+
5
+ const props = {
6
+ resource: {
7
+ type: "domain",
8
+ id: 1,
9
+ },
10
+ actions: {
11
+ canCreate: true,
12
+ },
13
+ };
14
+
15
+ describe("<ResourceMembersActions />", () => {
16
+ it("matches the latest snapshot", () => {
17
+ const { container } = render(<ResourceMembersActions {...props} />);
18
+ expect(container).toMatchSnapshot();
19
+ });
20
+
21
+ it("render actions button if canCreate is true", () => {
22
+ const { getByRole } = render(<ResourceMembersActions {...props} />);
23
+ expect(getByRole("button", { name: /add/i })).toBeInTheDocument();
24
+ });
25
+
26
+ it("no render actions button if canCreate is false", () => {
27
+ const customProps = {
28
+ ...props,
29
+ actions: {
30
+ canCreate: false,
31
+ },
32
+ };
33
+
34
+ const { queryByRole } = render(<ResourceMembersActions {...customProps} />);
35
+ expect(queryByRole("button", { name: /add/i })).toBeNull();
36
+ });
37
+ });
@@ -0,0 +1,187 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<AddMemberForm /> matches the latest snapshot 1`] = `
4
+ <div>
5
+ <form
6
+ class="ui form"
7
+ >
8
+ <div
9
+ class="required field"
10
+ >
11
+ <label
12
+ for="principal"
13
+ >
14
+ domain.member
15
+ </label>
16
+ <div
17
+ aria-expanded="false"
18
+ class="ui search selection dropdown"
19
+ required=""
20
+ role="combobox"
21
+ >
22
+ <input
23
+ aria-autocomplete="list"
24
+ autocomplete="off"
25
+ class="search"
26
+ tabindex="0"
27
+ type="text"
28
+ value=""
29
+ />
30
+ <div
31
+ aria-atomic="true"
32
+ aria-live="polite"
33
+ class="divider default text"
34
+ role="alert"
35
+ >
36
+ domain.member
37
+ </div>
38
+ <i
39
+ aria-hidden="true"
40
+ class="dropdown icon"
41
+ />
42
+ <div
43
+ class="menu transition"
44
+ role="listbox"
45
+ >
46
+ <div
47
+ aria-checked="false"
48
+ aria-selected="true"
49
+ class="selected item"
50
+ id="1"
51
+ role="option"
52
+ style="pointer-events: all;"
53
+ >
54
+ <span
55
+ class="text"
56
+ >
57
+ john
58
+ </span>
59
+ </div>
60
+ <div
61
+ aria-checked="false"
62
+ aria-selected="false"
63
+ class="item"
64
+ id="2"
65
+ role="option"
66
+ style="pointer-events: all;"
67
+ >
68
+ <span
69
+ class="text"
70
+ >
71
+ mambo
72
+ </span>
73
+ </div>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ <div
78
+ class="required field"
79
+ >
80
+ <label
81
+ for="role"
82
+ >
83
+ domain.role
84
+ </label>
85
+ <div
86
+ aria-expanded="false"
87
+ class="ui basic search selection dropdown"
88
+ required=""
89
+ role="combobox"
90
+ >
91
+ <input
92
+ aria-autocomplete="list"
93
+ autocomplete="off"
94
+ class="search"
95
+ id="role"
96
+ tabindex="0"
97
+ type="text"
98
+ value=""
99
+ />
100
+ <div
101
+ aria-atomic="true"
102
+ aria-live="polite"
103
+ class="divider default text"
104
+ role="alert"
105
+ >
106
+ domain.role
107
+ </div>
108
+ <i
109
+ aria-hidden="true"
110
+ class="dropdown icon"
111
+ />
112
+ <div
113
+ class="menu transition"
114
+ role="listbox"
115
+ >
116
+ <div
117
+ aria-checked="false"
118
+ aria-selected="true"
119
+ class="selected item"
120
+ role="option"
121
+ style="pointer-events: all;"
122
+ >
123
+ <span
124
+ class="text"
125
+ >
126
+ role1
127
+ </span>
128
+ </div>
129
+ <div
130
+ aria-checked="false"
131
+ aria-selected="false"
132
+ class="item"
133
+ role="option"
134
+ style="pointer-events: all;"
135
+ >
136
+ <span
137
+ class="text"
138
+ >
139
+ role2
140
+ </span>
141
+ </div>
142
+ </div>
143
+ </div>
144
+ </div>
145
+ <div
146
+ class="field"
147
+ >
148
+ <label
149
+ for="description"
150
+ >
151
+ domain.role.member.description
152
+ </label>
153
+ <div
154
+ class="ui input"
155
+ >
156
+ <input
157
+ autocomplete="off"
158
+ id="description"
159
+ maxlength="120"
160
+ placeholder="domain.role.member.description"
161
+ type="text"
162
+ value=""
163
+ />
164
+ </div>
165
+ </div>
166
+ <div
167
+ class="actions"
168
+ >
169
+ <button
170
+ class="ui primary disabled right floated button"
171
+ disabled=""
172
+ tabindex="-1"
173
+ type="submit"
174
+ >
175
+ domain.actions.add_member
176
+ </button>
177
+ <a
178
+ class="ui secondary button"
179
+ href="/"
180
+ role="button"
181
+ >
182
+ actions.cancel
183
+ </a>
184
+ </div>
185
+ </form>
186
+ </div>
187
+ `;
@@ -0,0 +1,160 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<AddResourceMember /> matches the latest snapshot 1`] = `
4
+ <div>
5
+ <div
6
+ class="ui segment ui text container"
7
+ >
8
+ <h2
9
+ class="ui header"
10
+ >
11
+ <i
12
+ aria-hidden="true"
13
+ class="id card outline icon"
14
+ />
15
+ <div
16
+ class="content"
17
+ >
18
+ Add
19
+ </div>
20
+ </h2>
21
+ <form
22
+ class="ui form"
23
+ >
24
+ <div
25
+ class="required field"
26
+ >
27
+ <label
28
+ for="principal"
29
+ >
30
+ Member
31
+ </label>
32
+ <div
33
+ aria-expanded="false"
34
+ class="ui search selection dropdown"
35
+ required=""
36
+ role="combobox"
37
+ >
38
+ <input
39
+ aria-autocomplete="list"
40
+ autocomplete="off"
41
+ class="search"
42
+ tabindex="0"
43
+ type="text"
44
+ value=""
45
+ />
46
+ <div
47
+ aria-atomic="true"
48
+ aria-live="polite"
49
+ class="divider default text"
50
+ role="alert"
51
+ >
52
+ Member
53
+ </div>
54
+ <i
55
+ aria-hidden="true"
56
+ class="dropdown icon"
57
+ />
58
+ <div
59
+ class="menu transition"
60
+ role="listbox"
61
+ >
62
+ <div
63
+ class="message"
64
+ >
65
+ No results found.
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ <div
71
+ class="required field"
72
+ >
73
+ <label
74
+ for="role"
75
+ >
76
+ Role
77
+ </label>
78
+ <div
79
+ aria-expanded="false"
80
+ class="ui basic search selection dropdown"
81
+ required=""
82
+ role="combobox"
83
+ >
84
+ <input
85
+ aria-autocomplete="list"
86
+ autocomplete="off"
87
+ class="search"
88
+ id="role"
89
+ tabindex="0"
90
+ type="text"
91
+ value=""
92
+ />
93
+ <div
94
+ aria-atomic="true"
95
+ aria-live="polite"
96
+ class="divider default text"
97
+ role="alert"
98
+ >
99
+ Role
100
+ </div>
101
+ <i
102
+ aria-hidden="true"
103
+ class="dropdown icon"
104
+ />
105
+ <div
106
+ class="menu transition"
107
+ role="listbox"
108
+ >
109
+ <div
110
+ class="message"
111
+ >
112
+ No results found.
113
+ </div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ <div
118
+ class="field"
119
+ >
120
+ <label
121
+ for="description"
122
+ >
123
+ Description
124
+ </label>
125
+ <div
126
+ class="ui input"
127
+ >
128
+ <input
129
+ autocomplete="off"
130
+ id="description"
131
+ maxlength="120"
132
+ placeholder="Description"
133
+ type="text"
134
+ value=""
135
+ />
136
+ </div>
137
+ </div>
138
+ <div
139
+ class="actions"
140
+ >
141
+ <button
142
+ class="ui primary disabled right floated button"
143
+ disabled=""
144
+ tabindex="-1"
145
+ type="submit"
146
+ >
147
+ Add
148
+ </button>
149
+ <a
150
+ class="ui secondary button"
151
+ href="/"
152
+ role="button"
153
+ >
154
+ Cancel
155
+ </a>
156
+ </div>
157
+ </form>
158
+ </div>
159
+ </div>
160
+ `;
@@ -0,0 +1,151 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<ResourceMembers /> matches the latest snapshot 1`] = `
4
+ <div>
5
+ <div
6
+ class="ui centered one column grid"
7
+ >
8
+ <div
9
+ class="column"
10
+ >
11
+ <div
12
+ class="ui icon input"
13
+ >
14
+ <input
15
+ placeholder="user.search.placeholder"
16
+ type="text"
17
+ value=""
18
+ />
19
+ <i
20
+ aria-hidden="true"
21
+ class="search link icon"
22
+ />
23
+ </div>
24
+ <a
25
+ class="ui primary right floated button"
26
+ href="/domains/1/members/new"
27
+ role="button"
28
+ >
29
+ <i
30
+ aria-hidden="true"
31
+ class="add user icon"
32
+ />
33
+ domain.actions.add_member
34
+ </a>
35
+ </div>
36
+ </div>
37
+ <h3
38
+ class="ui dividing header"
39
+ >
40
+ data_owner
41
+ </h3>
42
+ <div
43
+ class="ui cards"
44
+ >
45
+ <div
46
+ class="ui card domain-member"
47
+ >
48
+ <div
49
+ class="content domain-member__content"
50
+ >
51
+ <div
52
+ class="header"
53
+ >
54
+ <i
55
+ aria-hidden="true"
56
+ class="users icon"
57
+ />
58
+ grupo1
59
+ </div>
60
+ <div
61
+ class="description"
62
+ />
63
+ </div>
64
+ </div>
65
+ <div
66
+ class="ui card domain-member"
67
+ >
68
+ <div
69
+ class="content domain-member__content"
70
+ >
71
+ <div
72
+ class="header"
73
+ >
74
+ <i
75
+ aria-hidden="true"
76
+ class="user icon"
77
+ />
78
+ Data Owner 2
79
+ </div>
80
+ <div
81
+ class="description"
82
+ >
83
+ data_owner2
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ <h3
89
+ class="ui dividing header"
90
+ >
91
+ Datos A
92
+ </h3>
93
+ <div
94
+ class="ui cards"
95
+ >
96
+ <div
97
+ class="ui card domain-member"
98
+ >
99
+ <div
100
+ class="content domain-member__content"
101
+ >
102
+ <div
103
+ class="header"
104
+ >
105
+ <i
106
+ aria-hidden="true"
107
+ class="user icon"
108
+ />
109
+ Datos A
110
+ </div>
111
+ <div
112
+ class="description"
113
+ >
114
+ datos_a
115
+ </div>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ <h3
120
+ class="ui dividing header"
121
+ >
122
+ Last R
123
+ </h3>
124
+ <div
125
+ class="ui cards"
126
+ >
127
+ <div
128
+ class="ui card domain-member"
129
+ >
130
+ <div
131
+ class="content domain-member__content"
132
+ >
133
+ <div
134
+ class="header"
135
+ >
136
+ <i
137
+ aria-hidden="true"
138
+ class="user icon"
139
+ />
140
+ Last U
141
+ </div>
142
+ <div
143
+ class="description"
144
+ >
145
+ last_u
146
+ </div>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ `;
@@ -0,0 +1,17 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<ResourceMembersActions /> matches the latest snapshot 1`] = `
4
+ <div>
5
+ <a
6
+ class="ui primary right floated button"
7
+ href="/domains/1/members/new"
8
+ role="button"
9
+ >
10
+ <i
11
+ aria-hidden="true"
12
+ class="add user icon"
13
+ />
14
+ Add
15
+ </a>
16
+ </div>
17
+ `;
@@ -361,6 +361,18 @@ exports[`<SideMenu /> matches the latest snapshot 1`] = `
361
361
  >
362
362
  prompts
363
363
  </a>
364
+ <a
365
+ class="link item"
366
+ href="/providers"
367
+ >
368
+ providers
369
+ </a>
370
+ <a
371
+ class="link item"
372
+ href="/aiSandbox"
373
+ >
374
+ ai_sandbox
375
+ </a>
364
376
  </div>
365
377
  </div>
366
378
  <div