Updated tests
Browse files
frontend/src/components/DocumentInput.tsx
CHANGED
@@ -7,7 +7,7 @@ function DocumentInput() {
|
|
7 |
|
8 |
const handleSubmit = async () => {
|
9 |
try {
|
10 |
-
const response = await fetch('/api/
|
11 |
method: 'POST',
|
12 |
headers: {
|
13 |
'Content-Type': 'application/json',
|
@@ -38,7 +38,7 @@ function DocumentInput() {
|
|
38 |
onChange={handleUrlChange}
|
39 |
/>
|
40 |
<Button variant="contained" onClick={handleSubmit}>
|
41 |
-
|
42 |
</Button>
|
43 |
</Box>
|
44 |
{showSuccess && (
|
|
|
7 |
|
8 |
const handleSubmit = async () => {
|
9 |
try {
|
10 |
+
const response = await fetch('/api/ingest/', {
|
11 |
method: 'POST',
|
12 |
headers: {
|
13 |
'Content-Type': 'application/json',
|
|
|
38 |
onChange={handleUrlChange}
|
39 |
/>
|
40 |
<Button variant="contained" onClick={handleSubmit}>
|
41 |
+
Scan
|
42 |
</Button>
|
43 |
</Box>
|
44 |
{showSuccess && (
|
frontend/src/components/Header.tsx
CHANGED
@@ -4,7 +4,7 @@ function Header() {
|
|
4 |
return (
|
5 |
<Box sx={{ mb: 4 }}>
|
6 |
<Typography variant="h2" component="h1" align="center">
|
7 |
-
|
8 |
</Typography>
|
9 |
</Box>
|
10 |
);
|
|
|
4 |
return (
|
5 |
<Box sx={{ mb: 4 }}>
|
6 |
<Typography variant="h2" component="h1" align="center">
|
7 |
+
SimpliFi
|
8 |
</Typography>
|
9 |
</Box>
|
10 |
);
|
frontend/src/tests/App.test.tsx
CHANGED
@@ -8,14 +8,14 @@ describe('App', () => {
|
|
8 |
render(<App />);
|
9 |
|
10 |
// Check for title
|
11 |
-
expect(screen.getByText('
|
12 |
|
13 |
// Check for input fields
|
14 |
expect(screen.getByLabelText('Source Documentation')).toBeInTheDocument();
|
15 |
expect(screen.getByLabelText('Quiz focus?')).toBeInTheDocument();
|
16 |
|
17 |
// Check for buttons
|
18 |
-
expect(screen.getByText('
|
19 |
expect(screen.getByText('Generate')).toBeInTheDocument();
|
20 |
});
|
21 |
});
|
|
|
8 |
render(<App />);
|
9 |
|
10 |
// Check for title
|
11 |
+
expect(screen.getByText('SimpliFi')).toBeInTheDocument();
|
12 |
|
13 |
// Check for input fields
|
14 |
expect(screen.getByLabelText('Source Documentation')).toBeInTheDocument();
|
15 |
expect(screen.getByLabelText('Quiz focus?')).toBeInTheDocument();
|
16 |
|
17 |
// Check for buttons
|
18 |
+
expect(screen.getByText('Scan')).toBeInTheDocument();
|
19 |
expect(screen.getByText('Generate')).toBeInTheDocument();
|
20 |
});
|
21 |
});
|
frontend/src/tests/components/DocumentInput.test.tsx
CHANGED
@@ -15,14 +15,14 @@ describe('DocumentInput', () => {
|
|
15 |
render(<DocumentInput />);
|
16 |
|
17 |
const input = screen.getByLabelText('Source Documentation');
|
18 |
-
const button = screen.getByText('
|
19 |
|
20 |
await act(async () => {
|
21 |
await fireEvent.change(input, { target: { value: 'https://example.com' } });
|
22 |
await fireEvent.click(button);
|
23 |
});
|
24 |
|
25 |
-
expect(mockFetch).toHaveBeenCalledWith('/api/
|
26 |
method: 'POST',
|
27 |
headers: { 'Content-Type': 'application/json' },
|
28 |
body: JSON.stringify({ url: 'https://example.com' }),
|
@@ -40,7 +40,7 @@ describe('DocumentInput', () => {
|
|
40 |
|
41 |
// First submit a URL
|
42 |
const input = screen.getByLabelText('Source Documentation');
|
43 |
-
const button = screen.getByText('
|
44 |
|
45 |
await act(async () => {
|
46 |
await fireEvent.change(input, { target: { value: 'https://example.com' } });
|
|
|
15 |
render(<DocumentInput />);
|
16 |
|
17 |
const input = screen.getByLabelText('Source Documentation');
|
18 |
+
const button = screen.getByText('Scan');
|
19 |
|
20 |
await act(async () => {
|
21 |
await fireEvent.change(input, { target: { value: 'https://example.com' } });
|
22 |
await fireEvent.click(button);
|
23 |
});
|
24 |
|
25 |
+
expect(mockFetch).toHaveBeenCalledWith('/api/ingest/', {
|
26 |
method: 'POST',
|
27 |
headers: { 'Content-Type': 'application/json' },
|
28 |
body: JSON.stringify({ url: 'https://example.com' }),
|
|
|
40 |
|
41 |
// First submit a URL
|
42 |
const input = screen.getByLabelText('Source Documentation');
|
43 |
+
const button = screen.getByText('Scan');
|
44 |
|
45 |
await act(async () => {
|
46 |
await fireEvent.change(input, { target: { value: 'https://example.com' } });
|
frontend/src/tests/components/Topics.test.tsx
CHANGED
@@ -1,14 +1,15 @@
|
|
1 |
import { render, screen, waitFor, fireEvent } from '@testing-library/react';
|
|
|
2 |
import Topics from '../../components/Topics';
|
3 |
-
import { vi } from 'vitest';
|
4 |
|
5 |
describe('Topics Component', () => {
|
6 |
-
const mockOnTopicChange =
|
|
|
|
|
7 |
|
8 |
beforeEach(() => {
|
9 |
-
|
10 |
-
|
11 |
-
vi.spyOn(global, 'fetch').mockClear();
|
12 |
});
|
13 |
|
14 |
it('shows loading state initially', () => {
|
@@ -20,11 +21,11 @@ describe('Topics Component', () => {
|
|
20 |
|
21 |
it('displays topics after successful fetch', async () => {
|
22 |
const mockTopics = { sources: ['Topic 1', 'Topic 2', 'Topic 3'] };
|
23 |
-
|
24 |
Promise.resolve({
|
25 |
ok: true,
|
26 |
json: () => Promise.resolve(mockTopics),
|
27 |
-
}
|
28 |
);
|
29 |
|
30 |
render(<Topics onTopicChange={mockOnTopicChange} />);
|
@@ -44,11 +45,11 @@ describe('Topics Component', () => {
|
|
44 |
});
|
45 |
|
46 |
it('handles API error correctly', async () => {
|
47 |
-
|
48 |
Promise.resolve({
|
49 |
ok: false,
|
50 |
status: 500,
|
51 |
-
}
|
52 |
);
|
53 |
|
54 |
render(<Topics onTopicChange={mockOnTopicChange} />);
|
@@ -63,11 +64,11 @@ describe('Topics Component', () => {
|
|
63 |
|
64 |
it('calls onTopicChange when topic is selected', async () => {
|
65 |
const mockTopics = { sources: ['Topic 1', 'Topic 2'] };
|
66 |
-
|
67 |
Promise.resolve({
|
68 |
ok: true,
|
69 |
json: () => Promise.resolve(mockTopics),
|
70 |
-
}
|
71 |
);
|
72 |
|
73 |
render(<Topics onTopicChange={mockOnTopicChange} />);
|
@@ -88,11 +89,11 @@ describe('Topics Component', () => {
|
|
88 |
|
89 |
it('handles malformed API response correctly', async () => {
|
90 |
const malformedResponse = { wrongKey: [] };
|
91 |
-
|
92 |
Promise.resolve({
|
93 |
ok: true,
|
94 |
json: () => Promise.resolve(malformedResponse),
|
95 |
-
}
|
96 |
);
|
97 |
|
98 |
render(<Topics onTopicChange={mockOnTopicChange} />);
|
@@ -106,7 +107,7 @@ describe('Topics Component', () => {
|
|
106 |
});
|
107 |
|
108 |
it('handles network errors correctly', async () => {
|
109 |
-
|
110 |
Promise.reject(new Error('Network error'))
|
111 |
);
|
112 |
|
|
|
1 |
import { render, screen, waitFor, fireEvent } from '@testing-library/react';
|
2 |
+
import '@testing-library/jest-dom';
|
3 |
import Topics from '../../components/Topics';
|
|
|
4 |
|
5 |
describe('Topics Component', () => {
|
6 |
+
const mockOnTopicChange = jest.fn();
|
7 |
+
const mockFetch = jest.fn();
|
8 |
+
global.fetch = mockFetch;
|
9 |
|
10 |
beforeEach(() => {
|
11 |
+
jest.clearAllMocks();
|
12 |
+
mockFetch.mockClear();
|
|
|
13 |
});
|
14 |
|
15 |
it('shows loading state initially', () => {
|
|
|
21 |
|
22 |
it('displays topics after successful fetch', async () => {
|
23 |
const mockTopics = { sources: ['Topic 1', 'Topic 2', 'Topic 3'] };
|
24 |
+
mockFetch.mockImplementationOnce(() =>
|
25 |
Promise.resolve({
|
26 |
ok: true,
|
27 |
json: () => Promise.resolve(mockTopics),
|
28 |
+
})
|
29 |
);
|
30 |
|
31 |
render(<Topics onTopicChange={mockOnTopicChange} />);
|
|
|
45 |
});
|
46 |
|
47 |
it('handles API error correctly', async () => {
|
48 |
+
mockFetch.mockImplementationOnce(() =>
|
49 |
Promise.resolve({
|
50 |
ok: false,
|
51 |
status: 500,
|
52 |
+
})
|
53 |
);
|
54 |
|
55 |
render(<Topics onTopicChange={mockOnTopicChange} />);
|
|
|
64 |
|
65 |
it('calls onTopicChange when topic is selected', async () => {
|
66 |
const mockTopics = { sources: ['Topic 1', 'Topic 2'] };
|
67 |
+
mockFetch.mockImplementationOnce(() =>
|
68 |
Promise.resolve({
|
69 |
ok: true,
|
70 |
json: () => Promise.resolve(mockTopics),
|
71 |
+
})
|
72 |
);
|
73 |
|
74 |
render(<Topics onTopicChange={mockOnTopicChange} />);
|
|
|
89 |
|
90 |
it('handles malformed API response correctly', async () => {
|
91 |
const malformedResponse = { wrongKey: [] };
|
92 |
+
mockFetch.mockImplementationOnce(() =>
|
93 |
Promise.resolve({
|
94 |
ok: true,
|
95 |
json: () => Promise.resolve(malformedResponse),
|
96 |
+
})
|
97 |
);
|
98 |
|
99 |
render(<Topics onTopicChange={mockOnTopicChange} />);
|
|
|
107 |
});
|
108 |
|
109 |
it('handles network errors correctly', async () => {
|
110 |
+
mockFetch.mockImplementationOnce(() =>
|
111 |
Promise.reject(new Error('Network error'))
|
112 |
);
|
113 |
|