/** * Tests for helpSearchIndex data and utility functions */ import { describe, it, expect } from 'vitest'; import { helpSearchIndex, getHelpContextForAI, HelpPage, } from '../helpSearchIndex'; describe('helpSearchIndex', () => { it('contains help pages', () => { expect(helpSearchIndex.length).toBeGreaterThan(0); }); it('all pages have required properties', () => { helpSearchIndex.forEach((page) => { expect(page.path).toBeTruthy(); expect(page.title).toBeTruthy(); expect(page.description).toBeTruthy(); expect(Array.isArray(page.topics)).toBe(true); expect(page.topics.length).toBeGreaterThan(0); expect(page.category).toBeTruthy(); }); }); it('all paths start with /dashboard/help', () => { helpSearchIndex.forEach((page) => { expect(page.path.startsWith('/dashboard/help')).toBe(true); }); }); it('paths are unique', () => { const paths = helpSearchIndex.map((p) => p.path); const uniquePaths = new Set(paths); expect(uniquePaths.size).toBe(paths.length); }); describe('categories', () => { it('contains Core Features category', () => { const corePages = helpSearchIndex.filter((p) => p.category === 'Core Features'); expect(corePages.length).toBeGreaterThan(0); }); it('contains Management category', () => { const managementPages = helpSearchIndex.filter((p) => p.category === 'Management'); expect(managementPages.length).toBeGreaterThan(0); }); it('contains Communication category', () => { const communicationPages = helpSearchIndex.filter((p) => p.category === 'Communication'); expect(communicationPages.length).toBeGreaterThan(0); }); it('contains Payments category', () => { const paymentPages = helpSearchIndex.filter((p) => p.category === 'Payments'); expect(paymentPages.length).toBeGreaterThan(0); }); it('contains Automations category', () => { const automationPages = helpSearchIndex.filter((p) => p.category === 'Automations'); expect(automationPages.length).toBeGreaterThan(0); }); it('contains API category', () => { const apiPages = helpSearchIndex.filter((p) => p.category === 'API'); expect(apiPages.length).toBeGreaterThan(0); }); it('contains Settings category', () => { const settingsPages = helpSearchIndex.filter((p) => p.category === 'Settings'); expect(settingsPages.length).toBeGreaterThan(0); }); }); describe('specific pages', () => { it('includes Dashboard page', () => { const dashboard = helpSearchIndex.find((p) => p.path === '/dashboard/help/dashboard'); expect(dashboard).toBeDefined(); expect(dashboard?.title).toBe('Dashboard'); expect(dashboard?.category).toBe('Core Features'); }); it('includes Scheduler page', () => { const scheduler = helpSearchIndex.find((p) => p.path === '/dashboard/help/scheduler'); expect(scheduler).toBeDefined(); expect(scheduler?.title).toBe('Scheduler'); expect(scheduler?.topics).toContain('calendar'); }); it('includes Customers page', () => { const customers = helpSearchIndex.find((p) => p.path === '/dashboard/help/customers'); expect(customers).toBeDefined(); expect(customers?.title).toBe('Customers'); expect(customers?.category).toBe('Management'); }); it('includes Services page', () => { const services = helpSearchIndex.find((p) => p.path === '/dashboard/help/services'); expect(services).toBeDefined(); expect(services?.topics).toContain('pricing'); }); it('includes API Overview page', () => { const api = helpSearchIndex.find((p) => p.path === '/dashboard/help/api'); expect(api).toBeDefined(); expect(api?.title).toBe('API Overview'); expect(api?.category).toBe('API'); }); it('includes Booking Settings page', () => { const booking = helpSearchIndex.find((p) => p.path === '/dashboard/help/settings/booking'); expect(booking).toBeDefined(); expect(booking?.topics).toContain('cancellation'); expect(booking?.topics).toContain('reschedule'); }); }); describe('topics', () => { it('pages have relevant topics', () => { const scheduler = helpSearchIndex.find((p) => p.path === '/dashboard/help/scheduler'); expect(scheduler?.topics).toContain('appointments'); expect(scheduler?.topics).toContain('bookings'); expect(scheduler?.topics).toContain('calendar'); }); it('payments page has payment-related topics', () => { const payments = helpSearchIndex.find((p) => p.path === '/dashboard/help/payments'); expect(payments?.topics).toContain('payments'); expect(payments?.topics).toContain('stripe'); expect(payments?.topics).toContain('credit card'); }); it('staff page has staff-related topics', () => { const staff = helpSearchIndex.find((p) => p.path === '/dashboard/help/staff'); expect(staff?.topics).toContain('permissions'); expect(staff?.topics).toContain('roles'); }); }); }); describe('getHelpContextForAI', () => { it('returns a string', () => { const context = getHelpContextForAI(); expect(typeof context).toBe('string'); }); it('contains all page titles', () => { const context = getHelpContextForAI(); helpSearchIndex.forEach((page) => { expect(context).toContain(`Page: ${page.title}`); }); }); it('contains all page paths', () => { const context = getHelpContextForAI(); helpSearchIndex.forEach((page) => { expect(context).toContain(`Path: ${page.path}`); }); }); it('contains all page categories', () => { const context = getHelpContextForAI(); helpSearchIndex.forEach((page) => { expect(context).toContain(`Category: ${page.category}`); }); }); it('contains all page descriptions', () => { const context = getHelpContextForAI(); helpSearchIndex.forEach((page) => { expect(context).toContain(`Description: ${page.description}`); }); }); it('contains topics for each page', () => { const context = getHelpContextForAI(); helpSearchIndex.forEach((page) => { expect(context).toContain(`Topics: ${page.topics.join(', ')}`); }); }); it('uses separator between pages', () => { const context = getHelpContextForAI(); expect(context).toContain('---'); }); it('is non-empty', () => { const context = getHelpContextForAI(); expect(context.length).toBeGreaterThan(0); }); }); describe('HelpPage type', () => { it('can create a valid HelpPage object', () => { const page: HelpPage = { path: '/test', title: 'Test Page', description: 'A test page', topics: ['test', 'example'], category: 'Test Category', }; expect(page.path).toBe('/test'); expect(page.title).toBe('Test Page'); expect(page.description).toBe('A test page'); expect(page.topics).toContain('test'); expect(page.category).toBe('Test Category'); }); });