datajunction-ui 0.0.1-a1
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/.babel-plugin-macrosrc.js +5 -0
- package/.env +3 -0
- package/.eslintrc.js +20 -0
- package/.gitattributes +201 -0
- package/.husky/pre-commit +6 -0
- package/.nvmrc +1 -0
- package/.prettierignore +6 -0
- package/.prettierrc +9 -0
- package/.stylelintrc +7 -0
- package/LICENSE +22 -0
- package/Makefile +3 -0
- package/README.md +10 -0
- package/dj-logo.svg +10 -0
- package/internals/testing/loadable.mock.tsx +6 -0
- package/package.json +189 -0
- package/public/favicon.ico +0 -0
- package/public/index.html +26 -0
- package/public/manifest.json +15 -0
- package/public/robots.txt +3 -0
- package/src/__tests__/reportWebVitals.test.jsx +44 -0
- package/src/app/__tests__/__snapshots__/index.test.tsx.snap +9 -0
- package/src/app/__tests__/index.test.tsx +14 -0
- package/src/app/components/DeleteNode.jsx +55 -0
- package/src/app/components/ListGroupItem.jsx +24 -0
- package/src/app/components/NamespaceHeader.jsx +31 -0
- package/src/app/components/QueryInfo.jsx +77 -0
- package/src/app/components/Tab.jsx +25 -0
- package/src/app/components/ToggleSwitch.jsx +20 -0
- package/src/app/components/__tests__/DeleteNode.test.jsx +53 -0
- package/src/app/components/__tests__/ListGroupItem.test.tsx +16 -0
- package/src/app/components/__tests__/NamespaceHeader.test.jsx +14 -0
- package/src/app/components/__tests__/QueryInfo.test.jsx +55 -0
- package/src/app/components/__tests__/Tab.test.jsx +27 -0
- package/src/app/components/__tests__/ToggleSwitch.test.jsx +43 -0
- package/src/app/components/__tests__/__snapshots__/ListGroupItem.test.tsx.snap +29 -0
- package/src/app/components/__tests__/__snapshots__/NamespaceHeader.test.jsx.snap +47 -0
- package/src/app/components/djgraph/Collapse.jsx +46 -0
- package/src/app/components/djgraph/DJNode.jsx +89 -0
- package/src/app/components/djgraph/DJNodeColumns.jsx +71 -0
- package/src/app/components/djgraph/DJNodeDimensions.jsx +75 -0
- package/src/app/components/djgraph/LayoutFlow.jsx +104 -0
- package/src/app/components/djgraph/__tests__/Collapse.test.jsx +51 -0
- package/src/app/components/djgraph/__tests__/DJNode.test.tsx +24 -0
- package/src/app/components/djgraph/__tests__/DJNodeColumns.test.jsx +83 -0
- package/src/app/components/djgraph/__tests__/DJNodeDimensions.test.jsx +118 -0
- package/src/app/components/djgraph/__tests__/__snapshots__/DJNode.test.tsx.snap +117 -0
- package/src/app/constants.js +2 -0
- package/src/app/icons/AlertIcon.jsx +32 -0
- package/src/app/icons/CollapsedIcon.jsx +15 -0
- package/src/app/icons/DJLogo.jsx +36 -0
- package/src/app/icons/DeleteIcon.jsx +21 -0
- package/src/app/icons/EditIcon.jsx +18 -0
- package/src/app/icons/ExpandedIcon.jsx +15 -0
- package/src/app/icons/HorizontalHierarchyIcon.jsx +15 -0
- package/src/app/icons/InvalidIcon.jsx +14 -0
- package/src/app/icons/LoadingIcon.jsx +14 -0
- package/src/app/icons/PythonIcon.jsx +52 -0
- package/src/app/icons/TableIcon.jsx +14 -0
- package/src/app/icons/ValidIcon.jsx +14 -0
- package/src/app/index.tsx +108 -0
- package/src/app/pages/AddEditNodePage/FormikSelect.jsx +46 -0
- package/src/app/pages/AddEditNodePage/FullNameField.jsx +37 -0
- package/src/app/pages/AddEditNodePage/Loadable.jsx +16 -0
- package/src/app/pages/AddEditNodePage/NodeQueryField.jsx +89 -0
- package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormFailed.test.jsx +103 -0
- package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormSuccess.test.jsx +132 -0
- package/src/app/pages/AddEditNodePage/__tests__/FormikSelect.test.jsx +75 -0
- package/src/app/pages/AddEditNodePage/__tests__/FullNameField.test.jsx +31 -0
- package/src/app/pages/AddEditNodePage/__tests__/NodeQueryField.test.jsx +30 -0
- package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/AddEditNodePageFormFailed.test.jsx.snap +54 -0
- package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/AddEditNodePageFormSuccess.test.jsx.snap +3 -0
- package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/index.test.jsx.snap +3 -0
- package/src/app/pages/AddEditNodePage/__tests__/index.test.jsx +180 -0
- package/src/app/pages/AddEditNodePage/index.jsx +396 -0
- package/src/app/pages/AddEditTagPage/Loadable.jsx +16 -0
- package/src/app/pages/AddEditTagPage/__tests__/AddEditTagPage.test.jsx +107 -0
- package/src/app/pages/AddEditTagPage/index.jsx +132 -0
- package/src/app/pages/LoginPage/LoginForm.jsx +124 -0
- package/src/app/pages/LoginPage/SignupForm.jsx +156 -0
- package/src/app/pages/LoginPage/__tests__/index.test.jsx +97 -0
- package/src/app/pages/LoginPage/assets/sign-in-with-github.png +0 -0
- package/src/app/pages/LoginPage/assets/sign-in-with-google.png +0 -0
- package/src/app/pages/LoginPage/index.jsx +17 -0
- package/src/app/pages/NamespacePage/AddNamespacePopover.jsx +85 -0
- package/src/app/pages/NamespacePage/Explorer.jsx +57 -0
- package/src/app/pages/NamespacePage/Loadable.jsx +16 -0
- package/src/app/pages/NamespacePage/__tests__/index.test.jsx +217 -0
- package/src/app/pages/NamespacePage/index.jsx +199 -0
- package/src/app/pages/NodePage/AddBackfillPopover.jsx +166 -0
- package/src/app/pages/NodePage/AddMaterializationPopover.jsx +161 -0
- package/src/app/pages/NodePage/ClientCodePopover.jsx +46 -0
- package/src/app/pages/NodePage/EditColumnPopover.jsx +116 -0
- package/src/app/pages/NodePage/LinkDimensionPopover.jsx +149 -0
- package/src/app/pages/NodePage/Loadable.jsx +16 -0
- package/src/app/pages/NodePage/NodeColumnTab.jsx +200 -0
- package/src/app/pages/NodePage/NodeGraphTab.jsx +112 -0
- package/src/app/pages/NodePage/NodeHistory.jsx +212 -0
- package/src/app/pages/NodePage/NodeInfoTab.jsx +212 -0
- package/src/app/pages/NodePage/NodeLineageTab.jsx +84 -0
- package/src/app/pages/NodePage/NodeMaterializationTab.jsx +233 -0
- package/src/app/pages/NodePage/NodeSQLTab.jsx +82 -0
- package/src/app/pages/NodePage/NodeStatus.jsx +28 -0
- package/src/app/pages/NodePage/NodesWithDimension.jsx +42 -0
- package/src/app/pages/NodePage/PartitionColumnPopover.jsx +153 -0
- package/src/app/pages/NodePage/__tests__/AddBackfillPopover.test.jsx +47 -0
- package/src/app/pages/NodePage/__tests__/ClientCodePopover.test.jsx +49 -0
- package/src/app/pages/NodePage/__tests__/EditColumnPopover.test.jsx +148 -0
- package/src/app/pages/NodePage/__tests__/LinkDimensionPopover.test.jsx +165 -0
- package/src/app/pages/NodePage/__tests__/NodeGraphTab.test.jsx +591 -0
- package/src/app/pages/NodePage/__tests__/NodeLineageTab.test.jsx +57 -0
- package/src/app/pages/NodePage/__tests__/NodePage.test.jsx +757 -0
- package/src/app/pages/NodePage/__tests__/NodeWithDimension.test.jsx +175 -0
- package/src/app/pages/NodePage/__tests__/__snapshots__/NodePage.test.jsx.snap +403 -0
- package/src/app/pages/NodePage/index.jsx +210 -0
- package/src/app/pages/NotFoundPage/Loadable.tsx +14 -0
- package/src/app/pages/NotFoundPage/__tests__/index.test.jsx +16 -0
- package/src/app/pages/NotFoundPage/index.tsx +23 -0
- package/src/app/pages/RegisterTablePage/Loadable.jsx +16 -0
- package/src/app/pages/RegisterTablePage/__tests__/RegisterTablePage.test.jsx +110 -0
- package/src/app/pages/RegisterTablePage/__tests__/__snapshots__/RegisterTablePage.test.jsx.snap +37 -0
- package/src/app/pages/RegisterTablePage/index.jsx +142 -0
- package/src/app/pages/Root/Loadable.tsx +14 -0
- package/src/app/pages/Root/__tests__/index.test.jsx +77 -0
- package/src/app/pages/Root/assets/dj-logo.png +0 -0
- package/src/app/pages/Root/index.tsx +70 -0
- package/src/app/pages/SQLBuilderPage/Loadable.jsx +16 -0
- package/src/app/pages/SQLBuilderPage/__tests__/index.test.jsx +173 -0
- package/src/app/pages/SQLBuilderPage/index.jsx +390 -0
- package/src/app/pages/TagPage/Loadable.jsx +16 -0
- package/src/app/pages/TagPage/__tests__/TagPage.test.jsx +70 -0
- package/src/app/pages/TagPage/index.jsx +79 -0
- package/src/app/providers/djclient.jsx +5 -0
- package/src/app/services/DJService.js +665 -0
- package/src/app/services/__tests__/DJService.test.jsx +804 -0
- package/src/index.tsx +48 -0
- package/src/mocks/mockNodes.jsx +1430 -0
- package/src/react-app-env.d.ts +4 -0
- package/src/reportWebVitals.ts +15 -0
- package/src/setupTests.ts +36 -0
- package/src/styles/dag.css +228 -0
- package/src/styles/index.css +1083 -0
- package/src/styles/loading.css +34 -0
- package/src/styles/login.css +81 -0
- package/src/styles/node-creation.scss +197 -0
- package/src/styles/styles.scss +44 -0
- package/src/styles/styles.scss.d.ts +9 -0
- package/src/utils/__tests__/__snapshots__/loadable.test.tsx.snap +17 -0
- package/src/utils/__tests__/loadable.test.tsx +53 -0
- package/src/utils/__tests__/request.test.ts +82 -0
- package/src/utils/form.jsx +23 -0
- package/src/utils/loadable.tsx +30 -0
- package/src/utils/request.ts +54 -0
- package/tsconfig.json +34 -0
- package/webpack.config.js +118 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, fireEvent, waitFor, screen } from '@testing-library/react';
|
|
3
|
+
import EditColumnPopover from '../EditColumnPopover';
|
|
4
|
+
import DJClientContext from '../../../providers/djclient';
|
|
5
|
+
|
|
6
|
+
const mockDjClient = {
|
|
7
|
+
DataJunctionAPI: {
|
|
8
|
+
setAttributes: jest.fn(),
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
describe('<EditColumnPopover />', () => {
|
|
13
|
+
it('renders correctly and handles form submission', async () => {
|
|
14
|
+
// Mock necessary data
|
|
15
|
+
const column = {
|
|
16
|
+
name: 'column1',
|
|
17
|
+
dimension: { name: 'dimension1' },
|
|
18
|
+
attributes: [
|
|
19
|
+
{ attribute_type: { name: 'primary_key', namespace: 'system' } },
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
const node = { name: 'default.node1' };
|
|
23
|
+
const options = [
|
|
24
|
+
{ value: 'dimension', label: 'Dimension' },
|
|
25
|
+
{ value: 'primary_key', label: 'Primary Key' },
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
// Mock onSubmit function
|
|
29
|
+
const onSubmitMock = jest.fn();
|
|
30
|
+
|
|
31
|
+
mockDjClient.DataJunctionAPI.setAttributes.mockReturnValue({
|
|
32
|
+
status: 201,
|
|
33
|
+
json: [
|
|
34
|
+
{
|
|
35
|
+
name: 'id',
|
|
36
|
+
type: 'int',
|
|
37
|
+
attributes: [
|
|
38
|
+
{ attribute_type: { name: 'primary_key', namespace: 'system' } },
|
|
39
|
+
],
|
|
40
|
+
dimension: null,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Render the component
|
|
46
|
+
const { getByLabelText, getByText, getByTestId } = render(
|
|
47
|
+
<DJClientContext.Provider value={mockDjClient}>
|
|
48
|
+
<EditColumnPopover
|
|
49
|
+
column={column}
|
|
50
|
+
node={node}
|
|
51
|
+
options={options}
|
|
52
|
+
onSubmit={onSubmitMock}
|
|
53
|
+
/>
|
|
54
|
+
</DJClientContext.Provider>,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
// Open the popover
|
|
58
|
+
fireEvent.click(getByLabelText('EditColumn'));
|
|
59
|
+
|
|
60
|
+
// Click on one attribute in the select
|
|
61
|
+
const editAttributes = getByTestId('edit-attributes');
|
|
62
|
+
fireEvent.keyDown(editAttributes.firstChild, { key: 'ArrowDown' });
|
|
63
|
+
fireEvent.click(screen.getByText('Dimension'));
|
|
64
|
+
fireEvent.click(getByText('Save'));
|
|
65
|
+
getByText('Save').click();
|
|
66
|
+
|
|
67
|
+
// Expect setAttributes to be called
|
|
68
|
+
await waitFor(() => {
|
|
69
|
+
expect(mockDjClient.DataJunctionAPI.setAttributes).toHaveBeenCalled();
|
|
70
|
+
expect(getByText('Saved!')).toBeInTheDocument();
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Click on two attributes in the select
|
|
74
|
+
fireEvent.keyDown(editAttributes.firstChild, { key: 'ArrowDown' });
|
|
75
|
+
fireEvent.click(screen.getByText('Dimension'));
|
|
76
|
+
fireEvent.click(screen.getByText('Primary Key'));
|
|
77
|
+
fireEvent.click(getByText('Save'));
|
|
78
|
+
getByText('Save').click();
|
|
79
|
+
|
|
80
|
+
// Expect setAttributes to be called
|
|
81
|
+
await waitFor(() => {
|
|
82
|
+
expect(mockDjClient.DataJunctionAPI.setAttributes).toHaveBeenCalledWith(
|
|
83
|
+
'default.node1',
|
|
84
|
+
'column1',
|
|
85
|
+
['primary_key', 'dimension'],
|
|
86
|
+
);
|
|
87
|
+
expect(getByText('Saved!')).toBeInTheDocument();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// Close the popover
|
|
91
|
+
fireEvent.click(getByLabelText('EditColumn'));
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it('handles failed form submission', async () => {
|
|
95
|
+
// Mock necessary data
|
|
96
|
+
const column = {
|
|
97
|
+
name: 'column1',
|
|
98
|
+
dimension: { name: 'dimension1' },
|
|
99
|
+
attributes: [
|
|
100
|
+
{ attribute_type: { name: 'primary_key', namespace: 'system' } },
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
const node = { name: 'default.node1' };
|
|
104
|
+
const options = [
|
|
105
|
+
{ value: 'dimension', label: 'Dimension' },
|
|
106
|
+
{ value: 'primary_key', label: 'Primary Key' },
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
// Mock onSubmit function
|
|
110
|
+
const onSubmitMock = jest.fn();
|
|
111
|
+
|
|
112
|
+
mockDjClient.DataJunctionAPI.setAttributes.mockReturnValue({
|
|
113
|
+
status: 500,
|
|
114
|
+
json: { message: 'bad request' },
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Render the component
|
|
118
|
+
const { getByLabelText, getByText, getByTestId } = render(
|
|
119
|
+
<DJClientContext.Provider value={mockDjClient}>
|
|
120
|
+
<EditColumnPopover
|
|
121
|
+
column={column}
|
|
122
|
+
node={node}
|
|
123
|
+
options={options}
|
|
124
|
+
onSubmit={onSubmitMock}
|
|
125
|
+
/>
|
|
126
|
+
</DJClientContext.Provider>,
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
// Open the popover
|
|
130
|
+
fireEvent.click(getByLabelText('EditColumn'));
|
|
131
|
+
|
|
132
|
+
// Click on one attribute in the select
|
|
133
|
+
const editAttributes = getByTestId('edit-attributes');
|
|
134
|
+
fireEvent.keyDown(editAttributes.firstChild, { key: 'ArrowDown' });
|
|
135
|
+
fireEvent.click(screen.getByText('Dimension'));
|
|
136
|
+
fireEvent.click(getByText('Save'));
|
|
137
|
+
getByText('Save').click();
|
|
138
|
+
|
|
139
|
+
// Expect setAttributes to be called and the failure message to show up
|
|
140
|
+
await waitFor(() => {
|
|
141
|
+
expect(mockDjClient.DataJunctionAPI.setAttributes).toHaveBeenCalled();
|
|
142
|
+
expect(getByText('bad request')).toBeInTheDocument();
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Close the popover
|
|
146
|
+
fireEvent.click(getByLabelText('EditColumn'));
|
|
147
|
+
});
|
|
148
|
+
});
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, fireEvent, waitFor, screen } from '@testing-library/react';
|
|
3
|
+
import LinkDimensionPopover from '../LinkDimensionPopover';
|
|
4
|
+
import DJClientContext from '../../../providers/djclient';
|
|
5
|
+
|
|
6
|
+
const mockDjClient = {
|
|
7
|
+
DataJunctionAPI: {
|
|
8
|
+
linkDimension: jest.fn(),
|
|
9
|
+
unlinkDimension: jest.fn(),
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
describe('<LinkDimensionPopover />', () => {
|
|
14
|
+
it('renders correctly and handles form submission', async () => {
|
|
15
|
+
// Mock necessary data
|
|
16
|
+
const column = {
|
|
17
|
+
name: 'column1',
|
|
18
|
+
dimension: { name: 'default.dimension1' },
|
|
19
|
+
};
|
|
20
|
+
const node = { name: 'default.node1' };
|
|
21
|
+
const options = [
|
|
22
|
+
{ value: 'Remove', label: '[Remove dimension link]' },
|
|
23
|
+
{ value: 'default.dimension1', label: 'Dimension 1' },
|
|
24
|
+
{ value: 'default.dimension2', label: 'Dimension 2' },
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
// Mock onSubmit function
|
|
28
|
+
const onSubmitMock = jest.fn();
|
|
29
|
+
|
|
30
|
+
mockDjClient.DataJunctionAPI.linkDimension.mockReturnValue({
|
|
31
|
+
status: 200,
|
|
32
|
+
json: { message: 'Success' },
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
mockDjClient.DataJunctionAPI.unlinkDimension.mockReturnValue({
|
|
36
|
+
status: 200,
|
|
37
|
+
json: { message: 'Success' },
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Render the component
|
|
41
|
+
const { getByLabelText, getByText, getByTestId } = render(
|
|
42
|
+
<DJClientContext.Provider value={mockDjClient}>
|
|
43
|
+
<LinkDimensionPopover
|
|
44
|
+
column={column}
|
|
45
|
+
node={node}
|
|
46
|
+
options={options}
|
|
47
|
+
onSubmit={onSubmitMock}
|
|
48
|
+
/>
|
|
49
|
+
</DJClientContext.Provider>,
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
// Open the popover
|
|
53
|
+
fireEvent.click(getByLabelText('LinkDimension'));
|
|
54
|
+
|
|
55
|
+
// Click on a dimension and save
|
|
56
|
+
const linkDimension = getByTestId('link-dimension');
|
|
57
|
+
fireEvent.keyDown(linkDimension.firstChild, { key: 'ArrowDown' });
|
|
58
|
+
fireEvent.click(screen.getByText('Dimension 1'));
|
|
59
|
+
fireEvent.click(getByText('Save'));
|
|
60
|
+
getByText('Save').click();
|
|
61
|
+
|
|
62
|
+
// Expect linkDimension to be called
|
|
63
|
+
await waitFor(() => {
|
|
64
|
+
expect(mockDjClient.DataJunctionAPI.linkDimension).toHaveBeenCalledWith(
|
|
65
|
+
'default.node1',
|
|
66
|
+
'column1',
|
|
67
|
+
'default.dimension1',
|
|
68
|
+
);
|
|
69
|
+
expect(getByText('Saved!')).toBeInTheDocument();
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Click on the 'Remove' option and save
|
|
73
|
+
fireEvent.keyDown(linkDimension.firstChild, { key: 'ArrowDown' });
|
|
74
|
+
fireEvent.click(screen.getByText('[Remove dimension link]'));
|
|
75
|
+
fireEvent.click(getByText('Save'));
|
|
76
|
+
getByText('Save').click();
|
|
77
|
+
|
|
78
|
+
// Expect unlinkDimension to be called
|
|
79
|
+
await waitFor(() => {
|
|
80
|
+
expect(mockDjClient.DataJunctionAPI.unlinkDimension).toHaveBeenCalledWith(
|
|
81
|
+
'default.node1',
|
|
82
|
+
'column1',
|
|
83
|
+
'default.dimension1',
|
|
84
|
+
);
|
|
85
|
+
expect(getByText('Removed dimension link!')).toBeInTheDocument();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('handles failed form submission', async () => {
|
|
90
|
+
// Mock necessary data
|
|
91
|
+
const column = {
|
|
92
|
+
name: 'column1',
|
|
93
|
+
dimension: { name: 'default.dimension1' },
|
|
94
|
+
};
|
|
95
|
+
const node = { name: 'default.node1' };
|
|
96
|
+
const options = [
|
|
97
|
+
{ value: 'Remove', label: '[Remove dimension link]' },
|
|
98
|
+
{ value: 'default.dimension1', label: 'Dimension 1' },
|
|
99
|
+
{ value: 'default.dimension2', label: 'Dimension 2' },
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
// Mock onSubmit function
|
|
103
|
+
const onSubmitMock = jest.fn();
|
|
104
|
+
|
|
105
|
+
mockDjClient.DataJunctionAPI.linkDimension.mockReturnValue({
|
|
106
|
+
status: 500,
|
|
107
|
+
json: { message: 'Failed due to nonexistent dimension' },
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
mockDjClient.DataJunctionAPI.unlinkDimension.mockReturnValue({
|
|
111
|
+
status: 500,
|
|
112
|
+
json: { message: 'Failed due to no dimension link' },
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// Render the component
|
|
116
|
+
const { getByLabelText, getByText, getByTestId } = render(
|
|
117
|
+
<DJClientContext.Provider value={mockDjClient}>
|
|
118
|
+
<LinkDimensionPopover
|
|
119
|
+
column={column}
|
|
120
|
+
node={node}
|
|
121
|
+
options={options}
|
|
122
|
+
onSubmit={onSubmitMock}
|
|
123
|
+
/>
|
|
124
|
+
</DJClientContext.Provider>,
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
// Open the popover
|
|
128
|
+
fireEvent.click(getByLabelText('LinkDimension'));
|
|
129
|
+
|
|
130
|
+
// Click on a dimension and save
|
|
131
|
+
const linkDimension = getByTestId('link-dimension');
|
|
132
|
+
fireEvent.keyDown(linkDimension.firstChild, { key: 'ArrowDown' });
|
|
133
|
+
fireEvent.click(screen.getByText('Dimension 1'));
|
|
134
|
+
fireEvent.click(getByText('Save'));
|
|
135
|
+
getByText('Save').click();
|
|
136
|
+
|
|
137
|
+
// Expect linkDimension to be called
|
|
138
|
+
await waitFor(() => {
|
|
139
|
+
expect(mockDjClient.DataJunctionAPI.linkDimension).toHaveBeenCalledWith(
|
|
140
|
+
'default.node1',
|
|
141
|
+
'column1',
|
|
142
|
+
'default.dimension1',
|
|
143
|
+
);
|
|
144
|
+
expect(
|
|
145
|
+
getByText('Failed due to nonexistent dimension'),
|
|
146
|
+
).toBeInTheDocument();
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// Click on the 'Remove' option and save
|
|
150
|
+
fireEvent.keyDown(linkDimension.firstChild, { key: 'ArrowDown' });
|
|
151
|
+
fireEvent.click(screen.getByText('[Remove dimension link]'));
|
|
152
|
+
fireEvent.click(getByText('Save'));
|
|
153
|
+
getByText('Save').click();
|
|
154
|
+
|
|
155
|
+
// Expect unlinkDimension to be called
|
|
156
|
+
await waitFor(() => {
|
|
157
|
+
expect(mockDjClient.DataJunctionAPI.unlinkDimension).toHaveBeenCalledWith(
|
|
158
|
+
'default.node1',
|
|
159
|
+
'column1',
|
|
160
|
+
'default.dimension1',
|
|
161
|
+
);
|
|
162
|
+
expect(getByText('Failed due to no dimension link')).toBeInTheDocument();
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
});
|