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);