mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-16 18:46:57 +02:00
* wip: versioning * wip again * nits lint * refactor metadata code so that we can have inobject properties optimization, fix typing * remove buggy permalink code * modify versioned docs fixture such that foo/baz only exists in v1.0.0 * refactor metadata.ts so that there is less transformon object * more refactoring * reduce test fixtures, refactoring * refactoring readability * finish metadata part * refactor with readdir * first pass of implementation * fix mdx laoder * split generated routes by version for performance & smaller bundle * test data for demo * refactor with set * more tests * typo * fix typo * better temporary ui * stronger typing & docsVersion command * add 100% test coverage for docsVersion command * more test and delete manual docs cut * cut 2.0.0-alpha.35 docs * cut alpha.36 instead * copyright * delete versioned docs * stronger test on metadata * update typo
240 lines
5.4 KiB
TypeScript
240 lines
5.4 KiB
TypeScript
/**
|
|
* Copyright (c) 2017-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
import createOrder from '../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: {
|
|
next: 'doc2',
|
|
previous: undefined,
|
|
sidebar: 'docs',
|
|
},
|
|
doc2: {
|
|
next: 'doc3',
|
|
previous: 'doc1',
|
|
sidebar: 'docs',
|
|
},
|
|
doc3: {
|
|
next: 'doc4',
|
|
previous: 'doc2',
|
|
sidebar: 'docs',
|
|
},
|
|
doc4: {
|
|
next: undefined,
|
|
previous: 'doc3',
|
|
sidebar: 'docs',
|
|
},
|
|
doc5: {
|
|
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: {
|
|
next: 'doc2',
|
|
previous: undefined,
|
|
sidebar: 'docs',
|
|
},
|
|
doc2: {
|
|
next: 'doc3',
|
|
previous: 'doc1',
|
|
sidebar: 'docs',
|
|
},
|
|
doc3: {
|
|
next: 'doc4',
|
|
previous: 'doc2',
|
|
sidebar: 'docs',
|
|
},
|
|
doc4: {
|
|
next: undefined,
|
|
previous: 'doc3',
|
|
sidebar: 'docs',
|
|
},
|
|
doc5: {
|
|
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: {
|
|
next: undefined,
|
|
previous: undefined,
|
|
sidebar: 'docs',
|
|
},
|
|
'version-1.2.3-doc1': {
|
|
next: undefined,
|
|
previous: 'version-1.2.3-doc2',
|
|
sidebar: 'version-1.2.3-docs',
|
|
},
|
|
'version-1.2.3-doc2': {
|
|
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: {
|
|
next: 'doc3',
|
|
previous: undefined,
|
|
sidebar: 'docs',
|
|
},
|
|
doc3: {
|
|
next: undefined,
|
|
previous: 'doc2',
|
|
sidebar: 'docs',
|
|
},
|
|
doc5: {
|
|
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"`,
|
|
);
|
|
});
|
|
});
|