Results.test.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { screen } from '@testing-library/react'
  2. import { expect, test, vi } from 'vitest'
  3. import Results from '@/components/interfaces/SQLEditor/UtilityPanel/Results'
  4. import { customRender as render } from '@/tests/lib/custom-render'
  5. let contextMenuMountCount = 0
  6. vi.mock('ui', async () => {
  7. const actual = await vi.importActual<typeof import('ui')>('ui')
  8. return {
  9. ...actual,
  10. ContextMenu: (props: any) => {
  11. contextMenuMountCount++
  12. return <actual.ContextMenu {...props} />
  13. },
  14. }
  15. })
  16. vi.mock('react-data-grid', () => ({
  17. default: ({ columns, rows }: any) => (
  18. <div role="table">
  19. <div role="row">
  20. {columns.map((col: any, colIdx: number) => (
  21. <div key={colIdx} role="columnheader">
  22. {col.renderHeaderCell ? col.renderHeaderCell({}) : col.name}
  23. </div>
  24. ))}
  25. </div>
  26. {rows.map((row: any, rowIdx: number) => (
  27. <div key={rowIdx} role="row">
  28. {columns.map((col: any, colIdx: number) => (
  29. <div key={colIdx} role="cell">
  30. {col.renderCell?.({ row, rowIdx, isCellSelected: false })}
  31. </div>
  32. ))}
  33. </div>
  34. ))}
  35. </div>
  36. ),
  37. }))
  38. function generateRows(count: number) {
  39. return Array.from({ length: count }, (_, i) => ({
  40. id: i,
  41. name: `row-${i}`,
  42. }))
  43. }
  44. test('renders a single context menu regardless of row count', () => {
  45. contextMenuMountCount = 0
  46. const rows = generateRows(100)
  47. render(<Results rows={rows} />)
  48. expect(contextMenuMountCount).toBe(1)
  49. })
  50. test('shows empty state when no rows provided', () => {
  51. render(<Results rows={[]} />)
  52. expect(screen.getByText('Success. No rows returned')).toBeTruthy()
  53. })