import { esMedioSinCaja, medioNoMueveCaja, mediosSinCajaDeEmpresa } from './medio-pago-sin-caja.util';

describe('medios que no mueven dinero', () => {
  const db = (codigo: number, noMueveCaja: boolean | null) => ({
    medio_pago: { findUnique: jest.fn().mockResolvedValue({ codigo }) },
    empresa_medio_pago: {
      findFirst: jest.fn().mockResolvedValue(noMueveCaja == null ? null : { no_mueve_caja: noMueveCaja }),
      findMany: jest.fn().mockResolvedValue([{ medio_pago_id: 'otro' }]),
    },
  });

  it('"Pago por anticipo" (11) no mueve dinero nunca, sin configuración', async () => {
    expect(esMedioSinCaja({ codigo: 11 })).toBe(true);
    expect(await medioNoMueveCaja(db(11, null), 'emp', 'm')).toBe(true);
  });

  it('"Otro" (22) mueve dinero salvo que la empresa lo marque', async () => {
    expect(await medioNoMueveCaja(db(22, false), 'emp', 'm')).toBe(false);
    expect(await medioNoMueveCaja(db(22, null), 'emp', 'm')).toBe(false);
    expect(await medioNoMueveCaja(db(22, true), 'emp', 'm')).toBe(true);
  });

  it('sin medio, mueve dinero (lo decide el resto del flujo)', async () => {
    expect(await medioNoMueveCaja(db(22, true), 'emp', null)).toBe(false);
  });

  it('lista los medios marcados de la empresa', async () => {
    expect([...(await mediosSinCajaDeEmpresa(db(22, true), 'emp'))]).toEqual(['otro']);
  });
});
