import {
  ORIGENES_MOVIMIENTO_CON_ASIENTO_PROPIO,
  facturaVentaContabilizable,
  movimientoSeContabilizaPorSuOrigen,
} from './reglas-contabilizacion';

describe('facturaVentaContabilizable', () => {
  it('solo las aprobadas por SIFEN generan asiento', () => {
    expect(facturaVentaContabilizable('Aprobado')).toBe(true);
  });

  it('anuladas, rechazadas, pendientes o enviadas no', () => {
    // 'Anulado' es el valor real de factura_cab: la conciliación filtraba 'Anulada'
    // y por eso las anuladas seguían apareciendo como pendientes.
    for (const estado of ['Anulado', 'Anulada', 'Rechazado', 'Pendiente', 'Enviado', null, undefined]) {
      expect(facturaVentaContabilizable(estado)).toBe(false);
    }
  });
});

describe('movimientoSeContabilizaPorSuOrigen', () => {
  it('un movimiento generado por un gasto, recibo, OP, rendición o transferencia ya tiene asiento en ese documento', () => {
    for (const origen of ORIGENES_MOVIMIENTO_CON_ASIENTO_PROPIO) {
      expect(movimientoSeContabilizaPorSuOrigen(origen)).toBe(true);
    }
    expect(ORIGENES_MOVIMIENTO_CON_ASIENTO_PROPIO).toEqual(
      expect.arrayContaining(['gasto_cab', 'recibos_multi', 'ORDEN_PAGO_PROVEEDOR', 'RENDICION_ADELANTO', 'TRANSFERENCIA_ORIGEN']),
    );
  });

  it('los manuales, de extracto y ajustes se contabilizan por sí mismos', () => {
    for (const origen of [null, undefined, 'IMPORT_EXTRACTO', 'CONCILIACION_AJUSTE', 'AJUSTE_SALDO', 'CHEQUE_ANULADO']) {
      expect(movimientoSeContabilizaPorSuOrigen(origen)).toBe(false);
    }
  });
});
