feat(email): consolidate correspondence routes
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import '@testing-library/jest-dom';
|
||||
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
||||
import { MemoryRouter } from 'react-router-dom';
|
||||
import { MemoryRouter, Navigate, Route, Routes } from 'react-router-dom';
|
||||
import { ToastProvider } from './toast';
|
||||
import { I18nProvider } from './i18n/I18nProvider';
|
||||
import CorrespondenceInboxPage from './views/CorrespondenceInboxPage';
|
||||
@@ -35,8 +35,8 @@ function renderPage() {
|
||||
|
||||
describe('CorrespondenceInboxPage', () => {
|
||||
beforeEach(() => {
|
||||
mockedApi.get.mockResolvedValue({
|
||||
data: [
|
||||
mockedApi.get.mockImplementation((url: string) => {
|
||||
if (url === '/correspondence') return Promise.resolve({ data: [
|
||||
{
|
||||
id: 1,
|
||||
jobApplicationId: 42,
|
||||
@@ -54,8 +54,13 @@ describe('CorrespondenceInboxPage', () => {
|
||||
labelCount: 2,
|
||||
attachmentCount: 1,
|
||||
},
|
||||
],
|
||||
} as any);
|
||||
] } as any);
|
||||
if (url === '/gmail/review-candidates') return Promise.resolve({ data: {
|
||||
queries: [], candidateThreadCount: 0, autoLinkThreadCount: 0, reviewThreadCount: 0, unmatchedThreadCount: 0, threads: [],
|
||||
} } as any);
|
||||
if (url === '/gmail/suggested-jobs') return Promise.resolve({ data: { count: 0, items: [] } } as any);
|
||||
return Promise.resolve({ data: {} } as any);
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -65,7 +70,7 @@ describe('CorrespondenceInboxPage', () => {
|
||||
test('renders correspondence inbox items and reloads with filters', async () => {
|
||||
renderPage();
|
||||
|
||||
expect(await screen.findByText(/correspondence inbox/i)).toBeInTheDocument();
|
||||
expect(await screen.findByRole('heading', { name: /job email/i })).toBeInTheDocument();
|
||||
expect(await screen.findByText(/1 items/i)).toBeInTheDocument();
|
||||
expect(await screen.findByText(/acme systems/i)).toBeInTheDocument();
|
||||
expect(await screen.findByText(/backend engineer/i)).toBeInTheDocument();
|
||||
@@ -85,4 +90,31 @@ describe('CorrespondenceInboxPage', () => {
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
test('uses one hub for linked messages and recruitment suggestions', async () => {
|
||||
renderPage();
|
||||
|
||||
fireEvent.click(await screen.findByRole('button', { name: /review suggestions/i }));
|
||||
expect(await screen.findByRole('heading', { name: /recruitment message review/i })).toBeInTheDocument();
|
||||
expect(mockedApi.get).toHaveBeenCalledWith('/gmail/review-candidates');
|
||||
expect(screen.getByRole('button', { name: /linked messages/i })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('legacy Gmail review route redirects into the consolidated hub filter', async () => {
|
||||
render(
|
||||
<ToastProvider>
|
||||
<I18nProvider>
|
||||
<MemoryRouter initialEntries={['/correspondence/review']} future={{ v7_startTransition: true, v7_relativeSplatPath: true }}>
|
||||
<Routes>
|
||||
<Route path="/correspondence/review" element={<Navigate to="/correspondence?view=review" replace />} />
|
||||
<Route path="/correspondence" element={<CorrespondenceInboxPage />} />
|
||||
</Routes>
|
||||
</MemoryRouter>
|
||||
</I18nProvider>
|
||||
</ToastProvider>,
|
||||
);
|
||||
|
||||
expect(await screen.findByRole('heading', { name: /recruitment message review/i })).toBeInTheDocument();
|
||||
expect(mockedApi.get).not.toHaveBeenCalledWith('/correspondence', expect.anything());
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user