import { chatLocalpart } from './matrix.client'; describe('chatLocalpart', () => { it('reads from the name, not the id', () => { expect( chatLocalpart('03f5eb9e-23a0-4413-8d98-8de4b98b1be2', 'Nati Wondi'), ).toBe('nati-wondi.03f5eb'); }); it('separates two people who share a name', () => { // Both of these are real dev rows — same name, different employees. const a = chatLocalpart('11111111-1111-4111-8111-111111111111', 'MARKOS REGASA'); const b = chatLocalpart('22222222-2222-4222-8222-222222222222', 'Markos REGASA'); expect(a).not.toBe(b); }); it('is stable for the same person', () => { const id = '7d798218-09de-47a1-98eb-f61ec44e9280'; expect(chatLocalpart(id, 'Naod')).toBe(chatLocalpart(id, 'Naod')); }); it('still yields a usable localpart for a name that slugs to nothing', () => { expect(chatLocalpart('7d798218-09de-47a1-98eb-f61ec44e9280', 'ናኦድ')).toBe( 'user.7d7982', ); }); it('only emits characters Matrix accepts in a localpart', () => { for (const name of ['Mubarek Jemal Hassen', "N'gozi O_Brien", 'ናኦድ', 'José']) { expect(chatLocalpart('7d798218-09de-47a1-98eb-f61ec44e9280', name)).toMatch( /^[a-z0-9._=\-/]+$/, ); } }); });