Skip to content

Commit a1ed181

Browse files
authored
add carousel item version check (#58134)
1 parent d7f195c commit a1ed181

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

src/frame/middleware/resolve-recommended.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,11 @@ async function resolveRecommended(
132132
try {
133133
const foundPage = tryResolveArticlePath(rawPath, page?.relativePath, req)
134134

135-
if (foundPage) {
135+
if (
136+
foundPage &&
137+
(!req.context?.currentVersion ||
138+
foundPage.applicableVersions.includes(req.context.currentVersion))
139+
) {
136140
const href = getPageHref(foundPage)
137141
const category = foundPage.relativePath
138142
? foundPage.relativePath.split('/').slice(0, -1).filter(Boolean)

src/frame/tests/resolve-recommended.test.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ describe('resolveRecommended middleware', () => {
2929
},
3030
},
3131
redirects: {},
32+
currentVersion: 'free-pro-team@latest',
33+
currentLanguage: 'en',
3234
...contextData,
3335
},
3436
}) as ExtendedRequest
@@ -316,4 +318,52 @@ describe('resolveRecommended middleware', () => {
316318
])
317319
expect(mockNext).toHaveBeenCalled()
318320
})
321+
322+
test('should filter out articles not available in current version', async () => {
323+
// Create a test page that is only available in fpt, not ghec
324+
const fptOnlyPage: Partial<import('@/types').Page> = {
325+
mtime: Date.now(),
326+
title: 'FPT Only Article',
327+
rawTitle: 'FPT Only Article',
328+
intro: 'This article is only for FPT',
329+
rawIntro: 'This article is only for FPT',
330+
relativePath: 'test/fpt-only.md',
331+
fullPath: '/full/path/test/fpt-only.md',
332+
languageCode: 'en',
333+
documentType: 'article',
334+
markdown: 'FPT only content',
335+
versions: { fpt: '*' }, // Only available in free-pro-team
336+
applicableVersions: ['free-pro-team@latest'], // Not available in ghec
337+
permalinks: [
338+
{
339+
languageCode: 'en',
340+
pageVersion: 'free-pro-team@latest',
341+
title: 'FPT Only Article',
342+
href: '/en/test/fpt-only',
343+
hrefWithoutLanguage: '/test/fpt-only',
344+
},
345+
],
346+
renderProp: vi.fn().mockResolvedValue('rendered'),
347+
renderTitle: vi.fn().mockResolvedValue('FPT Only Article'),
348+
render: vi.fn().mockResolvedValue('rendered content'),
349+
buildRedirects: vi.fn().mockReturnValue({}),
350+
}
351+
352+
mockFindPage.mockReturnValue(fptOnlyPage as any)
353+
354+
// Create a request context where we're viewing the GHEC version
355+
const req = createMockRequest(
356+
{ rawRecommended: ['/test/fpt-only'] },
357+
{
358+
currentVersion: 'enterprise-cloud@latest', // Current context is GHEC, not FPT
359+
currentLanguage: 'en',
360+
},
361+
)
362+
363+
await resolveRecommended(req, mockRes, mockNext)
364+
365+
// The recommended array should be empty since the article isn't available in enterprise-cloud
366+
expect((req.context!.page as any).recommended).toEqual([])
367+
expect(mockNext).toHaveBeenCalled()
368+
})
319369
})

0 commit comments

Comments
 (0)