import { leerConfigPublicada } from './config-publicada';

function prismaCon(config: any, snapshot?: any) {
  return {
    ecommerce_config: { findUnique: jest.fn().mockResolvedValue(config) },
    ecommerce_config_version: {
      findUnique: jest.fn().mockResolvedValue(snapshot === undefined ? null : { config_snapshot: snapshot }),
    },
  } as any;
}

describe('leerConfigPublicada', () => {
  const vivo = { deposito_id: 'dep-borrador', lista_precios_id: 'lista-borrador', published_version_id: 'v1' };

  it('usa el snapshot publicado aunque el borrador haya cambiado', async () => {
    const prisma = prismaCon(vivo, { deposito_id: 'dep-publicado', lista_precios_id: null });
    const cfg = await leerConfigPublicada(prisma, 'e1', ['deposito_id', 'lista_precios_id'] as const);
    expect(cfg).toEqual({ deposito_id: 'dep-publicado', lista_precios_id: null });
  });

  it('cae a la columna viva si el snapshot es viejo y no congelaba el campo', async () => {
    const prisma = prismaCon(vivo, { nombre_comercial: 'Tienda' });
    const cfg = await leerConfigPublicada(prisma, 'e1', ['deposito_id'] as const);
    expect(cfg).toEqual({ deposito_id: 'dep-borrador' });
  });

  it('sin versión publicada usa las columnas vivas', async () => {
    const prisma = prismaCon({ ...vivo, published_version_id: null });
    const cfg = await leerConfigPublicada(prisma, 'e1', ['deposito_id'] as const);
    expect(cfg).toEqual({ deposito_id: 'dep-borrador' });
    expect(prisma.ecommerce_config_version.findUnique).not.toHaveBeenCalled();
  });

  it('devuelve null si la empresa no tiene tienda', async () => {
    const cfg = await leerConfigPublicada(prismaCon(null), 'e1', ['deposito_id'] as const);
    expect(cfg).toBeNull();
  });
});
