import { resolverSelectores } from './selectores';

const privilegios = [
  { id: '1', codigo: 'COB_REC_RECIBO_VER', accion: 'VER', submodulos: { codigo: 'COB_RECIBOS', modulo_id: 'm-cob' } },
  { id: '2', codigo: 'COB_CC_CUENTA_COBRAR_EDITAR', accion: 'EDITAR', submodulos: { codigo: 'COB_CUENTAS_COBRAR', modulo_id: 'm-cob' } },
  { id: '3', codigo: 'COB_CC_INTERES_MANUAL_CARGAR', accion: 'CREAR', submodulos: { codigo: 'COB_CUENTAS_COBRAR', modulo_id: 'm-cob' } },
  { id: '4', codigo: 'VEN_POS_VENTA_CREAR', accion: 'CREAR', submodulos: { codigo: 'VEN_POS', modulo_id: 'm-ven' } },
];
const modulos = [
  { id: 'm-cob', codigo: 'COBRANZAS' },
  { id: 'm-ven', codigo: 'VENTAS' },
];

describe('resolverSelectores', () => {
  it('MODULO.* toma todos los privilegios del módulo', () => {
    expect(resolverSelectores(['COBRANZAS.*'], privilegios, modulos).sort()).toEqual(['1', '2', '3']);
  });

  it('un selector con ! saca ese privilegio del resultado', () => {
    // El cobrador cobra el interés manual, pero no decide cargarlo.
    expect(resolverSelectores(['COBRANZAS.*', '!COB_CC_INTERES_MANUAL_CARGAR'], privilegios, modulos).sort()).toEqual(['1', '2']);
  });

  it('la exclusión vale aunque venga antes que el selector que lo incluye', () => {
    expect(resolverSelectores(['!COB_CC_INTERES_MANUAL_CARGAR', 'COBRANZAS.*'], privilegios, modulos).sort()).toEqual(['1', '2']);
  });

  it('*.ACCION toma los de esa acción en cualquier módulo', () => {
    expect(resolverSelectores(['*.CREAR'], privilegios, modulos).sort()).toEqual(['3', '4']);
  });

  it('SUBMODULO.ACCION y código exacto siguen funcionando', () => {
    expect(resolverSelectores(['COB_CUENTAS_COBRAR.EDITAR'], privilegios, modulos)).toEqual(['2']);
    expect(resolverSelectores(['VEN_POS_VENTA_CREAR'], privilegios, modulos)).toEqual(['4']);
  });

  it('* toma todo', () => {
    expect(resolverSelectores(['*'], privilegios, modulos).sort()).toEqual(['1', '2', '3', '4']);
  });
});
