import { describe, it, expect, vi, beforeEach } from 'vitest' // Mock modules before imports vi.mock('next-auth/react', () => ({ useSession: vi.fn(), SessionProvider: ({ children }: { children: React.ReactNode }) => children, })) vi.mock('next/navigation', () => ({ redirect: vi.fn(), useRouter: vi.fn(() => ({ push: vi.fn(), refresh: vi.fn(), })), })) describe('Platform Dashboard', () => { beforeEach(() => { vi.clearAllMocks() global.fetch = vi.fn() }) describe('Authentication', () => { it('should require platform user authentication', () => { // Test that the dashboard checks for platform user authentication const mockSession = { user: { email: 'admin@notso.ai', isPlatformUser: true, platformRole: 'SUPER_ADMIN', }, expires: new Date().toISOString(), } expect(mockSession.user.isPlatformUser).toBe(true) expect(mockSession.user.platformRole).toBeTruthy() }) it('should not allow regular users', () => { const mockSession = { user: { email: 'regular@user.com', isPlatformUser: false, }, expires: new Date().toISOString(), } expect(mockSession.user.isPlatformUser).toBe(false) }) }) describe('Dashboard Data Structure', () => { it('should have correct dashboard data structure', () => { const expectedDashboardData = { companies: [ { id: '1', name: 'Test Company', status: 'ACTIVE', createdAt: '2024-01-01T00:00:00Z', _count: { users: 5 }, }, ], totalCompanies: 1, totalUsers: 5, totalSessions: 100, } expect(expectedDashboardData).toHaveProperty('companies') expect(expectedDashboardData).toHaveProperty('totalCompanies') expect(expectedDashboardData).toHaveProperty('totalUsers') expect(expectedDashboardData).toHaveProperty('totalSessions') expect(Array.isArray(expectedDashboardData.companies)).toBe(true) }) it('should support different company statuses', () => { const statuses = ['ACTIVE', 'SUSPENDED', 'TRIAL'] statuses.forEach(status => { const company = { id: '1', name: 'Test Company', status, createdAt: new Date().toISOString(), _count: { users: 1 }, } expect(['ACTIVE', 'SUSPENDED', 'TRIAL']).toContain(company.status) }) }) }) describe('Platform Roles', () => { it('should support all platform roles', () => { const roles = [ { role: 'SUPER_ADMIN', canEdit: true }, { role: 'ADMIN', canEdit: true }, { role: 'SUPPORT', canEdit: false }, ] roles.forEach(({ role, canEdit }) => { const user = { email: `${role.toLowerCase()}@notso.ai`, isPlatformUser: true, platformRole: role, } expect(user.platformRole).toBe(role) if (role === 'SUPER_ADMIN' || role === 'ADMIN') { expect(canEdit).toBe(true) } else { expect(canEdit).toBe(false) } }) }) }) describe('API Integration', () => { it('should fetch dashboard data from correct endpoint', async () => { const mockFetch = vi.fn().mockResolvedValue({ ok: true, json: async () => ({ companies: [], totalCompanies: 0, totalUsers: 0, totalSessions: 0, }), }) global.fetch = mockFetch // Simulate API call await fetch('/api/platform/companies') expect(mockFetch).toHaveBeenCalledWith('/api/platform/companies') }) it('should handle API errors', async () => { const mockFetch = vi.fn().mockRejectedValue(new Error('Network error')) global.fetch = mockFetch try { await fetch('/api/platform/companies') } catch (error) { expect(error).toBeInstanceOf(Error) expect((error as Error).message).toBe('Network error') } }) }) })