import createOrder from '@lib/load/docs/order';

describe('createOrder', () => {
  test('should populate docs index from multiple sidebars', () => {
    const result = createOrder({
      docs: {
        Category1: ['doc1', 'doc2'],
        Category2: ['doc3', 'doc4']
      },
      otherDocs: {
        Category1: ['doc5']
      }
    });
    expect(result).toEqual({
      doc1: {
        category: 'Category1',
        next: 'doc2',
        previous: undefined,
        sidebar: 'docs'
      },
      doc2: {
        category: 'Category1',
        next: 'doc3',
        previous: 'doc1',
        sidebar: 'docs'
      },
      doc3: {
        category: 'Category2',
        next: 'doc4',
        previous: 'doc2',
        sidebar: 'docs'
      },
      doc4: {
        category: 'Category2',
        next: undefined,
        previous: 'doc3',
        sidebar: 'docs'
      },
      doc5: {
        category: 'Category1',
        next: undefined,
        previous: undefined,
        sidebar: 'otherDocs'
      }
    });
  });

  test('should resolve docs from older versions', () => {
    const result = createOrder({
      docs: {
        Category1: ['doc1']
      },
      'version-1.2.3-docs': {
        Category1: ['version-1.2.3-doc2'],
        Category2: ['version-1.2.3-doc1']
      }
    });
    expect(result).toEqual({
      doc1: {
        category: 'Category1',
        next: undefined,
        previous: undefined,
        sidebar: 'docs'
      },
      'version-1.2.3-doc1': {
        category: 'Category2',
        next: undefined,
        previous: 'version-1.2.3-doc2',
        sidebar: 'version-1.2.3-docs'
      },
      'version-1.2.3-doc2': {
        category: 'Category1',
        next: 'version-1.2.3-doc1',
        previous: undefined,
        sidebar: 'version-1.2.3-docs'
      }
    });
  });

  test('edge cases', () => {
    expect(createOrder({})).toEqual({});
    expect(createOrder(null)).toEqual({});
    expect(createOrder(undefined)).toEqual({});
  });
});