// Session 42 — Phase 4: grade-adapter intel fields + enhanced game card. const fs = require('fs'); const path = require('path'); const WEB = path.join(__dirname, '..', '..', 'web', 'src'); const read = (rel) => fs.readFileSync(path.join(WEB, rel), 'utf8'); const { mapScanToGradeResult, buildIntelFields } = require('../../web/src/lib/gradeAdapter'); describe('gradeAdapter — Player Intelligence fields', () => { it('omits all new sections when the engine supplies nothing (self-hide)', () => { const r = mapScanToGradeResult({ player: 'X', stat: 'points', line: 26.5, grade: 'A' }); expect(r.archetypeBlend).toBeUndefined(); expect(r.statContext).toBeUndefined(); expect(r.vyndrIntel).toBeUndefined(); expect(r.propDNA).toBeUndefined(); }); it('lifts a single archetype name into a one-segment blend', () => { const f = buildIntelFields({ archetype: 'VOLUME SCORER' }); expect(f.archetypeBlend).toEqual([{ archetype: 'VOLUME SCORER', weight: 1 }]); }); it('passes through a full blend + propDNA + statContext + vyndrIntel', () => { const r = mapScanToGradeResult({ player: 'Wemby', stat: 'points', line: 26.5, grade: 'A', archetype_blend: [{ archetype: 'TWO-WAY ANCHOR', weight: 0.6 }, { archetype: 'STRETCH BIG', weight: 0.4 }], prop_dna: { reliable: ['points'], volatile: ['rebounds'] }, season_avg: 26.9, last10_avg: 28.4, vs_opp_avg: 30.1, form: 92, usage: '31.2%', matchup_grade: 'A', rest: '+2.4%', }); expect(r.archetypeBlend).toHaveLength(2); expect(r.propDNA.reliable).toContain('points'); expect(r.statContext).toEqual({ season: '26.9', last10: '28.4', vsOpp: '30.1' }); expect(r.vyndrIntel).toEqual({ form: 92, usage: '31.2%', matchup: 'A', rest: '+2.4%' }); }); }); describe('GradeResultCard — new sections', () => { const src = read('components/vyndr/GradeResultCard.tsx'); it('renders the archetype strip + STAT CONTEXT + VYNDR INTELLIGENCE', () => { expect(src).toContain('ARCHETYPE STRIP'); expect(src).toContain('STAT CONTEXT'); expect(src).toContain('VYNDR INTELLIGENCE'); expect(src).toContain('ArchetypeBlend'); }); }); describe('Enhanced GameCard (Session 42)', () => { const src = read('components/vyndr/GameCard.tsx'); it('renders MLB starting pitchers when provided', () => { expect(src).toContain('g.pitchers'); expect(src).toContain('STARTING'); expect(src).toContain('ERA'); }); it('prefers the player-grouped StatStrip (name once) over per-prop rows', () => { expect(src).toContain('g.playerStrips'); expect(src).toContain('StatStrip'); expect(src).toContain('variant="compact"'); }); it('links player names to their profile', () => { expect(src).toContain('playerHref'); }); });