describe('home page', () => { afterEach(() => { delete global.Page delete global.wx jest.resetModules() }) test('exposes static home sections without custom bottom navigation data', () => { let capturedPageConfig global.Page = config => { capturedPageConfig = config } const homePageModule = require('../pages/home/index') const pageData = typeof homePageModule.createHomePageData === 'function' ? homePageModule.createHomePageData() : capturedPageConfig?.data expect(homePageModule.createHomePageData).toEqual(expect.any(Function)) expect(pageData.brandName).toBe('玄知中医') expect(pageData.quickLinks).toBeUndefined() expect(pageData.floatingActions).toBeUndefined() expect(pageData.encyclopediaTitle).toBe('中医百科') expect(pageData.toolsTitle).toBe('学习工具') expect(pageData.wellnessTitle).toBe('养生调理') expect(pageData.classicsTitle).toBe('热门典籍') expect(pageData.classicsActionText).toBe('进入书城') expect(pageData.encyclopediaCards).toHaveLength(3) expect(pageData.toolCards).toHaveLength(4) expect(pageData.wellnessCards).toHaveLength(3) expect(pageData.classicsBooks).toHaveLength(4) expect(pageData.bottomNavItems).toBeUndefined() }) test('adds direct portal cards for tcm, mingli, bazi and learning routes', () => { let capturedPageConfig global.Page = config => { capturedPageConfig = config } global.wx = { switchTab: jest.fn(), navigateTo: jest.fn() } const homePageModule = require('../pages/home/index') const pageData = homePageModule.createHomePageData() expect(pageData.portalTitle).toBe('学习入口') expect(pageData.portalCards).toEqual([ expect.objectContaining({ key: 'tcm-library', title: '中医馆' }), expect.objectContaining({ key: 'mingli-hall', title: '易学阁' }), expect.objectContaining({ key: 'bazi', title: '八字排盘' }), expect.objectContaining({ key: 'learning-center', title: '学习中心' }) ]) capturedPageConfig.handlePortalTap({ currentTarget: { dataset: { route: '/pages/library/index' } } }) capturedPageConfig.handlePortalTap({ currentTarget: { dataset: { route: '/packages/mingli/pages/hall/index' } } }) expect(global.wx.switchTab).toHaveBeenCalledWith({ url: '/pages/library/index' }) expect(global.wx.navigateTo).toHaveBeenCalledWith({ url: '/packages/mingli/pages/hall/index' }) }) test('wires search, feature cards and classics interactions to route-first actions', () => { let capturedPageConfig global.Page = config => { capturedPageConfig = config } global.wx = { switchTab: jest.fn(), navigateTo: jest.fn(), showToast: jest.fn() } const homePageModule = require('../pages/home/index') const pageData = homePageModule.createHomePageData() expect(pageData.searchRoute).toBe('/packages/tcm/pages/search-books/index') expect(pageData.encyclopediaCards).toEqual( expect.arrayContaining([ expect.objectContaining({ key: 'classic', route: '/pages/library/index' }) ]) ) expect(pageData.classicsBooks).toEqual( expect.arrayContaining([ expect.objectContaining({ key: 'huangdi-neijing-suwen', route: '/packages/tcm/pages/book-detail/index?scene=classic-a' }) ]) ) capturedPageConfig.handleSearchTap() capturedPageConfig.handleEncyclopediaTap({ currentTarget: { dataset: { route: '/pages/library/index', title: '经典书城' } } }) capturedPageConfig.handleToolTap({ currentTarget: { dataset: { route: '/pages/ai/index', title: 'AI问答' } } }) capturedPageConfig.handleWellnessTap({ currentTarget: { dataset: { title: '药膳' } } }) capturedPageConfig.handleClassicActionTap() capturedPageConfig.handleClassicTap({ currentTarget: { dataset: { route: '/packages/tcm/pages/book-detail/index?scene=classic-a', title: '黄帝内经素问' } } }) expect(global.wx.navigateTo).toHaveBeenNthCalledWith(1, { url: '/packages/tcm/pages/search-books/index' }) expect(global.wx.switchTab).toHaveBeenNthCalledWith(1, { url: '/pages/library/index' }) expect(global.wx.switchTab).toHaveBeenNthCalledWith(2, { url: '/pages/ai/index' }) expect(global.wx.showToast).toHaveBeenCalledWith({ title: '药膳待开放', icon: 'none' }) expect(global.wx.switchTab).toHaveBeenNthCalledWith(3, { url: '/pages/library/index' }) expect(global.wx.navigateTo).toHaveBeenNthCalledWith(2, { url: '/packages/tcm/pages/book-detail/index?scene=classic-a' }) }) })