// api/search/__tests__/bm25.test.js
const { bm25 } = require('../bm25');

describe('bm25', () => {
  const docs = [
    { tokens: ['合并', '请求', '创建', '代码'], text: '如何创建合并请求', breadcrumb: '合并请求 > 创建合并请求', url: '/合并请求/创建合并请求' },
    { tokens: ['代码', '仓库', '管理', '设置'], text: '代码仓库管理设置', breadcrumb: '代码库管理 > 仓库设置', url: '/代码库管理/仓库设置' },
    { tokens: ['组织', '创建', '管理', '成员'], text: '组织创建管理成员', breadcrumb: '组织管理 > 创建组织', url: '/组织管理/创建组织' },
    { tokens: ['疑修', '创建', '问题', '跟踪'], text: '疑修创建问题跟踪', breadcrumb: '疑修 > 创建疑修', url: '/疑修/创建疑修' },
  ];

  test('returns docs sorted by relevance', () => {
    const results = bm25(['合并', '请求'], docs, 2);
    expect(results.length).toBeGreaterThanOrEqual(1);
    expect(results[0].breadcrumb).toBe('合并请求 > 创建合并请求');
  });

  test('returns empty array for no matches', () => {
    const results = bm25(['不存在的关键词'], docs, 3);
    expect(results).toHaveLength(0);
  });

  test('respects topK limit', () => {
    const results = bm25(['创建'], docs, 2);
    expect(results.length).toBeLessThanOrEqual(2);
  });
});
