node-list-rowkey.test.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { describe, it, expect, vi, afterEach } from 'vitest';
  2. import NodeList from '@/pages/nodes/NodeList';
  3. import type { NodeRecord } from '@/schemas/node';
  4. import { renderWithProviders } from './test-utils';
  5. const noop = () => {};
  6. function sampleNodes(): NodeRecord[] {
  7. return [
  8. { id: 1, name: 'parent', guid: 'p1', transitive: false, enable: true, status: 'online' },
  9. { id: 0, name: 'child-a', guid: 'ca', parentGuid: 'p1', transitive: true },
  10. { id: 0, name: 'child-b', guid: 'cb', parentGuid: 'p1', transitive: true },
  11. ];
  12. }
  13. describe('NodeList desktop table row keys', () => {
  14. afterEach(() => vi.restoreAllMocks());
  15. it('gives transitive sub-node rows distinct keys instead of colliding on id 0', () => {
  16. const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
  17. renderWithProviders(
  18. <NodeList
  19. nodes={sampleNodes()}
  20. isMobile={false}
  21. selectedIds={[]}
  22. onSelectionChange={noop}
  23. onAdd={noop}
  24. onMtls={noop}
  25. onEdit={noop}
  26. onDelete={noop}
  27. onProbe={noop}
  28. onToggleEnable={noop}
  29. onUpdateNode={noop}
  30. onUpdateSelected={noop}
  31. />,
  32. );
  33. const duplicateKeyWarning = errorSpy.mock.calls.some((call) =>
  34. call.some((arg) => typeof arg === 'string' && arg.includes('same key')),
  35. );
  36. expect(duplicateKeyWarning).toBe(false);
  37. });
  38. });