1
0
mirror of synced 2025-12-25 02:17:36 -05:00

Handle learning track paths from a different product (#21776)

* Add trackProduct property

* Fall back to learning track product URL param

* Add product URL param to learning track banner

* Add product URL param to featured track links

* Fix typo :(

* Add product URL param to learning track

* Add multi-product learning track tests

* Re-enable tests with a Code Security learning track

* Re-enable more tests with Code Security learning tracks

* Add more multi-product testing

* Update components/sublanding/LearningTrack.tsx

Co-authored-by: Kevin Heis <heiskr@users.noreply.github.com>

Co-authored-by: Kevin Heis <heiskr@users.noreply.github.com>
This commit is contained in:
Robert Sese
2021-09-30 16:17:02 -05:00
committed by GitHub
parent 180118af53
commit 000799df17
8 changed files with 75 additions and 19 deletions

View File

@@ -3,9 +3,9 @@ import { jest } from '@jest/globals'
jest.setTimeout(3 * 60 * 1000)
describe.skip('learning tracks', () => {
describe('learning tracks', () => {
test('render first track as feature track', async () => {
const $ = await getDOM('/en/actions/guides')
const $ = await getDOM('/en/code-security/guides')
expect($('[data-testid=feature-track]')).toHaveLength(1)
const href = $('[data-testid=feature-track] li a').first().attr('href')
const found = href.match(/.*\?learn=(.*)/i)
@@ -19,7 +19,7 @@ describe.skip('learning tracks', () => {
})
test('render other tracks', async () => {
const $ = await getDOM('/en/actions/guides')
const $ = await getDOM('/en/code-security/guides')
expect($('[data-testid=learning-track]').length).toBeGreaterThanOrEqual(4)
$('[data-testid=learning-track]').each((i, trackElem) => {
const href = $(trackElem).find('.Box-header a').first().attr('href')
@@ -37,16 +37,16 @@ describe.skip('learning tracks', () => {
})
})
describe.skip('navigation banner', () => {
describe('navigation banner', () => {
test('render navigation banner when url includes correct learning track name', async () => {
const $ = await getDOM(
'/en/actions/guides/setting-up-continuous-integration-using-workflow-templates?learn=continuous_integration'
'/en/code-security/security-advisories/creating-a-security-advisory?learn=security_advisories'
)
expect($('[data-testid=learning-track-nav]')).toHaveLength(1)
const $navLinks = $('[data-testid=learning-track-nav] a')
expect($navLinks).toHaveLength(2)
$navLinks.each((i, elem) => {
expect($(elem).attr('href')).toEqual(expect.stringContaining('?learn=continuous_integration'))
expect($(elem).attr('href')).toEqual(expect.stringContaining('?learn=security_advisories'))
})
})
@@ -62,6 +62,47 @@ describe.skip('navigation banner', () => {
})
})
test('render navigation banner when url belongs to a multi-product learning track', async () => {
// This is a `code-security` product learning track and it includes a guide
// path that belongs to the `repositories` product.
const $ = await getDOM(
'/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository?learn=dependabot_alerts&learnProduct=code-security'
)
expect($('[data-testid=learning-track-nav]')).toHaveLength(1)
const $navLinks = $('[data-testid=learning-track-nav] a')
expect($navLinks).toHaveLength(2)
$navLinks.each((i, elem) => {
expect($(elem).attr('href')).toEqual(
expect.stringContaining('?learn=dependabot_alerts&learnProduct=code-security')
)
})
})
test('render navigation banner when url belongs to a learning track and has an incorrect `learnProduct` param', async () => {
// This is a `code-security` product learning track so the path should
// work as-is and we won't check `learnProduct`.
const $ = await getDOM(
'/en/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/viewing-and-updating-vulnerable-dependencies-in-your-repository?learn=dependabot_alerts&learnProduct=not_real'
)
expect($('[data-testid=learning-track-nav]')).toHaveLength(1)
const $navLinks = $('[data-testid=learning-track-nav] a')
expect($navLinks).toHaveLength(2)
$navLinks.each((i, elem) => {
expect($(elem).attr('href')).toEqual(
expect.stringContaining('?learn=dependabot_alerts&learnProduct=code-security')
)
})
})
test('does not include banner with multi-product learning track and when url has incorrect `learnProduct` param', async () => {
// This is a `code-security` product learning track and it includes a guide
// path that belongs to the `repositories` product.
const $ = await getDOM(
'/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository?learn=dependabot_alerts&learnProduct=not_real'
)
expect($('[data-testid=learning-track-nav]')).toHaveLength(0)
})
test('does not include banner when url does not include `learn` param', async () => {
const $ = await getDOM(
'/en/actions/guides/setting-up-continuous-integration-using-workflow-templates'