import { imputacionComprobante } from './registro-comprobantes.util';

describe('imputacionComprobante', () => {
  const soloIva = { iva: true, ire: false, irp: false };
  const ivaIre = { iva: true, ire: true, irp: false };

  it('sin elección usa las obligaciones de la empresa', () => {
    expect(imputacionComprobante(ivaIre)).toEqual({ iva: true, ire: true, irp: false, noImputa: false });
  });

  it('no deducible: deja de imputar IVA si la empresa imputa otra obligación', () => {
    expect(imputacionComprobante(ivaIre, {}, { deducibleIva: false })).toEqual({
      iva: false,
      ire: true,
      irp: false,
      noImputa: false,
    });
  });

  it('no deducible en una empresa que sólo imputa IVA: sigue en IVA (la SET rechaza una fila sin imputación)', () => {
    expect(imputacionComprobante(soloIva, {}, { deducibleIva: false })).toEqual({
      iva: true,
      ire: false,
      irp: false,
      noImputa: false,
    });
  });

  it('lo elegido en el comprobante manda', () => {
    expect(imputacionComprobante(ivaIre, { iva: false, ire: true, irp: true })).toEqual({
      iva: false,
      ire: true,
      irp: true,
      noImputa: false,
    });
  });

  it('una elección sin ninguna obligación vuelve a las de la empresa', () => {
    expect(imputacionComprobante(ivaIre, { iva: false, ire: false, irp: false })).toMatchObject({ iva: true, ire: true });
  });

  it('"no imputa" sólo junto con otra obligación', () => {
    expect(imputacionComprobante(ivaIre, { noImputa: true }).noImputa).toBe(true);
    expect(imputacionComprobante({ iva: false, ire: false, irp: false }, { noImputa: true }).noImputa).toBe(false);
  });
});
