import { prorratearDescuento } from './prorrateo-descuento';

const suma = (xs: number[]) => xs.reduce((s, v) => s + v, 0);

describe('prorratearDescuento', () => {
  it('160.000 entre seis cuotas iguales suma exacto, no 160.002', () => {
    const partes = prorratearDescuento(160000, Array(6).fill(210000));
    expect(suma(partes)).toBe(160000);
    partes.forEach((p) => expect(Math.abs(p - 160000 / 6)).toBeLessThan(1));
  });

  it('con saldos distintos respeta la proporción', () => {
    const partes = prorratearDescuento(100000, [300000, 100000, 100000]);
    expect(partes).toEqual([60000, 20000, 20000]);
  });

  it('tampoco se queda corto cuando el redondeo baja', () => {
    // 100.000 / 3 = 33.333,33: redondeando cada una daría 99.999.
    expect(suma(prorratearDescuento(100000, [1, 1, 1]))).toBe(100000);
  });

  it('sin descuento o sin saldo devuelve ceros', () => {
    expect(prorratearDescuento(0, [100, 200])).toEqual([0, 0]);
    expect(prorratearDescuento(500, [0, 0])).toEqual([0, 0]);
  });
});
