// Session 42 — player intelligence aggregation. cacheGet is injected so these // run pure (no Redis, no HTTP, no rate limiter). const svc = require('../../src/services/playerIntelService'); const cacheWith = (envelope) => async (key) => (key.startsWith('grades:') ? envelope : null); describe('sanitizePlayerName', () => { it('decodes URL encoding and keeps name punctuation', () => { expect(svc.sanitizePlayerName('Luka%20Doncic')).toBe('Luka Doncic'); expect(svc.sanitizePlayerName("De'Aaron Fox")).toBe("De'Aaron Fox"); expect(svc.sanitizePlayerName('Ronald Acuna Jr.')).toBe('Ronald Acuna Jr'); // S46: suffix de-dotted }); it('strips injection / control characters', () => { expect(svc.sanitizePlayerName('Luka