Files
twenty/packages/twenty-front/src/utils/__tests__/combineRefs.test.ts
T
Félix Malfait b27a97f2c5 feat: enforce @/ alias for imports and fix all relative parent imports (#16787)
## Summary
This PR enforces the use of `@/` alias for imports instead of relative
parent imports (`../`).

## Changes

### ESLint Configuration
- Added `no-restricted-imports` pattern in `eslint.config.react.mjs` to
block `../*` imports with the message "Relative parent imports are not
allowed. Use @/ alias instead."
- Removed the non-working `import/no-relative-parent-imports` rule
(doesn't work properly in ESLint flat config)

### VS Code Settings
- Added `javascript.preferences.importModuleSpecifier: non-relative` to
`.vscode/settings.json` (TypeScript setting was already there)

### Code Fixes
- Fixed **941 relative parent imports** across **706 files** in
`packages/twenty-front`
- All `../` imports converted to use `@/` alias

## Why
- Consistent import style across the codebase
- Easier to move files without breaking imports
- Better IDE support for auto-imports
- Clearer understanding of where imports come from
2025-12-23 22:57:51 +01:00

77 lines
2.1 KiB
TypeScript

import { type MutableRefObject } from 'react';
import { combineRefs } from '~/utils/combineRefs';
describe('combineRefs', () => {
it('should handle function refs', () => {
const ref1 = jest.fn();
const ref2 = jest.fn();
const node = document.createElement('div');
const combinedRef = combineRefs(ref1, ref2);
combinedRef(node);
expect(ref1).toHaveBeenCalledWith(node);
expect(ref2).toHaveBeenCalledWith(node);
});
it('should handle object refs', () => {
const ref1: MutableRefObject<HTMLDivElement | null> = { current: null };
const ref2: MutableRefObject<HTMLDivElement | null> = { current: null };
const node = document.createElement('div');
const combinedRef = combineRefs(ref1, ref2);
combinedRef(node);
expect(ref1.current).toBe(node);
expect(ref2.current).toBe(node);
});
it('should handle mixed function and object refs', () => {
const funcRef = jest.fn();
const objRef: MutableRefObject<HTMLDivElement | null> = { current: null };
const node = document.createElement('div');
const combinedRef = combineRefs(funcRef, objRef);
combinedRef(node);
expect(funcRef).toHaveBeenCalledWith(node);
expect(objRef.current).toBe(node);
});
it('should handle undefined refs', () => {
const ref1 = jest.fn();
const node = document.createElement('div');
const combinedRef = combineRefs(ref1, undefined);
combinedRef(node);
expect(ref1).toHaveBeenCalledWith(node);
});
it('should handle all undefined refs', () => {
const node = document.createElement('div');
const combinedRef = combineRefs(undefined, undefined);
expect(() => combinedRef(node)).not.toThrow();
});
it('should handle empty refs array', () => {
const node = document.createElement('div');
const combinedRef = combineRefs();
expect(() => combinedRef(node)).not.toThrow();
});
it('should handle null refs', () => {
const ref1 = jest.fn();
const node = document.createElement('div');
const combinedRef = combineRefs(ref1, null);
combinedRef(node);
expect(ref1).toHaveBeenCalledWith(node);
});
});