From c26be9d3f48a5dbf020cd79168d10d571b984509 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 12 May 2026 17:38:49 +0800 Subject: [PATCH] fix: redirect unauthorized dataset access to /datasets for knowledge editors (#36073) Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com> --- web/__tests__/apps/create-app-flow.test.tsx | 3 + .../__tests__/layout-main.spec.tsx | 151 ++++++++++++++++++ .../[datasetId]/layout-main.tsx | 27 +++- web/service/knowledge/use-dataset.spec.ts | 94 +++++++++++ web/service/knowledge/use-dataset.ts | 9 +- 5 files changed, 281 insertions(+), 3 deletions(-) create mode 100644 web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/__tests__/layout-main.spec.tsx create mode 100644 web/service/knowledge/use-dataset.spec.ts diff --git a/web/__tests__/apps/create-app-flow.test.tsx b/web/__tests__/apps/create-app-flow.test.tsx index 079ea9949a..a487f102dd 100644 --- a/web/__tests__/apps/create-app-flow.test.tsx +++ b/web/__tests__/apps/create-app-flow.test.tsx @@ -79,6 +79,9 @@ vi.mock('@tanstack/react-query', async (importOriginal) => { const actual = await importOriginal() return { ...actual, + useQuery: () => ({ + data: [], + }), useInfiniteQuery: () => ({ data: { pages: mockPages }, isLoading: mockIsLoading, diff --git a/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/__tests__/layout-main.spec.tsx b/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/__tests__/layout-main.spec.tsx new file mode 100644 index 0000000000..0d7f01a210 --- /dev/null +++ b/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/__tests__/layout-main.spec.tsx @@ -0,0 +1,151 @@ +import { render, screen, waitFor } from '@testing-library/react' +import { usePathname, useRouter } from '@/next/navigation' +import { useDatasetDetail, useDatasetRelatedApps } from '@/service/knowledge/use-dataset' +import DatasetDetailLayout from '../layout-main' + +const mockReplace = vi.fn() +const mockSetAppSidebarExpand = vi.fn() + +vi.mock('@/next/navigation', () => ({ + usePathname: vi.fn(), + useRouter: vi.fn(), +})) + +vi.mock('@/service/knowledge/use-dataset', () => ({ + useDatasetDetail: vi.fn(), + useDatasetRelatedApps: vi.fn(), +})) + +vi.mock('@/app/components/app/store', () => ({ + useStore: (selector: (state: { setAppSidebarExpand: typeof mockSetAppSidebarExpand }) => unknown) => selector({ + setAppSidebarExpand: mockSetAppSidebarExpand, + }), +})) + +vi.mock('@/context/app-context', () => ({ + useAppContext: () => ({ + isCurrentWorkspaceDatasetOperator: false, + }), +})) + +vi.mock('@/context/event-emitter', () => ({ + useEventEmitterContextContext: () => ({ + eventEmitter: undefined, + }), +})) + +vi.mock('@/hooks/use-breakpoints', () => ({ + default: () => 'desktop', + MediaType: { + mobile: 'mobile', + }, +})) + +vi.mock('@/hooks/use-document-title', () => ({ + default: vi.fn(), +})) + +vi.mock('@/app/components/app-sidebar', () => ({ + default: () =>