import { beforeEach, describe, expect, it, vi } from 'vitest';

const requestMocks = vi.hoisted(() => ({
  get: vi.fn(),
  post: vi.fn(),
}));

vi.mock('#/api/request', () => ({
  defHttp: {
    get: requestMocks.get,
    post: requestMocks.post,
    put: vi.fn(),
  },
}));

// eslint-disable-next-line import/first -- request module must be mocked before loading the API wrapper.
import {
  getFormulaTemplateReferences,
  preReleaseFormulaVersion,
  switchCurrentFormulaVersion,
} from './formulas';

describe('eln formula API paths', () => {
  beforeEach(() => vi.clearAllMocks());

  it('uses lowerCamelCase path segments', () => {
    getFormulaTemplateReferences('formula-1', { currentPage: 1, pageSize: 20 });
    preReleaseFormulaVersion('version-1');
    switchCurrentFormulaVersion('formula-1', { reason: 'switch', versionId: 'version-1' });

    expect(requestMocks.get).toHaveBeenCalledWith({
      data: { currentPage: 1, pageSize: 20 },
      url: '/api/eln/formulaCatalog/formula-1/templateReferences',
    });
    expect(requestMocks.post.mock.calls.map(([request]) => request.url)).toEqual([
      '/api/eln/formulaCatalog/versions/version-1/preRelease',
      '/api/eln/formulaCatalog/formula-1/currentVersion',
    ]);
  });
});
