diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 397b106..3c5de8f 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -15,7 +15,7 @@ import DocumentDetailsPage from './pages/DocumentDetailsPage'; import SettingsPage from './pages/SettingsPage'; import SourcesPage from './pages/SourcesPage'; import WatchFolderPage from './pages/WatchFolderPage'; -import FailedOcrPage from './pages/FailedOcrPage'; +import DocumentManagementPage from './pages/DocumentManagementPage'; import LabelsPage from './pages/LabelsPage'; import IgnoredFilesPage from './pages/IgnoredFilesPage'; @@ -75,7 +75,7 @@ function App(): React.ReactElement { } /> } /> } /> - } /> + } /> } /> Profile Page - Coming Soon} /> diff --git a/frontend/src/components/Layout/AppLayout.tsx b/frontend/src/components/Layout/AppLayout.tsx index 5283b8c..1fb91aa 100644 --- a/frontend/src/components/Layout/AppLayout.tsx +++ b/frontend/src/components/Layout/AppLayout.tsx @@ -70,7 +70,7 @@ const navigationItems: NavigationItem[] = [ { text: 'Labels', icon: LabelIcon, path: '/labels' }, { text: 'Sources', icon: StorageIcon, path: '/sources' }, { text: 'Watch Folder', icon: FolderIcon, path: '/watch' }, - { text: 'Document Management', icon: ManageIcon, path: '/failed-ocr' }, + { text: 'Document Management', icon: ManageIcon, path: '/documents/management' }, { text: 'Ignored Files', icon: BlockIcon, path: '/ignored-files' }, ]; diff --git a/frontend/src/pages/FailedOcrPage.tsx b/frontend/src/pages/DocumentManagementPage.tsx similarity index 99% rename from frontend/src/pages/FailedOcrPage.tsx rename to frontend/src/pages/DocumentManagementPage.tsx index c541079..44db5c8 100644 --- a/frontend/src/pages/FailedOcrPage.tsx +++ b/frontend/src/pages/DocumentManagementPage.tsx @@ -131,7 +131,7 @@ interface DuplicatesResponse { }; } -const FailedOcrPage: React.FC = () => { +const DocumentManagementPage: React.FC = () => { const theme = useTheme(); const navigate = useNavigate(); const [currentTab, setCurrentTab] = useState(0); @@ -1743,4 +1743,4 @@ const FailedOcrPage: React.FC = () => { ); }; -export default FailedOcrPage; \ No newline at end of file +export default DocumentManagementPage; \ No newline at end of file diff --git a/frontend/src/pages/__tests__/FailedOcrPage.patterns.test.tsx b/frontend/src/pages/__tests__/DocumentManagementPage.patterns.test.tsx similarity index 98% rename from frontend/src/pages/__tests__/FailedOcrPage.patterns.test.tsx rename to frontend/src/pages/__tests__/DocumentManagementPage.patterns.test.tsx index c3e2115..c2ed9cd 100644 --- a/frontend/src/pages/__tests__/FailedOcrPage.patterns.test.tsx +++ b/frontend/src/pages/__tests__/DocumentManagementPage.patterns.test.tsx @@ -3,7 +3,7 @@ import { describe, test, expect } from 'vitest'; // Regression tests that validate the code patterns we implemented // without interfering with existing component tests -describe('FailedOcrPage - Code Pattern Validation', () => { +describe('DocumentManagementPage - Code Pattern Validation', () => { test('validates null-safe access pattern for statistics', () => { // This test ensures the null-safe pattern is working correctly // Pattern: statistics?.failure_categories?.map(...) || fallback diff --git a/frontend/src/pages/__tests__/FailedOcrPage.test.tsx b/frontend/src/pages/__tests__/DocumentManagementPage.tsx similarity index 84% rename from frontend/src/pages/__tests__/FailedOcrPage.test.tsx rename to frontend/src/pages/__tests__/DocumentManagementPage.tsx index 846a947..9fb58b7 100644 --- a/frontend/src/pages/__tests__/FailedOcrPage.test.tsx +++ b/frontend/src/pages/__tests__/DocumentManagementPage.tsx @@ -1,7 +1,7 @@ import { describe, test, expect, vi, beforeEach } from 'vitest'; import { render, screen, waitFor } from '@testing-library/react'; import { BrowserRouter } from 'react-router-dom'; -import FailedOcrPage from '../FailedOcrPage'; +import DocumentManagementPage from '../DocumentManagementPage'; // Simple mock that just returns promises to avoid the component crashing vi.mock('../../services/api', () => ({ @@ -35,20 +35,20 @@ vi.mock('../../services/api', () => ({ }, })); -const FailedOcrPageWrapper = ({ children }: { children: React.ReactNode }) => { +const DocumentManagementPageWrapper = ({ children }: { children: React.ReactNode }) => { return {children}; }; -describe('FailedOcrPage', () => { +describe('DocumentManagementPage', () => { beforeEach(() => { vi.clearAllMocks(); }); test('renders page structure without crashing', () => { render( - - - + + + ); // Basic check that the component renders without throwing errors @@ -57,9 +57,9 @@ describe('FailedOcrPage', () => { test('renders page title', async () => { render( - - - + + + ); // Wait for the page to load and show the title @@ -70,9 +70,9 @@ describe('FailedOcrPage', () => { test('renders refresh button', async () => { render( - - - + + + ); await waitFor(() => { @@ -82,9 +82,9 @@ describe('FailedOcrPage', () => { test('renders tabs structure', async () => { render( - - - + + + ); // Wait for tabs to appear @@ -103,16 +103,16 @@ describe('FailedOcrPage', () => { // test('refreshes data when refresh button is clicked', async () => { ... }); }); -describe('FailedOcrPage - Low Confidence Deletion', () => { +describe('DocumentManagementPage - Low Confidence Deletion', () => { beforeEach(() => { vi.clearAllMocks(); }); test('renders low confidence deletion tab', async () => { render( - - - + + + ); // Wait for tabs to load @@ -130,9 +130,9 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { test('displays confidence threshold input when low confidence tab is active', async () => { render( - - - + + + ); // Wait for component to load @@ -154,9 +154,9 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { test('displays preview and delete buttons in low confidence tab', async () => { render( - - - + + + ); // Navigate to Low Quality Manager tab @@ -177,9 +177,9 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { test('shows informational alert about low confidence deletion', async () => { render( - - - + + + ); // Navigate to Low Quality Manager tab @@ -204,7 +204,7 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { // test('calls deleteLowConfidence API when preview button is clicked', async () => { // const mockDeleteLowConfidence = vi.mocked(documentService.deleteLowConfidence); // - // render(); + // render(); // // // Navigate to tab and click preview // const lowConfidenceTab = screen.getByText(/Low Confidence/i); @@ -219,7 +219,7 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { // }); // test('validates confidence threshold input values', async () => { - // render(); + // render(); // // const lowConfidenceTab = screen.getByText(/Low Confidence/i); // fireEvent.click(lowConfidenceTab); @@ -245,7 +245,7 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { // } // }); // - // render(); + // render(); // // // Navigate to tab, preview, then try to delete // const lowConfidenceTab = screen.getByText(/Low Confidence/i); @@ -267,7 +267,7 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { // }); // test('disables delete button when no preview data available', async () => { - // render(); + // render(); // // const lowConfidenceTab = screen.getByText(/Low Confidence/i); // fireEvent.click(lowConfidenceTab); @@ -290,7 +290,7 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { // } // }); // - // render(); + // render(); // // const lowConfidenceTab = screen.getByText(/Low Confidence/i); // fireEvent.click(lowConfidenceTab); @@ -308,7 +308,7 @@ describe('FailedOcrPage - Low Confidence Deletion', () => { // const mockDeleteLowConfidence = vi.mocked(documentService.deleteLowConfidence); // mockDeleteLowConfidence.mockRejectedValueOnce(new Error('Network error')); // - // render(); + // render(); // // const lowConfidenceTab = screen.getByText(/Low Confidence/i); // fireEvent.click(lowConfidenceTab);