import { datosCxpGasto, motivoBloqueoEdicionFinanciera } from './cxp-gasto';

describe('motivoBloqueoEdicionFinanciera', () => {
  const sinVinculos = { pagos: 0, ordenesPago: [], recibos: [] };

  it('la CxP que el gasto crea solo, sin pagos, no bloquea la edición', () => {
    expect(motivoBloqueoEdicionFinanciera(sinVinculos)).toBeNull();
  });

  it('bloquea si tiene pagos a proveedor vigentes', () => {
    expect(motivoBloqueoEdicionFinanciera({ ...sinVinculos, pagos: 1 })).toMatch(/pagos aplicados/);
  });

  it('bloquea si está en una orden de pago y la nombra', () => {
    const motivo = motivoBloqueoEdicionFinanciera({ ...sinVinculos, ordenesPago: ['OP-0012'] });
    expect(motivo).toMatch(/orden de pago/i);
    expect(motivo).toContain('OP-0012');
  });

  it('bloquea si está en un recibo multi y lo nombra', () => {
    const motivo = motivoBloqueoEdicionFinanciera({ ...sinVinculos, recibos: ['0000045'] });
    expect(motivo).toMatch(/recibo/i);
    expect(motivo).toContain('0000045');
  });
});

describe('datosCxpGasto', () => {
  it('crédito o diferido a OP: queda todo el total pendiente', () => {
    expect(datosCxpGasto({ total: 1500000, pendiente: true })).toEqual({
      monto_original: 1500000,
      monto_pagado: 0,
      saldo_pendiente: 1500000,
      estado: 'pendiente',
    });
  });

  it('contado: se da por pagada con el total', () => {
    expect(datosCxpGasto({ total: 1200000.456, pendiente: false })).toEqual({
      monto_original: 1200000.46,
      monto_pagado: 1200000.46,
      saldo_pendiente: 0,
      estado: 'pagada',
    });
  });
});
