import { calcularDv, dvValido } from './ruc.util';

describe('dígito verificador de RUC (módulo 11)', () => {
  /** RUCs reales con los que trabajamos esta semana. */
  it('coincide con el DV de empresas reales', () => {
    expect(calcularDv('80144315')).toBe(6); // DOBA S.A.
    expect(calcularDv('80159925')).toBe(3); // MISTERHOME E.A.S.
    expect(calcularDv('80100092')).toBe(0); // BLUE DRAGON SRL
    expect(calcularDv('2156747')).toBe(6);  // Comercial Kety
  });

  it('ignora puntos y guiones de cómo lo tipea la gente', () => {
    expect(calcularDv('80.144.315')).toBe(calcularDv('80144315'));
    expect(calcularDv('80144315-6')).not.toBeNull();
  });

  it('sin RUC no inventa un dígito', () => {
    expect(calcularDv('')).toBeNull();
    expect(calcularDv('abc')).toBeNull();
  });
});

describe('dvValido', () => {
  it('acepta el par correcto, como número o como texto', () => {
    expect(dvValido('80144315', '6')).toBe(true);
    expect(dvValido('80144315', 6)).toBe(true);
  });

  it('rechaza un DV mal tipeado: SIFEN lo rechazaría DESPUÉS de emitir', () => {
    expect(dvValido('80144315', '7')).toBe(false);
    expect(dvValido('80144315', null)).toBe(false);
  });

  it('sin RUC no valida nada', () => {
    expect(dvValido(null, '6')).toBe(false);
  });
});
