datajunction-ui 0.0.1-rc.2 → 0.0.1-rc.22

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 (135) hide show
  1. package/.env +1 -0
  2. package/.prettierignore +3 -1
  3. package/dj-logo.svg +10 -0
  4. package/package.json +43 -13
  5. package/public/favicon.ico +0 -0
  6. package/src/__tests__/reportWebVitals.test.jsx +44 -0
  7. package/src/app/__tests__/__snapshots__/index.test.tsx.snap +5 -39
  8. package/src/app/components/DeleteNode.jsx +79 -0
  9. package/src/app/components/ListGroupItem.jsx +8 -1
  10. package/src/app/components/NamespaceHeader.jsx +4 -13
  11. package/src/app/components/QueryInfo.jsx +77 -0
  12. package/src/app/components/Tab.jsx +3 -2
  13. package/src/app/components/ToggleSwitch.jsx +20 -0
  14. package/src/app/components/__tests__/QueryInfo.test.jsx +55 -0
  15. package/src/app/components/__tests__/Tab.test.jsx +27 -0
  16. package/src/app/components/__tests__/ToggleSwitch.test.jsx +43 -0
  17. package/src/app/components/__tests__/__snapshots__/ListGroupItem.test.tsx.snap +3 -0
  18. package/src/app/components/__tests__/__snapshots__/NamespaceHeader.test.jsx.snap +2 -18
  19. package/src/app/components/djgraph/Collapse.jsx +46 -0
  20. package/src/app/components/djgraph/DJNode.jsx +60 -82
  21. package/src/app/components/djgraph/DJNodeColumns.jsx +71 -0
  22. package/src/app/components/djgraph/DJNodeDimensions.jsx +75 -0
  23. package/src/app/components/djgraph/LayoutFlow.jsx +104 -0
  24. package/src/app/components/djgraph/__tests__/Collapse.test.jsx +51 -0
  25. package/src/app/components/djgraph/__tests__/DJNodeColumns.test.jsx +83 -0
  26. package/src/app/components/djgraph/__tests__/DJNodeDimensions.test.jsx +118 -0
  27. package/src/app/components/djgraph/__tests__/__snapshots__/DJNode.test.tsx.snap +84 -40
  28. package/src/app/constants.js +2 -0
  29. package/src/app/icons/AlertIcon.jsx +32 -0
  30. package/src/app/icons/CollapsedIcon.jsx +15 -0
  31. package/src/app/icons/DJLogo.jsx +36 -0
  32. package/src/app/icons/DeleteIcon.jsx +21 -0
  33. package/src/app/icons/EditIcon.jsx +18 -0
  34. package/src/app/icons/ExpandedIcon.jsx +15 -0
  35. package/src/app/icons/HorizontalHierarchyIcon.jsx +15 -0
  36. package/src/app/icons/InvalidIcon.jsx +14 -0
  37. package/src/app/icons/PythonIcon.jsx +52 -0
  38. package/src/app/icons/TableIcon.jsx +14 -0
  39. package/src/app/icons/ValidIcon.jsx +14 -0
  40. package/src/app/index.tsx +79 -26
  41. package/src/app/pages/AddEditNodePage/FormikSelect.jsx +46 -0
  42. package/src/app/pages/AddEditNodePage/FullNameField.jsx +37 -0
  43. package/src/app/pages/AddEditNodePage/Loadable.jsx +16 -0
  44. package/src/app/pages/AddEditNodePage/NodeQueryField.jsx +89 -0
  45. package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormFailed.test.jsx +77 -0
  46. package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormSuccess.test.jsx +93 -0
  47. package/src/app/pages/AddEditNodePage/__tests__/FormikSelect.test.jsx +75 -0
  48. package/src/app/pages/AddEditNodePage/__tests__/FullNameField.test.jsx +31 -0
  49. package/src/app/pages/AddEditNodePage/__tests__/NodeQueryField.test.jsx +30 -0
  50. package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/AddEditNodePageFormFailed.test.jsx.snap +53 -0
  51. package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/AddEditNodePageFormSuccess.test.jsx.snap +53 -0
  52. package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/index.test.jsx.snap +3 -0
  53. package/src/app/pages/AddEditNodePage/__tests__/index.test.jsx +178 -0
  54. package/src/app/pages/AddEditNodePage/index.jsx +357 -0
  55. package/src/app/pages/LoginPage/__tests__/index.test.jsx +70 -0
  56. package/src/app/pages/LoginPage/assets/sign-in-with-github.png +0 -0
  57. package/src/app/pages/LoginPage/assets/sign-in-with-google.png +0 -0
  58. package/src/app/pages/LoginPage/index.jsx +90 -0
  59. package/src/app/pages/NamespacePage/Explorer.jsx +57 -0
  60. package/src/app/pages/NamespacePage/Loadable.jsx +9 -7
  61. package/src/app/pages/NamespacePage/__tests__/index.test.jsx +95 -0
  62. package/src/app/pages/NamespacePage/index.jsx +131 -31
  63. package/src/app/pages/NodePage/ClientCodePopover.jsx +32 -0
  64. package/src/app/pages/NodePage/EditColumnPopover.jsx +102 -0
  65. package/src/app/pages/NodePage/LinkDimensionPopover.jsx +135 -0
  66. package/src/app/pages/NodePage/Loadable.jsx +9 -7
  67. package/src/app/pages/NodePage/NodeColumnTab.jsx +106 -27
  68. package/src/app/pages/NodePage/NodeGraphTab.jsx +94 -148
  69. package/src/app/pages/NodePage/NodeHistory.jsx +212 -0
  70. package/src/app/pages/NodePage/NodeInfoTab.jsx +166 -51
  71. package/src/app/pages/NodePage/NodeLineageTab.jsx +84 -0
  72. package/src/app/pages/NodePage/NodeMaterializationTab.jsx +174 -0
  73. package/src/app/pages/NodePage/NodeSQLTab.jsx +82 -0
  74. package/src/app/pages/NodePage/NodeStatus.jsx +14 -20
  75. package/src/app/pages/NodePage/NodesWithDimension.jsx +42 -0
  76. package/src/app/pages/NodePage/__tests__/ClientCodePopover.test.jsx +49 -0
  77. package/src/app/pages/NodePage/__tests__/EditColumnPopover.test.jsx +148 -0
  78. package/src/app/pages/NodePage/__tests__/LinkDimensionPopover.test.jsx +165 -0
  79. package/src/app/pages/NodePage/__tests__/NodeGraphTab.test.jsx +591 -0
  80. package/src/app/pages/NodePage/__tests__/NodeLineageTab.test.jsx +57 -0
  81. package/src/app/pages/NodePage/__tests__/NodePage.test.jsx +725 -0
  82. package/src/app/pages/NodePage/__tests__/NodeWithDimension.test.jsx +175 -0
  83. package/src/app/pages/NodePage/__tests__/__snapshots__/NodePage.test.jsx.snap +402 -0
  84. package/src/app/pages/NodePage/index.jsx +151 -41
  85. package/src/app/pages/NotFoundPage/__tests__/index.test.jsx +16 -0
  86. package/src/app/pages/RegisterTablePage/Loadable.jsx +16 -0
  87. package/src/app/pages/RegisterTablePage/index.jsx +163 -0
  88. package/src/app/pages/Root/__tests__/index.test.jsx +77 -0
  89. package/src/app/pages/Root/index.tsx +32 -4
  90. package/src/app/pages/SQLBuilderPage/Loadable.jsx +16 -0
  91. package/src/app/pages/SQLBuilderPage/__tests__/index.test.jsx +173 -0
  92. package/src/app/pages/SQLBuilderPage/index.jsx +390 -0
  93. package/src/app/providers/djclient.jsx +5 -0
  94. package/src/app/services/DJService.js +388 -22
  95. package/src/app/services/__tests__/DJService.test.jsx +609 -0
  96. package/src/mocks/mockNodes.jsx +1397 -0
  97. package/src/setupTests.ts +31 -1
  98. package/src/styles/dag.css +111 -5
  99. package/src/styles/index.css +467 -31
  100. package/src/styles/login.css +67 -0
  101. package/src/styles/node-creation.scss +197 -0
  102. package/src/styles/styles.scss +44 -0
  103. package/src/styles/styles.scss.d.ts +9 -0
  104. package/src/utils/form.jsx +23 -0
  105. package/tsconfig.json +1 -5
  106. package/webpack.config.js +29 -6
  107. package/.babelrc +0 -4
  108. package/.env.local +0 -4
  109. package/.env.production +0 -1
  110. package/.github/pull_request_template.md +0 -11
  111. package/.github/workflows/ci.yml +0 -33
  112. package/.vscode/extensions.json +0 -7
  113. package/.vscode/launch.json +0 -15
  114. package/.vscode/settings.json +0 -25
  115. package/Dockerfile +0 -7
  116. package/dist/5fa71a03d45dc2e3d61447f3013a303d.png +0 -0
  117. package/dist/index.html +0 -1
  118. package/dist/main.js +0 -23303
  119. package/dist/static/main.05a86d446163fd5f17d3.js +0 -2
  120. package/dist/static/main.05a86d446163fd5f17d3.js.LICENSE.txt +0 -98
  121. package/dist/static/main.9e53bed734dae98e5b10.js +0 -2
  122. package/dist/static/main.9e53bed734dae98e5b10.js.LICENSE.txt +0 -98
  123. package/dist/static/main.js +0 -2
  124. package/dist/static/main.js.LICENSE.txt +0 -98
  125. package/dist/static/vendor.05a86d446163fd5f17d3.js +0 -2
  126. package/dist/static/vendor.05a86d446163fd5f17d3.js.LICENSE.txt +0 -29
  127. package/dist/static/vendor.9e53bed734dae98e5b10.js +0 -2
  128. package/dist/static/vendor.9e53bed734dae98e5b10.js.LICENSE.txt +0 -29
  129. package/dist/static/vendor.js +0 -2
  130. package/dist/static/vendor.js.LICENSE.txt +0 -29
  131. package/dist/vendor.js +0 -281
  132. package/src/app/pages/ListNamespacesPage/Loadable.jsx +0 -14
  133. package/src/app/pages/ListNamespacesPage/index.jsx +0 -52
  134. package/src/app/pages/NamespacePage/__tests__/__snapshots__/index.test.tsx.snap +0 -45
  135. package/src/app/pages/NamespacePage/__tests__/index.test.tsx +0 -14
@@ -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
+ });