FolderReadmePanel.test.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /**
  2. * Tests for FolderReadmePanel (#1268).
  3. */
  4. import { describe, it, expect } from 'vitest';
  5. import { screen, waitFor } from '@testing-library/react';
  6. import { http, HttpResponse } from 'msw';
  7. import { render } from '../utils';
  8. import { FolderReadmePanel } from '../../components/FolderReadmePanel';
  9. import { server } from '../mocks/server';
  10. describe('FolderReadmePanel', () => {
  11. it('renders nothing when the folder has no markdown (404)', async () => {
  12. server.use(
  13. http.get('/api/v1/library/folders/:id/readme', () =>
  14. HttpResponse.json({ detail: 'No markdown' }, { status: 404 }),
  15. ),
  16. );
  17. render(<FolderReadmePanel folderId={1} />);
  18. // Wait briefly so the query has time to resolve, then confirm no panel
  19. // chrome leaked into the DOM (the test render util mounts toast/provider
  20. // wrappers, so we can't assert `container.firstChild === null`).
  21. await waitFor(() => {
  22. expect(screen.queryByText('Truncated')).not.toBeInTheDocument();
  23. expect(document.querySelector('button[type="button"] svg.lucide-file-text')).toBeNull();
  24. });
  25. });
  26. it('renders markdown content and the filename when present', async () => {
  27. server.use(
  28. http.get('/api/v1/library/folders/:id/readme', () =>
  29. HttpResponse.json({
  30. filename: 'README.md',
  31. content: '# Robot model\n\nA cute robot.',
  32. truncated: false,
  33. }),
  34. ),
  35. );
  36. render(<FolderReadmePanel folderId={42} />);
  37. expect(await screen.findByText('README.md')).toBeInTheDocument();
  38. expect(await screen.findByRole('heading', { name: 'Robot model' })).toBeInTheDocument();
  39. expect(screen.getByText('A cute robot.')).toBeInTheDocument();
  40. });
  41. it('shows a Truncated chip when the API flags the content as clipped', async () => {
  42. server.use(
  43. http.get('/api/v1/library/folders/:id/readme', () =>
  44. HttpResponse.json({
  45. filename: 'description.md',
  46. content: 'very long content',
  47. truncated: true,
  48. }),
  49. ),
  50. );
  51. render(<FolderReadmePanel folderId={7} />);
  52. expect(await screen.findByText('Truncated')).toBeInTheDocument();
  53. });
  54. });