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,
  },
}));

// eslint-disable-next-line import/first -- request module must be mocked before loading the API wrapper.
import { createRecordsBatch, executeSharedFill, getRecordByTestWorkItem, previewSharedFill } from './records';

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

  it('uses the test-work-item route for the current record', () => {
    getRecordByTestWorkItem('item/1');

    expect(requestMocks.get).toHaveBeenCalledWith({
      url: '/api/eln/records/byTestWorkItem/item%2F1',
    });
  });

  it('sends test-work-item IDs for batch creation and shared-fill preview', () => {
    createRecordsBatch({ operationCode: 'op-1', testWorkItemIds: ['item-1'] });
    previewSharedFill({ testWorkItemIds: ['item-1', 'item-2'] });
    executeSharedFill({ operationCode: 'op-2', previewToken: 'preview-1', targets: [], testWorkItemIds: [], values: [] });

    expect(requestMocks.post).toHaveBeenNthCalledWith(1, {
      data: { operationCode: 'op-1', testWorkItemIds: ['item-1'] },
      url: '/api/eln/records/batch',
    });
    expect(requestMocks.post).toHaveBeenNthCalledWith(2, {
      data: { testWorkItemIds: ['item-1', 'item-2'] },
      url: '/api/eln/records/sharedFill/preview',
    });
    expect(requestMocks.post).toHaveBeenNthCalledWith(3, {
      data: { operationCode: 'op-2', previewToken: 'preview-1', targets: [], testWorkItemIds: [], values: [] },
      url: '/api/eln/records/sharedFill/execute',
    });
  });
});
