import { jest } from '@jest/globals'
import { liquid } from '../../lib/render-content/index.js'
import { loadPageMap } from '../../lib/page-data.js'
import htmlEntities from 'html-entities'
import nonEnterpriseDefaultVersion from '../../lib/non-enterprise-default-version.js'
const entities = new htmlEntities.XmlEntities()
describe('liquid helper tags', () => {
jest.setTimeout(60 * 1000)
const context = {}
let pageMap
beforeAll(async () => {
pageMap = await loadPageMap()
context.currentLanguage = 'en'
context.currentVersion = nonEnterpriseDefaultVersion
context.pages = pageMap
context.redirects = {
'/en/desktop/contributing-and-collaborating-using-github-desktop': `/en/${nonEnterpriseDefaultVersion}/desktop/contributing-and-collaborating-using-github-desktop`,
'/ja/desktop/contributing-and-collaborating-using-github-desktop': `/ja/${nonEnterpriseDefaultVersion}/desktop/contributing-and-collaborating-using-github-desktop`,
'/en/desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories': `/en/${nonEnterpriseDefaultVersion}/desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories`,
'/en/github/writing-on-github/basic-writing-and-formatting-syntax': `/en/${nonEnterpriseDefaultVersion}/github/writing-on-github/basic-writing-and-formatting-syntax`,
}
context.site = {
data: {
reusables: {
example: 'a rose by any other name\nwould smell as sweet',
},
},
}
context.page = {
relativePath: 'desktop/index.md',
}
})
test('link tag with relative path (English)', async () => {
const template = '{% link /contributing-and-collaborating-using-github-desktop %}'
const expected =
'Contributing and collaborating using GitHub Desktop'
const output = await liquid.parseAndRender(template, context)
expect(output).toBe(expected)
})
test('link tag with relative path (translated)', async () => {
context.currentLanguage = 'ja'
const template = '{% link /contributing-and-collaborating-using-github-desktop %}'
const expected =
''
const output = await liquid.parseAndRender(template, context)
expect(output.includes(expected)).toBe(true)
// set this back to english
context.currentLanguage = 'en'
})
test('link tag with local variable', async () => {
const template = `{% assign href = "/contributing-and-collaborating-using-github-desktop" %}
{% link {{ href }} %}`
const expected =
''
const output = await liquid.parseAndRender(template, context)
expect(output.includes(expected)).toBe(true)
})
test('link tag with absolute path', async () => {
context.currentLanguage = 'en'
const template =
'{% link /desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories %}'
const expected =
'Adding and cloning repositories'
const output = await liquid.parseAndRender(template, context)
expect(output).toBe(expected)
})
test('link_with_intro tag', async () => {
const template = '{% link_with_intro /contributing-and-collaborating-using-github-desktop %}'
const page = pageMap['/en/desktop/contributing-and-collaborating-using-github-desktop']
const expected = `
${page.title}→
${page.intro}
` const output = entities.decode(await liquid.parseAndRender(template, context)) expect(output).toBe(expected) }) test('link_in_list tag', async () => { const template = '{% link_in_list /contributing-and-collaborating-using-github-desktop %}' const expected = '- Contributing and collaborating using GitHub Desktop' const output = await liquid.parseAndRender(template, context) expect(output).toBe(expected) }) test('link_as_article_card', async () => { const template = '{% link_as_article_card /contributing-and-collaborating-using-github-desktop %}' const expected = `