mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-04 04:37:28 +02:00
* feat(sidebar): support external links and linking to docs from other sidebars * Update styles.css
253 lines
6.1 KiB
JavaScript
253 lines
6.1 KiB
JavaScript
import createOrder from '@lib/load/docs/order';
|
|
|
|
describe('createOrder', () => {
|
|
test('multiple sidebars with subcategory', () => {
|
|
const result = createOrder({
|
|
docs: [
|
|
{
|
|
type: 'category',
|
|
label: 'Category1',
|
|
items: [
|
|
{
|
|
type: 'category',
|
|
label: 'Subcategory 1',
|
|
items: [{type: 'doc', id: 'doc1'}],
|
|
},
|
|
{
|
|
type: 'category',
|
|
label: 'Subcategory 2',
|
|
items: [{type: 'doc', id: 'doc2'}],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
type: 'category',
|
|
label: 'Category2',
|
|
items: [{type: 'doc', id: 'doc3'}, {type: 'doc', id: 'doc4'}],
|
|
},
|
|
],
|
|
otherDocs: [
|
|
{
|
|
type: 'category',
|
|
label: 'Category1',
|
|
items: [{type: 'doc', id: 'doc5'}],
|
|
},
|
|
],
|
|
});
|
|
expect(result).toEqual({
|
|
doc1: {
|
|
category: 'Category1',
|
|
subCategory: 'Subcategory 1',
|
|
next: 'doc2',
|
|
previous: undefined,
|
|
sidebar: 'docs',
|
|
},
|
|
doc2: {
|
|
category: 'Category1',
|
|
subCategory: 'Subcategory 2',
|
|
next: 'doc3',
|
|
previous: 'doc1',
|
|
sidebar: 'docs',
|
|
},
|
|
doc3: {
|
|
category: 'Category2',
|
|
subCategory: undefined,
|
|
next: 'doc4',
|
|
previous: 'doc2',
|
|
sidebar: 'docs',
|
|
},
|
|
doc4: {
|
|
category: 'Category2',
|
|
subCategory: undefined,
|
|
next: undefined,
|
|
previous: 'doc3',
|
|
sidebar: 'docs',
|
|
},
|
|
doc5: {
|
|
category: 'Category1',
|
|
subCategory: undefined,
|
|
next: undefined,
|
|
previous: undefined,
|
|
sidebar: 'otherDocs',
|
|
},
|
|
});
|
|
});
|
|
test('multiple sidebars without subcategory', () => {
|
|
const result = createOrder({
|
|
docs: [
|
|
{
|
|
type: 'category',
|
|
label: 'Category1',
|
|
items: [{type: 'doc', id: 'doc1'}, {type: 'doc', id: 'doc2'}],
|
|
},
|
|
{
|
|
type: 'category',
|
|
label: 'Category2',
|
|
items: [{type: 'doc', id: 'doc3'}, {type: 'doc', id: 'doc4'}],
|
|
},
|
|
],
|
|
otherDocs: [
|
|
{
|
|
type: 'category',
|
|
label: 'Category1',
|
|
items: [{type: 'doc', id: 'doc5'}],
|
|
},
|
|
],
|
|
});
|
|
expect(result).toEqual({
|
|
doc1: {
|
|
category: 'Category1',
|
|
subCategory: undefined,
|
|
next: 'doc2',
|
|
previous: undefined,
|
|
sidebar: 'docs',
|
|
},
|
|
doc2: {
|
|
category: 'Category1',
|
|
subCategory: undefined,
|
|
next: 'doc3',
|
|
previous: 'doc1',
|
|
sidebar: 'docs',
|
|
},
|
|
doc3: {
|
|
category: 'Category2',
|
|
subCategory: undefined,
|
|
next: 'doc4',
|
|
previous: 'doc2',
|
|
sidebar: 'docs',
|
|
},
|
|
doc4: {
|
|
category: 'Category2',
|
|
subCategory: undefined,
|
|
next: undefined,
|
|
previous: 'doc3',
|
|
sidebar: 'docs',
|
|
},
|
|
doc5: {
|
|
category: 'Category1',
|
|
subCategory: undefined,
|
|
next: undefined,
|
|
previous: undefined,
|
|
sidebar: 'otherDocs',
|
|
},
|
|
});
|
|
});
|
|
|
|
test('versioned sidebars', () => {
|
|
const result = createOrder({
|
|
docs: [
|
|
{
|
|
type: 'category',
|
|
label: 'Category1',
|
|
items: [{type: 'doc', id: 'doc1'}],
|
|
},
|
|
],
|
|
'version-1.2.3-docs': [
|
|
{
|
|
type: 'category',
|
|
label: 'Category1',
|
|
items: [{type: 'doc', id: 'version-1.2.3-doc2'}],
|
|
},
|
|
{
|
|
type: 'category',
|
|
label: 'Category2',
|
|
items: [{type: 'doc', id: 'version-1.2.3-doc1'}],
|
|
},
|
|
],
|
|
});
|
|
expect(result).toEqual({
|
|
doc1: {
|
|
category: 'Category1',
|
|
subCategory: undefined,
|
|
next: undefined,
|
|
previous: undefined,
|
|
sidebar: 'docs',
|
|
},
|
|
'version-1.2.3-doc1': {
|
|
category: 'Category2',
|
|
subCategory: undefined,
|
|
next: undefined,
|
|
previous: 'version-1.2.3-doc2',
|
|
sidebar: 'version-1.2.3-docs',
|
|
},
|
|
'version-1.2.3-doc2': {
|
|
category: 'Category1',
|
|
subCategory: undefined,
|
|
next: 'version-1.2.3-doc1',
|
|
previous: undefined,
|
|
sidebar: 'version-1.2.3-docs',
|
|
},
|
|
});
|
|
});
|
|
|
|
test('multiple sidebars with subcategories, refs and external links', () => {
|
|
const result = createOrder({
|
|
docs: [
|
|
{
|
|
type: 'category',
|
|
label: 'Category1',
|
|
items: [
|
|
{
|
|
type: 'category',
|
|
label: 'Subcategory 1',
|
|
items: [{type: 'link', href: '//example.com', label: 'bar'}],
|
|
},
|
|
{
|
|
type: 'category',
|
|
label: 'Subcategory 2',
|
|
items: [{type: 'doc', id: 'doc2'}],
|
|
},
|
|
{
|
|
type: 'category',
|
|
label: 'Subcategory 1',
|
|
items: [{type: 'link', href: '//example2.com', label: 'baz'}],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
type: 'category',
|
|
label: 'Category2',
|
|
items: [{type: 'doc', id: 'doc3'}, {type: 'ref', id: 'doc4'}],
|
|
},
|
|
],
|
|
otherDocs: [
|
|
{
|
|
type: 'category',
|
|
label: 'Category1',
|
|
items: [{type: 'doc', id: 'doc5'}],
|
|
},
|
|
],
|
|
});
|
|
expect(result).toEqual({
|
|
doc2: {
|
|
category: 'Category1',
|
|
subCategory: 'Subcategory 2',
|
|
next: 'doc3',
|
|
previous: undefined,
|
|
sidebar: 'docs',
|
|
},
|
|
doc3: {
|
|
category: 'Category2',
|
|
subCategory: undefined,
|
|
next: undefined,
|
|
previous: 'doc2',
|
|
sidebar: 'docs',
|
|
},
|
|
doc5: {
|
|
category: 'Category1',
|
|
subCategory: undefined,
|
|
next: undefined,
|
|
previous: undefined,
|
|
sidebar: 'otherDocs',
|
|
},
|
|
});
|
|
});
|
|
|
|
test('edge cases', () => {
|
|
expect(createOrder({})).toEqual({});
|
|
expect(createOrder(undefined)).toEqual({});
|
|
expect(() => createOrder(null)).toThrowErrorMatchingInlineSnapshot(
|
|
`"Cannot convert undefined or null to object"`,
|
|
);
|
|
});
|
|
});
|