Polish settings and admin system pages
This commit is contained in:
@@ -1,14 +1,26 @@
|
||||
import React from 'react';
|
||||
import { render, screen, waitFor } from '@testing-library/react';
|
||||
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
||||
|
||||
import AdminSystemPage from './pages/AdminSystemPage';
|
||||
import { I18nProvider } from './i18n/I18nProvider';
|
||||
import { api } from './api';
|
||||
|
||||
jest.mock('./api', () => ({
|
||||
api: {
|
||||
get: jest.fn(),
|
||||
post: jest.fn(),
|
||||
put: jest.fn(),
|
||||
patch: jest.fn(),
|
||||
delete: jest.fn(),
|
||||
interceptors: { request: { use: jest.fn() }, response: { use: jest.fn() } },
|
||||
},
|
||||
getApiErrorMessage: (error: any, fallback?: string) => fallback || 'Request failed.',
|
||||
}));
|
||||
|
||||
const mockedApi = api as jest.Mocked<typeof api>;
|
||||
|
||||
describe('AdminSystemPage', () => {
|
||||
it('renders AI service health, latency, and OCR readiness', async () => {
|
||||
beforeEach(() => {
|
||||
mockedApi.get.mockImplementation((url: string) => {
|
||||
if (url === '/admin/system') {
|
||||
return Promise.resolve({
|
||||
@@ -54,9 +66,45 @@ describe('AdminSystemPage', () => {
|
||||
},
|
||||
} as any);
|
||||
}
|
||||
if (url === '/admin/system/email-settings') {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
enabled: true,
|
||||
host: 'smtp.example.test',
|
||||
port: 587,
|
||||
user: 'mailer@example.test',
|
||||
from: 'noreply@example.test',
|
||||
fromName: 'Jobbjakt',
|
||||
enableSsl: true,
|
||||
timeoutMs: 15000,
|
||||
usesOverrides: false,
|
||||
hasPassword: true,
|
||||
},
|
||||
} as any);
|
||||
}
|
||||
return Promise.resolve({ data: {} } as any);
|
||||
});
|
||||
mockedApi.put.mockResolvedValue({
|
||||
data: {
|
||||
enabled: true,
|
||||
host: 'smtp.changed.test',
|
||||
port: 2525,
|
||||
user: 'mailer@example.test',
|
||||
from: 'noreply@example.test',
|
||||
fromName: 'Jobbjakt',
|
||||
enableSsl: true,
|
||||
timeoutMs: 15000,
|
||||
usesOverrides: true,
|
||||
hasPassword: true,
|
||||
},
|
||||
} as any);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
it('renders AI service health, latency, and OCR readiness', async () => {
|
||||
render(
|
||||
<I18nProvider>
|
||||
<AdminSystemPage />
|
||||
@@ -64,7 +112,7 @@ describe('AdminSystemPage', () => {
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText('AI service')).toBeTruthy();
|
||||
expect(screen.getByText('Production')).toBeTruthy();
|
||||
});
|
||||
|
||||
expect(screen.getByText(/25.8 ms probe/i)).toBeTruthy();
|
||||
@@ -72,4 +120,27 @@ describe('AdminSystemPage', () => {
|
||||
expect(screen.getByText('OCR avg latency')).toBeTruthy();
|
||||
expect(screen.getByText('88.4 ms')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('loads and saves smtp settings from the settings tab', async () => {
|
||||
render(
|
||||
<I18nProvider>
|
||||
<AdminSystemPage />
|
||||
</I18nProvider>,
|
||||
);
|
||||
|
||||
expect(await screen.findByText('AI service')).toBeTruthy();
|
||||
fireEvent.click(screen.getByRole('tab', { name: /settings/i }));
|
||||
|
||||
const hostInput = await screen.findByLabelText(/host/i);
|
||||
fireEvent.change(hostInput, { target: { value: 'smtp.changed.test' } });
|
||||
fireEvent.change(screen.getByLabelText(/port/i), { target: { value: '2525' } });
|
||||
fireEvent.click(screen.getByRole('button', { name: /save settings/i }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockedApi.put).toHaveBeenCalledWith('/admin/system/email-settings', expect.objectContaining({
|
||||
host: 'smtp.changed.test',
|
||||
port: 2525,
|
||||
}));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user