datajunction-ui 0.0.143 → 0.0.145
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/package.json +1 -1
- package/src/app/pages/CubeBuilderPage/CubePreviewPanel.jsx +173 -0
- package/src/app/pages/CubeBuilderPage/DimensionsSelect.jsx +268 -97
- package/src/app/pages/CubeBuilderPage/MetricsSelect.jsx +273 -60
- package/src/app/pages/CubeBuilderPage/__tests__/CubePreviewPanel.test.jsx +108 -0
- package/src/app/pages/CubeBuilderPage/__tests__/DimensionsSelect.test.jsx +229 -0
- package/src/app/pages/CubeBuilderPage/__tests__/MetricsSelect.test.jsx +137 -0
- package/src/app/pages/CubeBuilderPage/__tests__/index.test.jsx +145 -37
- package/src/app/pages/CubeBuilderPage/index.jsx +367 -125
- package/src/app/pages/CubeBuilderPage/styles.css +489 -0
- package/src/app/pages/NamespacePage/__tests__/index.test.jsx +4 -4
- package/src/app/pages/NamespacePage/index.jsx +12 -8
- package/src/app/pages/NodePage/NodeInfoTab.jsx +12 -1
- package/src/app/services/DJService.js +70 -0
- package/src/app/services/__tests__/DJService.test.jsx +100 -0
|
@@ -2079,6 +2079,106 @@ describe('DataJunctionAPI', () => {
|
|
|
2079
2079
|
expect(result).toBeNull();
|
|
2080
2080
|
});
|
|
2081
2081
|
|
|
2082
|
+
// searchMetrics — wraps findNodes(METRIC) and shapes results for react-select
|
|
2083
|
+
it('calls searchMetrics correctly', async () => {
|
|
2084
|
+
fetch.mockResponseOnce(
|
|
2085
|
+
JSON.stringify({
|
|
2086
|
+
data: {
|
|
2087
|
+
findNodes: [
|
|
2088
|
+
{
|
|
2089
|
+
name: 'default.revenue',
|
|
2090
|
+
current: { displayName: 'Revenue' },
|
|
2091
|
+
gitInfo: { branch: 'main', isDefaultBranch: true },
|
|
2092
|
+
},
|
|
2093
|
+
{
|
|
2094
|
+
name: 'default.orders',
|
|
2095
|
+
current: { displayName: null },
|
|
2096
|
+
gitInfo: null,
|
|
2097
|
+
},
|
|
2098
|
+
],
|
|
2099
|
+
},
|
|
2100
|
+
}),
|
|
2101
|
+
);
|
|
2102
|
+
|
|
2103
|
+
const result = await DataJunctionAPI.searchMetrics('rev', 25);
|
|
2104
|
+
expect(fetch).toHaveBeenCalledWith(
|
|
2105
|
+
'http://localhost:8000/graphql',
|
|
2106
|
+
expect.objectContaining({ method: 'POST', credentials: 'include' }),
|
|
2107
|
+
);
|
|
2108
|
+
const sentBody = JSON.parse(fetch.mock.calls[0][1].body);
|
|
2109
|
+
expect(sentBody.variables).toEqual({ q: 'rev', limit: 25 });
|
|
2110
|
+
expect(result).toEqual([
|
|
2111
|
+
{
|
|
2112
|
+
value: 'default.revenue',
|
|
2113
|
+
label: 'Revenue',
|
|
2114
|
+
name: 'default.revenue',
|
|
2115
|
+
gitInfo: { branch: 'main', isDefaultBranch: true },
|
|
2116
|
+
},
|
|
2117
|
+
// Falls back to name when displayName is missing.
|
|
2118
|
+
{
|
|
2119
|
+
value: 'default.orders',
|
|
2120
|
+
label: 'default.orders',
|
|
2121
|
+
name: 'default.orders',
|
|
2122
|
+
gitInfo: null,
|
|
2123
|
+
},
|
|
2124
|
+
]);
|
|
2125
|
+
});
|
|
2126
|
+
|
|
2127
|
+
it('searchMetrics returns [] when the GraphQL response has no data', async () => {
|
|
2128
|
+
fetch.mockResponseOnce(JSON.stringify({}));
|
|
2129
|
+
const result = await DataJunctionAPI.searchMetrics('whatever');
|
|
2130
|
+
expect(result).toEqual([]);
|
|
2131
|
+
});
|
|
2132
|
+
|
|
2133
|
+
it('searchMetrics defaults limit to 50', async () => {
|
|
2134
|
+
fetch.mockResponseOnce(JSON.stringify({ data: { findNodes: [] } }));
|
|
2135
|
+
await DataJunctionAPI.searchMetrics('rev');
|
|
2136
|
+
const sentBody = JSON.parse(fetch.mock.calls[0][1].body);
|
|
2137
|
+
expect(sentBody.variables.limit).toBe(50);
|
|
2138
|
+
});
|
|
2139
|
+
|
|
2140
|
+
// getMetricsInfo — bulk-fetches existing metric metadata, used to populate
|
|
2141
|
+
// branch badges on previously-selected chips when editing a cube.
|
|
2142
|
+
it('calls getMetricsInfo correctly and shapes the response', async () => {
|
|
2143
|
+
fetch.mockResponseOnce(
|
|
2144
|
+
JSON.stringify({
|
|
2145
|
+
data: {
|
|
2146
|
+
findNodes: [
|
|
2147
|
+
{
|
|
2148
|
+
name: 'default.revenue',
|
|
2149
|
+
current: { displayName: 'Revenue' },
|
|
2150
|
+
gitInfo: { branch: 'main', isDefaultBranch: true },
|
|
2151
|
+
},
|
|
2152
|
+
],
|
|
2153
|
+
},
|
|
2154
|
+
}),
|
|
2155
|
+
);
|
|
2156
|
+
|
|
2157
|
+
const result = await DataJunctionAPI.getMetricsInfo(['default.revenue']);
|
|
2158
|
+
const sentBody = JSON.parse(fetch.mock.calls[0][1].body);
|
|
2159
|
+
expect(sentBody.variables).toEqual({ names: ['default.revenue'] });
|
|
2160
|
+
expect(result).toEqual([
|
|
2161
|
+
{
|
|
2162
|
+
value: 'default.revenue',
|
|
2163
|
+
label: 'Revenue',
|
|
2164
|
+
name: 'default.revenue',
|
|
2165
|
+
gitInfo: { branch: 'main', isDefaultBranch: true },
|
|
2166
|
+
},
|
|
2167
|
+
]);
|
|
2168
|
+
});
|
|
2169
|
+
|
|
2170
|
+
it('getMetricsInfo short-circuits on empty/null input without hitting fetch', async () => {
|
|
2171
|
+
expect(await DataJunctionAPI.getMetricsInfo([])).toEqual([]);
|
|
2172
|
+
expect(await DataJunctionAPI.getMetricsInfo(null)).toEqual([]);
|
|
2173
|
+
expect(fetch).not.toHaveBeenCalled();
|
|
2174
|
+
});
|
|
2175
|
+
|
|
2176
|
+
it('getMetricsInfo returns [] when GraphQL has no data', async () => {
|
|
2177
|
+
fetch.mockResponseOnce(JSON.stringify({}));
|
|
2178
|
+
const result = await DataJunctionAPI.getMetricsInfo(['anything']);
|
|
2179
|
+
expect(result).toEqual([]);
|
|
2180
|
+
});
|
|
2181
|
+
|
|
2082
2182
|
// Test logout (lines 225-230)
|
|
2083
2183
|
it('calls logout correctly', async () => {
|
|
2084
2184
|
fetch.mockResponseOnce('', { status: 200 });
|