import { isSideBarEmpty, getSideBarConfig, getFlatSideBarLinks } from 'client/theme-default/support/sideBar' describe('client/theme-default/support/sideBar', () => { it('checks if the given sidebar is empty', () => { expect(isSideBarEmpty(undefined)).toBe(true) expect(isSideBarEmpty(false)).toBe(true) expect(isSideBarEmpty([])).toBe(true) expect(isSideBarEmpty('auto')).toBe(false) expect(isSideBarEmpty([{ text: 'a', link: '/a' }])).toBe(false) }) it('gets the correct sidebar items', () => { expect(getSideBarConfig(false, '')).toEqual(false) expect(getSideBarConfig('auto', '')).toEqual('auto') const sidebar = [{ text: 'Title 01', link: 'title-01' }] const expected = [{ text: 'Title 01', link: 'title-01' }] expect(getSideBarConfig(sidebar, '')).toEqual(expected) }) it('gets the correct sidebar items from the given path', () => { const sidebar = { '/guide/': [{ text: 'G', link: 'g' }], '/': [{ text: 'R', link: 'r' }] } expect(getSideBarConfig(sidebar, '/')).toEqual(sidebar['/']) expect(getSideBarConfig(sidebar, '/guide/')).toEqual(sidebar['/guide/']) }) it('gets the correct sidebar items with various combination', () => { const s = { '/guide/': [{ text: 'G', link: 'g' }], api: [{ text: 'A', link: 'a' }] } expect(getSideBarConfig(s, '/guide/')).toEqual(s['/guide/']) // no ending slash should not match expect(getSideBarConfig(s, '/guide')).not.toEqual(s['/guide/']) expect(getSideBarConfig(s, 'guide/')).toEqual(s['/guide/']) expect(getSideBarConfig(s, 'guide/nested')).toEqual(s['/guide/']) expect(getSideBarConfig(s, '/guide/nested')).toEqual(s['/guide/']) expect(getSideBarConfig(s, 'guide/nested/')).toEqual(s['/guide/']) expect(getSideBarConfig(s, '/api/')).toEqual(s['api']) expect(getSideBarConfig(s, '/api')).toEqual(s['api']) expect(getSideBarConfig(s, 'api/')).toEqual(s['api']) expect(getSideBarConfig(s, 'api/nested')).toEqual(s['api']) expect(getSideBarConfig(s, '/api/nested')).toEqual(s['api']) expect(getSideBarConfig(s, 'api/nested/')).toEqual(s['api']) expect(getSideBarConfig(s, '/')).toEqual('auto') }) it('creates flat sidebar links', () => { const sidebar = [ { text: 'Title 01', link: '/title-01' }, { text: 'Title 02', link: '/title-02' }, { text: 'Title 03', link: '/title-03' } ] const expected = [ { text: 'Title 01', link: '/title-01' }, { text: 'Title 02', link: '/title-02' }, { text: 'Title 03', link: '/title-03' } ] expect(getFlatSideBarLinks(sidebar)).toEqual(expected) }) it('creates flat sidebar links with mixed sidebar group', () => { const sidebar = [ { text: 'Title 01', link: '/title-01', children: [ { text: 'Children 01', link: '/children-01' }, { text: 'Children 02', link: '/children-02' } ] }, { text: 'Title 02', link: '/title-02' }, { text: 'Title 03', link: '/title-03' } ] const expected = [ { text: 'Title 01', link: '/title-01' }, { text: 'Children 01', link: '/children-01' }, { text: 'Children 02', link: '/children-02' }, { text: 'Title 02', link: '/title-02' }, { text: 'Title 03', link: '/title-03' } ] expect(getFlatSideBarLinks(sidebar)).toEqual(expected) }) it('ignores any items with no `link` property', () => { const sidebar = [ { text: 'Title 01', children: [ { text: 'Children 01', link: '/children-01' }, { text: 'Children 02', link: '/children-02' } ] }, { text: 'Title 02', link: '/title-02' } ] const expected = [ { text: 'Children 01', link: '/children-01' }, { text: 'Children 02', link: '/children-02' }, { text: 'Title 02', link: '/title-02' } ] expect(getFlatSideBarLinks(sidebar)).toEqual(expected) }) it('removes `.md` or `.html` extention', () => { const sidebar = [ { text: 'Title 01', link: '/title-01.md' }, { text: 'Title 02', link: '/title-02.html' } ] const expected = [ { text: 'Title 01', link: '/title-01' }, { text: 'Title 02', link: '/title-02' } ] expect(getFlatSideBarLinks(sidebar)).toEqual(expected) }) })