import { HUMAN_PACING, pickScroll } from './pacing.js';

/**
 * 수집기 속도(Pacing) 테스트:
 * 이 테스트는 우리가 설정한 '사람 같은 행동 패턴'이 경쟁 서비스와 일치하는지,
 * 그리고 랜덤한 스크롤 동작이 의도대로 작동하는지 검증합니다.
 */
describe('수집기 속도 및 행동 테스트', () => {
  
  test('경쟁사(Competitor) 설정값과 일치해야 함', () => {
    // 봇으로 차단당하지 않기 위해 벤치마킹한 설정값들이 정확한지 확인합니다.
    expect(HUMAN_PACING.slowMoMs).toBe(300);
    expect(HUMAN_PACING.noNewDataLimit).toBe(4);
  });

  test('스크롤 동작(pickScroll)이 랜덤하게 잘 작동하는지 확인', () => {
    // 50% 확률로 End 키(페이지 끝으로 이동)를 누르는지 확인
    // rndMode 0.3은 0.5보다 작으므로 'end' 모드가 나와야 합니다.
    expect(pickScroll(0.3, 0)).toEqual({ mode: 'end' });

    // 50% 확률로 휠 스크롤을 하는지 확인
    // rndMode 0.7은 0.5보다 크므로 'wheel' 모드가 나와야 합니다.
    const scroll = pickScroll(0.7, 0); // 0.7(mode), 0(min distance)
    
    expect(scroll).toHaveProperty('mode', 'wheel');
    
    // 휠 스크롤 거리가 최소값(4000)으로 설정되는지 확인
    if (scroll.mode === 'wheel') {
      expect(scroll.distance).toBe(HUMAN_PACING.scrollDistMin);
    }
  });

  test('최대 스크롤 거리를 넘지 않는지 확인', () => {
    // 난수(rndDist)가 1일 때 최대 거리(6000)가 나오는지 테스트
    const scroll = pickScroll(0.7, 1);
    if (scroll.mode === 'wheel') {
      expect(scroll.distance).toBe(HUMAN_PACING.scrollDistMax);
    }
  });
});