import {DATE_RANGES, MAX_RANGE_DAYS, addDays, clampRange, getDateRange, rangeLengthDays, shiftRange} from './constants';

const today = new Date('2026-09-17T12:00:00Z');

describe('plages de dates de l\'agenda', () => {
  it('shouldOfferAWeekAndTenDaysAtMost', () => {
    expect(MAX_RANGE_DAYS).toBe(10);
    expect(getDateRange(DATE_RANGES.CURRENT_WEEK, today)).toEqual({start: '2026-09-17', end: '2026-09-23'});
    expect(getDateRange(DATE_RANGES.NEXT_10_DAYS, today)).toEqual({start: '2026-09-17', end: '2026-09-26'});
  });

  it('shouldClampAFreeRangeToTenDays', () => {
    expect(clampRange('2026-09-17', '2026-10-30')).toEqual({start: '2026-09-17', end: '2026-09-26'});
    expect(clampRange('2026-09-17', '2026-09-20')).toEqual({start: '2026-09-17', end: '2026-09-20'});
    expect(clampRange('2026-09-17', '2026-09-10')).toEqual({start: '2026-09-17', end: '2026-09-17'});
  });

  it('shouldShiftARangeByItsOwnLength', () => {
    expect(rangeLengthDays('2026-09-17', '2026-09-23')).toBe(7);
    expect(shiftRange('2026-09-17', '2026-09-23', 1)).toEqual({start: '2026-09-24', end: '2026-09-30'});
    expect(shiftRange('2026-09-17', '2026-09-23', -1)).toEqual({start: '2026-09-10', end: '2026-09-16'});
    expect(addDays('2026-12-30', 3)).toBe('2027-01-02');
  });
});
