happy-server/sources/utils/separateName.spec.ts
2025-08-26 22:17:11 -07:00

59 lines
2.2 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { separateName } from './separateName';
describe('separateName', () => {
it('should separate basic first and last name', () => {
const result = separateName('John Doe');
expect(result).toEqual({ firstName: 'John', lastName: 'Doe' });
});
it('should handle single name with no last name', () => {
const result = separateName('John');
expect(result).toEqual({ firstName: 'John', lastName: null });
});
it('should handle multiple names putting everything after first as lastName', () => {
const result = separateName('John William Doe Smith');
expect(result).toEqual({ firstName: 'John', lastName: 'William Doe Smith' });
});
it('should handle empty string', () => {
const result = separateName('');
expect(result).toEqual({ firstName: null, lastName: null });
});
it('should handle null input', () => {
const result = separateName(null);
expect(result).toEqual({ firstName: null, lastName: null });
});
it('should handle undefined input', () => {
const result = separateName(undefined);
expect(result).toEqual({ firstName: null, lastName: null });
});
it('should handle whitespace-only string', () => {
const result = separateName(' ');
expect(result).toEqual({ firstName: null, lastName: null });
});
it('should handle extra spaces between names', () => {
const result = separateName(' John Doe ');
expect(result).toEqual({ firstName: 'John', lastName: 'Doe' });
});
it('should handle names with special characters', () => {
const result = separateName('José María');
expect(result).toEqual({ firstName: 'José', lastName: 'María' });
});
it('should handle hyphenated last names', () => {
const result = separateName('Mary Smith-Johnson');
expect(result).toEqual({ firstName: 'Mary', lastName: 'Smith-Johnson' });
});
it('should handle multiple middle names and hyphenated last name', () => {
const result = separateName('John Michael Robert Smith-Johnson');
expect(result).toEqual({ firstName: 'John', lastName: 'Michael Robert Smith-Johnson' });
});
});