| import { describe, expect, test } from 'vitest' | |
| import { getDOM } from '@/tests/helpers/e2etest' | |
| describe('breadcrumbs', () => { | |
| test('links always prefixed with language', async () => { | |
| const $ = await getDOM('/get-started/start-your-journey/hello-world') | |
| const links = $('[data-testid=breadcrumbs-in-article] a') | |
| links.each((i, element) => { | |
| expect($(element).attr('href')!.startsWith('/en/')).toBe(true) | |
| }) | |
| expect.assertions(3) | |
| }) | |
| test('top-level hidden /search page has no breadcrumbs', async () => { | |
| const $ = await getDOM('/search') | |
| const links = $('[data-testid=breadcrumbs-in-article] a') | |
| expect(links.length).toBe(0) | |
| const headers = $('[data-testid=breadcrumbs-header]') | |
| expect(headers.length).toBe(0) | |
| }) | |
| test('short titles are preferred', async () => { | |
| const $ = await getDOM('/get-started/foo/bar') | |
| const links = $('[data-testid=breadcrumbs-in-article] a:last-child') | |
| expect(links.text()).toBe('Bar') | |
| }) | |
| test('article pages have breadcrumbs in article with product, category, subcategory, and article and last breadcrumb is not viewable', async () => { | |
| const $ = await getDOM('/get-started/start-your-journey/hello-world') | |
| const links = $('[data-testid=breadcrumbs-in-article] a') | |
| expect(links.length).toBe(3) | |
| expect($(links[0]).text()).toBe('Get started') | |
| expect($(links[0]).attr('class')!.includes('d-none')).toBe(false) | |
| expect($(links[1]).text()).toBe('Start your journey') | |
| expect($(links[1]).attr('class')!.includes('d-none')).toBe(false) | |
| expect($(links[2]).text()).toBe('Hello World') | |
| expect($(links[2]).attr('class')!.includes('d-none')).toBe(true) | |
| }) | |
| test('works for enterprise-server articles too', async () => { | |
| const $ = await getDOM('/enterprise-server@latest/get-started/start-your-journey/hello-world') | |
| const links = $('[data-testid=breadcrumbs-in-article] a') | |
| expect(links.length).toBe(3) | |
| expect($(links[0]).text()).toBe('Get started') | |
| expect($(links[1]).text()).toBe('Start your journey') | |
| expect($(links[2]).text()).toBe('Hello World') | |
| }) | |
| test('works for titles that depend on Liquid', async () => { | |
| const $fpt = await getDOM('/get-started/start-your-journey/dynamic-title') | |
| const fptLinks = $fpt('[data-testid=breadcrumbs-in-article] a') | |
| expect($fpt(fptLinks[2]).text()).toBe('Hello HubGit') | |
| const $ghec = await getDOM( | |
| '/enterprise-cloud@latest/get-started/start-your-journey/dynamic-title', | |
| ) | |
| const ghecLinks = $ghec('[data-testid=breadcrumbs-in-article] a') | |
| expect($ghec(ghecLinks[2]).text()).toBe('Greetings HubGit Enterprise Cloud') | |
| }) | |
| test('early access article pages have breadcrumbs with product, category, and article', async () => { | |
| const $ = await getDOM('/early-access/secrets/deeper/mariana-trench') | |
| const $breadcrumbTitles = $( | |
| '[data-testid=breadcrumbs-in-article] [data-testid=breadcrumb-title]', | |
| ) | |
| const $breadcrumbLinks = $('[data-testid=breadcrumbs-in-article] a') | |
| expect($breadcrumbTitles.length).toBe(0) | |
| expect($breadcrumbLinks.length).toBe(2) | |
| expect(($breadcrumbLinks[0] as cheerio.TagElement).attribs.title).toBe('Deeper secrets') | |
| expect(($breadcrumbLinks[1] as cheerio.TagElement).attribs.title).toBe('Mariana Trench') | |
| }) | |
| }) | |