import { InventarioFisicoService } from './inventario-fisico.service';

/**
 * El conteo del inventario físico lista los productos con el mismo filtro por
 * rubro que el catálogo (Productos): con "Regalería" elegido no aparecen los del
 * Taller. Ver docs/plan-rubros-multi-sucursal.md.
 */
describe('InventarioFisicoService.productosZona con rubro', () => {
  const crearPrisma = () => ({
    usuario: { findUnique: jest.fn().mockResolvedValue({ is_superadmin: true }) },
    empresas: { findUnique: jest.fn().mockResolvedValue({ type: 'subsidiary' }) },
    asignacion_sucursal_caja_usuario: { findMany: jest.fn().mockResolvedValue([]) },
    inventario_conteos: { findMany: jest.fn().mockResolvedValue([]) },
    productos: { count: jest.fn().mockResolvedValue(0), findMany: jest.fn().mockResolvedValue([]) },
    stock_deposito: { groupBy: jest.fn().mockResolvedValue([]), findMany: jest.fn().mockResolvedValue([]) },
  });

  it('con rubro pedido, el where de productos lleva el filtro por rubro', async () => {
    const prisma: any = crearPrisma();
    const service = new InventarioFisicoService(prisma);
    await service.productosZona('emp', undefined, null, 'ses', undefined, 0, 50, undefined, undefined, { usuarioId: 'usr', rubroId: 'rubro-regalos' });
    const where = prisma.productos.findMany.mock.calls[0][0].where;
    expect(JSON.stringify(where)).toContain('rubro-regalos');
  });

  it('sin rubro y sin restricción, no filtra por rubro', async () => {
    const prisma: any = crearPrisma();
    const service = new InventarioFisicoService(prisma);
    await service.productosZona('emp', undefined, null, 'ses', undefined, 0, 50, undefined, undefined, { usuarioId: 'usr' });
    const where = prisma.productos.findMany.mock.calls[0][0].where;
    expect(JSON.stringify(where)).not.toContain('rubro');
  });
});
