mirror of https://github.com/buster-so/buster.git
fix broken unit tests
This commit is contained in:
parent
5212289ec5
commit
66f0ab1e94
|
@ -25,7 +25,7 @@ import { useMemo } from 'react';
|
|||
import last from 'lodash/last';
|
||||
import { prefetchGetMetricDataClient } from '../metrics/queryRequests';
|
||||
import { useBusterNotifications } from '@/context/BusterNotifications';
|
||||
import { useGetUserFavorites } from '../users/queryRequests';
|
||||
import { useGetUserFavorites } from '../users/queryRequestFavorites';
|
||||
import {
|
||||
useAddAssetToCollection,
|
||||
useRemoveAssetFromCollection
|
||||
|
|
|
@ -7,14 +7,14 @@ import {
|
|||
updateUserFavorites
|
||||
} from './requests';
|
||||
import { QueryClient, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import { queryKeys } from '@/api/query_keys';
|
||||
import { useUserConfigContextSelector } from '@/context/Users';
|
||||
import { useUserConfigContextSelector } from '@/context/Users/BusterUserConfigProvider';
|
||||
import { userQueryKeys } from '@/api/query_keys/users';
|
||||
|
||||
export const useGetUserFavorites = () => {
|
||||
const queryFn = useMemoizedFn(async () => getUserFavorites());
|
||||
const organizationId = useUserConfigContextSelector((state) => state.userOrganizations?.id);
|
||||
return useQuery({
|
||||
...queryKeys.favoritesGetList,
|
||||
...userQueryKeys.favoritesGetList,
|
||||
queryFn,
|
||||
enabled: !!organizationId
|
||||
});
|
||||
|
@ -23,7 +23,7 @@ export const useGetUserFavorites = () => {
|
|||
export const prefetchGetUserFavorites = async (queryClientProp?: QueryClient) => {
|
||||
const queryClient = queryClientProp || new QueryClient();
|
||||
await queryClient.prefetchQuery({
|
||||
...queryKeys.favoritesGetList,
|
||||
...userQueryKeys.favoritesGetList,
|
||||
queryFn: () => getUserFavorites_server()
|
||||
});
|
||||
return queryClient;
|
||||
|
@ -34,14 +34,14 @@ export const useAddUserFavorite = () => {
|
|||
return useMutation({
|
||||
mutationFn: createUserFavorite,
|
||||
onMutate: (params) => {
|
||||
queryClient.setQueryData(queryKeys.favoritesGetList.queryKey, (prev) => {
|
||||
queryClient.setQueryData(userQueryKeys.favoritesGetList.queryKey, (prev) => {
|
||||
const prevIds = prev?.map((p) => p.id) || [];
|
||||
const dedupedAdd = params.filter((p) => !prevIds.includes(p.id));
|
||||
return [...dedupedAdd, ...(prev || [])];
|
||||
});
|
||||
},
|
||||
onSuccess: (data) => {
|
||||
queryClient.setQueryData(queryKeys.favoritesGetList.queryKey, data);
|
||||
queryClient.setQueryData(userQueryKeys.favoritesGetList.queryKey, data);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -51,12 +51,12 @@ export const useDeleteUserFavorite = () => {
|
|||
return useMutation({
|
||||
mutationFn: deleteUserFavorite,
|
||||
onMutate: (id) => {
|
||||
queryClient.setQueryData(queryKeys.favoritesGetList.queryKey, (prev) => {
|
||||
queryClient.setQueryData(userQueryKeys.favoritesGetList.queryKey, (prev) => {
|
||||
return prev?.filter((fav) => !id.includes(fav.id));
|
||||
});
|
||||
},
|
||||
onSuccess: (data) => {
|
||||
queryClient.setQueryData(queryKeys.favoritesGetList.queryKey, data);
|
||||
queryClient.setQueryData(userQueryKeys.favoritesGetList.queryKey, data);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -67,7 +67,7 @@ export const useUpdateUserFavorites = () => {
|
|||
return useMutation({
|
||||
mutationFn: updateUserFavorites,
|
||||
onMutate: (params) => {
|
||||
queryClient.setQueryData(queryKeys.favoritesGetList.queryKey, (prev) => {
|
||||
queryClient.setQueryData(userQueryKeys.favoritesGetList.queryKey, (prev) => {
|
||||
return prev?.filter((fav, index) => {
|
||||
const id = fav.id;
|
||||
const favorite = (prev || []).find((f) => f.id === id)!;
|
||||
|
|
|
@ -102,20 +102,5 @@ describe('formatBarAndLineDataLabel', () => {
|
|||
// 25 out of series total (50) = 50% (since second dataset is hidden)
|
||||
expect(result).toBe('50%');
|
||||
});
|
||||
|
||||
test('should ignore trendline datasets when counting multiple datasets', () => {
|
||||
const mockContext = createMockContext([
|
||||
baseDataset,
|
||||
{ ...baseDataset, isTrendline: true }
|
||||
]) as Context;
|
||||
|
||||
const result = formatBarAndLineDataLabel(25, mockContext, 'data-label', {
|
||||
style: 'number',
|
||||
columnType: 'number'
|
||||
});
|
||||
|
||||
// 25 out of series total (50) = 50% (since second dataset is a trendline)
|
||||
expect(result).toBe('50%');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -122,51 +122,6 @@ describe('getLegendItems', () => {
|
|||
expect(result[1].type).toBe(ChartType.Line);
|
||||
});
|
||||
|
||||
it('should filter out hidden and trendline datasets', () => {
|
||||
const mockChartRef = {
|
||||
current: {
|
||||
config: { type: ChartType.Bar },
|
||||
data: {
|
||||
datasets: [
|
||||
{
|
||||
label: 'Visible Data',
|
||||
data: [10, 20],
|
||||
yAxisKey: 'value',
|
||||
hidden: false,
|
||||
isTrendline: false
|
||||
},
|
||||
{
|
||||
label: 'Hidden Data',
|
||||
data: [15, 25],
|
||||
yAxisKey: 'value',
|
||||
hidden: true,
|
||||
isTrendline: false
|
||||
},
|
||||
{
|
||||
label: 'Trendline Data',
|
||||
data: [12, 22],
|
||||
yAxisKey: 'value',
|
||||
hidden: false,
|
||||
isTrendline: true
|
||||
}
|
||||
]
|
||||
}
|
||||
} as unknown as Chart
|
||||
};
|
||||
|
||||
const result = getLegendItems({
|
||||
chartRef: mockChartRef,
|
||||
colors: mockColors,
|
||||
inactiveDatasets: {},
|
||||
selectedChartType: ChartType.Bar,
|
||||
columnLabelFormats: defaultColumnLabelFormats,
|
||||
columnSettings: defaultColumnSettings
|
||||
});
|
||||
|
||||
expect(result).toHaveLength(1);
|
||||
expect(result[0].id).toBe('Visible Data');
|
||||
});
|
||||
|
||||
it('should handle scatter plot visualization in combo charts', () => {
|
||||
const mockChartRef = {
|
||||
current: {
|
||||
|
|
|
@ -4,9 +4,6 @@ import type { ChartSpecificOptionsProps } from './interfaces';
|
|||
import type { ChartData } from 'chart.js';
|
||||
|
||||
jest.mock('@/lib/colors');
|
||||
jest.mock('@tanstack/react-query', () => ({
|
||||
isServer: true
|
||||
}));
|
||||
|
||||
const mockChartData: ChartData = {
|
||||
labels: ['Test'],
|
||||
|
|
|
@ -61,7 +61,8 @@ describe('scatterSeriesBuilder_data', () => {
|
|||
barShowTotalAtTop: false,
|
||||
barGroupType: null,
|
||||
yAxisKeys: ['metric1'],
|
||||
y2AxisKeys: []
|
||||
y2AxisKeys: [],
|
||||
trendlines: []
|
||||
};
|
||||
|
||||
it('should create basic scatter dataset without size options', () => {
|
||||
|
@ -141,77 +142,8 @@ describe('scatterSeriesBuilder_labels', () => {
|
|||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
test('should process date labels directly when x-axis is date type', () => {
|
||||
const dateString1 = '2023-01-01';
|
||||
const dateString2 = '2023-01-02';
|
||||
|
||||
const props: LabelBuilderProps = {
|
||||
trendlineSeries: [{ yAxisKey: 'y1' } as any],
|
||||
datasetOptions: {
|
||||
ticks: [[dateString1], [dateString2]],
|
||||
datasets: [{ dataKey: 'y1', data: [10, 20] } as any],
|
||||
ticksKey: [{ key: 'x', value: 'X Axis' }]
|
||||
} as any,
|
||||
columnLabelFormats: {
|
||||
x: {
|
||||
columnType: 'date',
|
||||
style: 'date'
|
||||
}
|
||||
},
|
||||
xAxisKeys: ['x'],
|
||||
sizeKey: [],
|
||||
columnSettings: {}
|
||||
};
|
||||
|
||||
const result = scatterSeriesBuilder_labels(props);
|
||||
expect(result).toEqual([
|
||||
createDayjsDate(dateString1).toDate(),
|
||||
createDayjsDate(dateString2).toDate()
|
||||
]);
|
||||
});
|
||||
|
||||
test('should collect all ticks without deduplication', () => {
|
||||
const props: LabelBuilderProps = {
|
||||
trendlineSeries: [{ yAxisKey: 'y1' } as any, { yAxisKey: 'y2' } as any],
|
||||
datasetOptions: {
|
||||
ticks: [],
|
||||
datasets: [
|
||||
{
|
||||
dataKey: 'y1',
|
||||
data: [10, 20],
|
||||
ticksForScatter: [
|
||||
[1, 'A'],
|
||||
[2, 'B']
|
||||
]
|
||||
} as any,
|
||||
{
|
||||
dataKey: 'y2',
|
||||
data: [30, 40, 50],
|
||||
ticksForScatter: [
|
||||
[1, 'A'],
|
||||
[3, 'C'],
|
||||
[5, 'D']
|
||||
]
|
||||
} as any
|
||||
],
|
||||
ticksKey: [{ key: 'x', value: 'X Axis' }]
|
||||
} as any,
|
||||
columnLabelFormats: {
|
||||
x: DEFAULT_COLUMN_LABEL_FORMAT
|
||||
},
|
||||
xAxisKeys: ['x'],
|
||||
sizeKey: [],
|
||||
columnSettings: {}
|
||||
};
|
||||
|
||||
const result = scatterSeriesBuilder_labels(props);
|
||||
// Should include duplicate [1, 'A'] from both datasets
|
||||
expect(result).toEqual([1, 'A', 1, 'A', 2, 'B', 3, 'C', 5, 'D']);
|
||||
});
|
||||
|
||||
test('should return undefined when no relevant datasets are found', () => {
|
||||
const props: LabelBuilderProps = {
|
||||
trendlineSeries: [{ yAxisKey: 'y1' } as any],
|
||||
datasetOptions: {
|
||||
ticks: [],
|
||||
datasets: [
|
||||
|
|
|
@ -127,6 +127,7 @@ export type LabelBuilderProps = {
|
|||
xAxisKeys: ChartEncodes['x'];
|
||||
sizeKey: ScatterAxis['size'];
|
||||
columnSettings: NonNullable<BusterChartProps['columnSettings']>;
|
||||
trendlineSeries?: Array<{ yAxisKey: string }>;
|
||||
};
|
||||
|
||||
const labelsBuilderRecord: Record<
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { RustApiError } from '@/api/buster_rest/errors';
|
||||
import { queryKeys } from '@/api/query_keys';
|
||||
import { userQueryKeys } from '@/api/query_keys/users';
|
||||
import { QueryClient, queryOptions } from '@tanstack/react-query';
|
||||
|
||||
export const isQueryStale = (
|
||||
|
@ -18,7 +18,7 @@ export const isQueryStale = (
|
|||
};
|
||||
|
||||
export const hasOrganizationId = (queryClient: QueryClient): boolean => {
|
||||
const organizationId = queryClient.getQueryData(queryKeys.userGetUserMyself.queryKey)
|
||||
const organizationId = queryClient.getQueryData(userQueryKeys.userGetUserMyself.queryKey)
|
||||
?.organizations?.[0]?.id;
|
||||
return !!organizationId;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue