@jmruthers/pace-core 0.5.118 → 0.5.119

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/{DataTable-ZOAKQ3SU.js → DataTable-BQYGKVHR.js} +6 -6
  2. package/dist/{UnifiedAuthProvider-YFN7YGVN.js → UnifiedAuthProvider-UACKFATV.js} +3 -3
  3. package/dist/{chunk-7OTQLFVI.js → chunk-B4GZ2BXO.js} +3 -3
  4. package/dist/{chunk-KA3PSVNV.js → chunk-BHWIUEYH.js} +2 -1
  5. package/dist/chunk-BHWIUEYH.js.map +1 -0
  6. package/dist/{chunk-LFS45U62.js → chunk-CGURJ27Z.js} +2 -2
  7. package/dist/{chunk-PHDAXDHB.js → chunk-D6BOFXYR.js} +3 -3
  8. package/dist/{chunk-2LM4QQGH.js → chunk-F7COHU5B.js} +8 -8
  9. package/dist/{chunk-P3PUOL6B.js → chunk-FKFHZUGF.js} +4 -4
  10. package/dist/{chunk-UKZWNQMB.js → chunk-NP5VABFV.js} +4 -4
  11. package/dist/{chunk-O3FTRYEU.js → chunk-NZ32EONV.js} +2 -2
  12. package/dist/{chunk-ECOVPXYS.js → chunk-RIEJGKD3.js} +4 -4
  13. package/dist/{chunk-HIWXXDXO.js → chunk-TDNI6ZWL.js} +5 -5
  14. package/dist/{chunk-VN3OOE35.js → chunk-ZYJ6O5CA.js} +2 -2
  15. package/dist/components.js +8 -8
  16. package/dist/hooks.js +7 -7
  17. package/dist/index.js +11 -11
  18. package/dist/providers.js +2 -2
  19. package/dist/rbac/index.js +7 -7
  20. package/dist/utils.js +1 -1
  21. package/docs/api/classes/ColumnFactory.md +1 -1
  22. package/docs/api/classes/ErrorBoundary.md +1 -1
  23. package/docs/api/classes/InvalidScopeError.md +1 -1
  24. package/docs/api/classes/MissingUserContextError.md +1 -1
  25. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  26. package/docs/api/classes/PermissionDeniedError.md +1 -1
  27. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  28. package/docs/api/classes/RBACAuditManager.md +1 -1
  29. package/docs/api/classes/RBACCache.md +1 -1
  30. package/docs/api/classes/RBACEngine.md +1 -1
  31. package/docs/api/classes/RBACError.md +1 -1
  32. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  33. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  34. package/docs/api/classes/StorageUtils.md +1 -1
  35. package/docs/api/enums/FileCategory.md +1 -1
  36. package/docs/api/interfaces/AggregateConfig.md +1 -1
  37. package/docs/api/interfaces/ButtonProps.md +1 -1
  38. package/docs/api/interfaces/CardProps.md +1 -1
  39. package/docs/api/interfaces/ColorPalette.md +1 -1
  40. package/docs/api/interfaces/ColorShade.md +1 -1
  41. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  42. package/docs/api/interfaces/DataRecord.md +1 -1
  43. package/docs/api/interfaces/DataTableAction.md +1 -1
  44. package/docs/api/interfaces/DataTableColumn.md +1 -1
  45. package/docs/api/interfaces/DataTableProps.md +1 -1
  46. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  47. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  48. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  49. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  50. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  51. package/docs/api/interfaces/FileMetadata.md +1 -1
  52. package/docs/api/interfaces/FileReference.md +1 -1
  53. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  54. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  55. package/docs/api/interfaces/FileUploadProps.md +1 -1
  56. package/docs/api/interfaces/FooterProps.md +1 -1
  57. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  58. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  59. package/docs/api/interfaces/InputProps.md +1 -1
  60. package/docs/api/interfaces/LabelProps.md +1 -1
  61. package/docs/api/interfaces/LoginFormProps.md +1 -1
  62. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  63. package/docs/api/interfaces/NavigationContextType.md +1 -1
  64. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  65. package/docs/api/interfaces/NavigationItem.md +1 -1
  66. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  67. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  68. package/docs/api/interfaces/Organisation.md +1 -1
  69. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  70. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  71. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  72. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  73. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  74. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  75. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  76. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  77. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  78. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  79. package/docs/api/interfaces/PaletteData.md +1 -1
  80. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  81. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  82. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  83. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  84. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  85. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  86. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  87. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  88. package/docs/api/interfaces/RBACConfig.md +1 -1
  89. package/docs/api/interfaces/RBACLogger.md +1 -1
  90. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  91. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  92. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  93. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  94. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  95. package/docs/api/interfaces/RouteConfig.md +1 -1
  96. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  97. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  98. package/docs/api/interfaces/StorageConfig.md +1 -1
  99. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  100. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  101. package/docs/api/interfaces/StorageListOptions.md +1 -1
  102. package/docs/api/interfaces/StorageListResult.md +1 -1
  103. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  104. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  105. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  106. package/docs/api/interfaces/StyleImport.md +1 -1
  107. package/docs/api/interfaces/SwitchProps.md +1 -1
  108. package/docs/api/interfaces/ToastActionElement.md +1 -1
  109. package/docs/api/interfaces/ToastProps.md +1 -1
  110. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  111. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  112. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  113. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  114. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  115. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  116. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  117. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  118. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  119. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  120. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  121. package/docs/api/interfaces/UserEventAccess.md +1 -1
  122. package/docs/api/interfaces/UserMenuProps.md +1 -1
  123. package/docs/api/interfaces/UserProfile.md +1 -1
  124. package/docs/api/modules.md +2 -2
  125. package/package.json +1 -1
  126. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +697 -0
  127. package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +544 -9
  128. package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +1004 -0
  129. package/src/components/DataTable/utils/__tests__/a11yUtils.test.ts +612 -0
  130. package/src/components/DataTable/utils/__tests__/errorHandling.test.ts +266 -0
  131. package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +455 -1
  132. package/src/hooks/__tests__/index.unit.test.ts +223 -0
  133. package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +748 -0
  134. package/src/hooks/__tests__/useEvents.unit.test.ts +249 -0
  135. package/src/hooks/__tests__/useFileDisplay.unit.test.ts +1060 -0
  136. package/src/hooks/__tests__/useFileUrl.unit.test.ts +958 -0
  137. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +540 -1
  138. package/src/hooks/__tests__/useIsMobile.unit.test.ts +205 -5
  139. package/src/hooks/__tests__/useKeyboardShortcuts.unit.test.ts +616 -1
  140. package/src/hooks/__tests__/useOrganisations.unit.test.ts +369 -0
  141. package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +608 -0
  142. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +2 -0
  143. package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +372 -0
  144. package/src/hooks/__tests__/useToast.unit.test.tsx +431 -30
  145. package/src/hooks/useSecureDataAccess.test.ts +1 -0
  146. package/src/rbac/audit-enhanced.ts +339 -0
  147. package/src/services/EventService.ts +1 -0
  148. package/src/services/__tests__/AuthService.test.ts +473 -0
  149. package/src/services/__tests__/EventService.test.ts +390 -0
  150. package/src/services/__tests__/InactivityService.test.ts +217 -0
  151. package/src/services/__tests__/OrganisationService.test.ts +371 -0
  152. package/dist/chunk-KA3PSVNV.js.map +0 -1
  153. package/src/components/DataTable/utils/debugTools.ts +0 -609
  154. package/src/rbac/testing/index.tsx +0 -340
  155. /package/dist/{DataTable-ZOAKQ3SU.js.map → DataTable-BQYGKVHR.js.map} +0 -0
  156. /package/dist/{UnifiedAuthProvider-YFN7YGVN.js.map → UnifiedAuthProvider-UACKFATV.js.map} +0 -0
  157. /package/dist/{chunk-7OTQLFVI.js.map → chunk-B4GZ2BXO.js.map} +0 -0
  158. /package/dist/{chunk-LFS45U62.js.map → chunk-CGURJ27Z.js.map} +0 -0
  159. /package/dist/{chunk-PHDAXDHB.js.map → chunk-D6BOFXYR.js.map} +0 -0
  160. /package/dist/{chunk-2LM4QQGH.js.map → chunk-F7COHU5B.js.map} +0 -0
  161. /package/dist/{chunk-P3PUOL6B.js.map → chunk-FKFHZUGF.js.map} +0 -0
  162. /package/dist/{chunk-UKZWNQMB.js.map → chunk-NP5VABFV.js.map} +0 -0
  163. /package/dist/{chunk-O3FTRYEU.js.map → chunk-NZ32EONV.js.map} +0 -0
  164. /package/dist/{chunk-ECOVPXYS.js.map → chunk-RIEJGKD3.js.map} +0 -0
  165. /package/dist/{chunk-HIWXXDXO.js.map → chunk-TDNI6ZWL.js.map} +0 -0
  166. /package/dist/{chunk-VN3OOE35.js.map → chunk-ZYJ6O5CA.js.map} +0 -0
@@ -1,340 +0,0 @@
1
- /**
2
- * RBAC Testing Utilities
3
- * @package @jmruthers/pace-core
4
- * @module RBAC/Testing
5
- * @since 1.0.0
6
- *
7
- * This module provides testing utilities and mock providers for the RBAC system.
8
- */
9
-
10
- import React, { ReactNode, createContext, useContext } from 'react';
11
- import { UUID, Scope, Permission, AccessLevel } from '../types';
12
- import { RBACConfig } from '../config';
13
- import { SupabaseClient } from '@supabase/supabase-js';
14
- import { Database } from '../../types/database';
15
-
16
- // ============================================================================
17
- // MOCK PROVIDERS
18
- // ============================================================================
19
-
20
- export interface MockRBACConfig {
21
- permissions?: Record<string, boolean>;
22
- accessLevel?: AccessLevel;
23
- isLoading?: boolean;
24
- error?: Error | null;
25
- userId?: UUID;
26
- scope?: Scope;
27
- }
28
-
29
- export interface MockRBACContextValue {
30
- permissions: Record<string, boolean>;
31
- accessLevel: AccessLevel | null;
32
- isLoading: boolean;
33
- error: Error | null;
34
- userId: UUID | null;
35
- scope: Scope | null;
36
- checkPermission: (permission: Permission) => boolean;
37
- getAccessLevel: () => AccessLevel | null;
38
- setPermissions: (permissions: Record<string, boolean>) => void;
39
- setAccessLevel: (level: AccessLevel) => void;
40
- setLoading: (loading: boolean) => void;
41
- setError: (error: Error | null) => void;
42
- setUser: (userId: UUID) => void;
43
- setScope: (scope: Scope) => void;
44
- }
45
-
46
- const MockRBACContext = createContext<MockRBACContextValue | null>(null);
47
-
48
- export function useMockRBAC(): MockRBACContextValue {
49
- const context = useContext(MockRBACContext);
50
- if (!context) {
51
- throw new Error('useMockRBAC must be used within a MockRBACProvider');
52
- }
53
- return context;
54
- }
55
-
56
- export function createMockRBACProvider(config: MockRBACConfig = {}) {
57
- const {
58
- permissions = {},
59
- accessLevel = 'viewer',
60
- isLoading = false,
61
- error = null,
62
- userId = 'mock-user-123',
63
- scope = { organisationId: 'mock-org-456' },
64
- } = config;
65
-
66
- return function MockRBACProvider({ children }: { children: ReactNode }) {
67
- const [state, setState] = React.useState({
68
- permissions,
69
- accessLevel,
70
- isLoading,
71
- error,
72
- userId,
73
- scope,
74
- });
75
-
76
- const contextValue: MockRBACContextValue = {
77
- ...state,
78
- checkPermission: (permission: Permission) => {
79
- return state.permissions[permission] ?? false;
80
- },
81
- getAccessLevel: () => state.accessLevel,
82
- setPermissions: (newPermissions) => {
83
- setState(prev => ({ ...prev, permissions: newPermissions }));
84
- },
85
- setAccessLevel: (level) => {
86
- setState(prev => ({ ...prev, accessLevel: level }));
87
- },
88
- setLoading: (loading) => {
89
- setState(prev => ({ ...prev, isLoading: loading }));
90
- },
91
- setError: (err) => {
92
- setState(prev => ({ ...prev, error: err }));
93
- },
94
- setUser: (newUserId) => {
95
- setState(prev => ({ ...prev, userId: newUserId }));
96
- },
97
- setScope: (newScope) => {
98
- setState(prev => ({ ...prev, scope: newScope }));
99
- },
100
- };
101
-
102
- return (
103
- <MockRBACContext.Provider value={contextValue}>
104
- {children}
105
- </MockRBACContext.Provider>
106
- );
107
- };
108
- }
109
-
110
- // ============================================================================
111
- // MOCK PERMISSIONS
112
- // ============================================================================
113
-
114
- export function mockPermissions(permissions: Record<string, boolean>): Record<string, boolean> {
115
- return permissions;
116
- }
117
-
118
- export function createMockPermissions(config: {
119
- admin?: boolean;
120
- user?: boolean;
121
- viewer?: boolean;
122
- custom?: Record<string, boolean>;
123
- }): Record<string, boolean> {
124
- const { admin = false, user = false, viewer = false, custom = {} } = config;
125
-
126
- const permissions: Record<string, boolean> = {
127
- // Admin permissions
128
- 'admin:create': admin,
129
- 'admin:read': admin,
130
- 'admin:update': admin,
131
- 'admin:delete': admin,
132
- 'admin:manage': admin,
133
-
134
- // User permissions
135
- 'users:create': user || admin,
136
- 'users:read': user || admin,
137
- 'users:update': user || admin,
138
- 'users:delete': admin,
139
- 'users:manage': admin,
140
-
141
- // Event permissions
142
- 'events:create': user || admin,
143
- 'events:read': viewer || user || admin,
144
- 'events:update': user || admin,
145
- 'events:delete': admin,
146
- 'events:manage': admin,
147
-
148
- // Dashboard permissions
149
- 'dashboard:read': viewer || user || admin,
150
- 'dashboard:manage': admin,
151
-
152
- // Custom permissions
153
- ...custom,
154
- };
155
-
156
- return permissions;
157
- }
158
-
159
- // ============================================================================
160
- // MOCK HOOKS
161
- // ============================================================================
162
-
163
- export function createMockHooks(config: MockRBACConfig = {}) {
164
- const {
165
- permissions = {},
166
- accessLevel = 'viewer',
167
- isLoading = false,
168
- error = null,
169
- } = config;
170
-
171
- return {
172
- usePermissions: vi.fn().mockReturnValue({
173
- permissions,
174
- isLoading,
175
- error,
176
- refetch: vi.fn(),
177
- }),
178
- useCan: vi.fn().mockReturnValue({
179
- can: false,
180
- isLoading,
181
- error,
182
- check: vi.fn(),
183
- }),
184
- useAccessLevel: vi.fn().mockReturnValue({
185
- accessLevel,
186
- isLoading,
187
- error,
188
- refetch: vi.fn(),
189
- }),
190
- };
191
- }
192
-
193
- // ============================================================================
194
- // MOCK SUPABASE CLIENT
195
- // ============================================================================
196
-
197
- export function createMockSupabaseClient(overrides: Record<string, unknown> = {}) {
198
- const defaultMock = {
199
- from: vi.fn().mockReturnValue({
200
- select: vi.fn().mockReturnThis(),
201
- eq: vi.fn().mockReturnThis(),
202
- neq: vi.fn().mockReturnThis(),
203
- gt: vi.fn().mockReturnThis(),
204
- gte: vi.fn().mockReturnThis(),
205
- lt: vi.fn().mockReturnThis(),
206
- lte: vi.fn().mockReturnThis(),
207
- like: vi.fn().mockReturnThis(),
208
- ilike: vi.fn().mockReturnThis(),
209
- is: vi.fn().mockReturnThis(),
210
- in: vi.fn().mockReturnThis(),
211
- contains: vi.fn().mockReturnThis(),
212
- containedBy: vi.fn().mockReturnThis(),
213
- rangeGt: vi.fn().mockReturnThis(),
214
- rangeGte: vi.fn().mockReturnThis(),
215
- rangeLt: vi.fn().mockReturnThis(),
216
- rangeLte: vi.fn().mockReturnThis(),
217
- rangeAdjacent: vi.fn().mockReturnThis(),
218
- overlaps: vi.fn().mockReturnThis(),
219
- textSearch: vi.fn().mockReturnThis(),
220
- match: vi.fn().mockReturnThis(),
221
- not: vi.fn().mockReturnThis(),
222
- or: vi.fn().mockReturnThis(),
223
- filter: vi.fn().mockReturnThis(),
224
- order: vi.fn().mockReturnThis(),
225
- limit: vi.fn().mockReturnThis(),
226
- range: vi.fn().mockReturnThis(),
227
- abortSignal: vi.fn().mockReturnThis(),
228
- single: vi.fn().mockResolvedValue({ data: null, error: null }),
229
- maybeSingle: vi.fn().mockResolvedValue({ data: null, error: null }),
230
- csv: vi.fn().mockResolvedValue({ data: '', error: null }),
231
- geojson: vi.fn().mockResolvedValue({ data: null, error: null }),
232
- explain: vi.fn().mockResolvedValue({ data: null, error: null }),
233
- rollback: vi.fn().mockResolvedValue({ data: null, error: null }),
234
- insert: vi.fn().mockResolvedValue({ data: null, error: null }),
235
- upsert: vi.fn().mockResolvedValue({ data: null, error: null }),
236
- update: vi.fn().mockResolvedValue({ data: null, error: null }),
237
- delete: vi.fn().mockResolvedValue({ data: null, error: null }),
238
- }),
239
- rpc: vi.fn().mockResolvedValue({ data: null, error: null }),
240
- auth: {
241
- getUser: vi.fn().mockResolvedValue({ data: { user: null }, error: null }),
242
- getSession: vi.fn().mockResolvedValue({ data: { session: null }, error: null }),
243
- signIn: vi.fn().mockResolvedValue({ data: { user: null, session: null }, error: null }),
244
- signUp: vi.fn().mockResolvedValue({ data: { user: null, session: null }, error: null }),
245
- signOut: vi.fn().mockResolvedValue({ error: null }),
246
- onAuthStateChange: vi.fn().mockReturnValue({ data: { subscription: { unsubscribe: vi.fn() } } }),
247
- },
248
- ...overrides,
249
- };
250
-
251
- return defaultMock;
252
- }
253
-
254
- // ============================================================================
255
- // TEST UTILITIES
256
- // ============================================================================
257
-
258
- export function createTestScope(overrides: Partial<Scope> = {}): Scope {
259
- return {
260
- organisationId: 'test-org-123',
261
- eventId: 'test-event-456',
262
- appId: 'test-app-789',
263
- ...overrides,
264
- };
265
- }
266
-
267
- export function createTestUser(overrides: Partial<{ id: UUID; email: string }> = {}): { id: UUID; email: string } {
268
- return {
269
- id: 'test-user-123',
270
- email: 'test@example.com',
271
- ...overrides,
272
- };
273
- }
274
-
275
- export function createTestPermission(operation: string = 'read', resource: string = 'test'): Permission {
276
- return `${operation}:${resource}` as Permission;
277
- }
278
-
279
- // ============================================================================
280
- // DEVELOPMENT MODE
281
- // ============================================================================
282
-
283
- export function createDevelopmentRBACConfig(supabase: SupabaseClient<Database>, overrides: Partial<RBACConfig> = {}): RBACConfig {
284
- return {
285
- supabase,
286
- debug: true,
287
- logLevel: 'debug',
288
- developmentMode: true,
289
- mockPermissions: createMockPermissions({
290
- admin: true,
291
- user: true,
292
- viewer: true,
293
- }),
294
- cache: {
295
- ttl: 0, // Disable caching in development
296
- enabled: false,
297
- },
298
- audit: {
299
- enabled: true,
300
- logLevel: 'debug',
301
- },
302
- ...overrides,
303
- };
304
- }
305
-
306
- // ============================================================================
307
- // COMMON TEST SCENARIOS
308
- // ============================================================================
309
-
310
- export const TestScenarios = {
311
- admin: {
312
- permissions: createMockPermissions({ admin: true }),
313
- accessLevel: 'admin' as AccessLevel,
314
- },
315
- user: {
316
- permissions: createMockPermissions({ user: true }),
317
- accessLevel: 'participant' as AccessLevel,
318
- },
319
- viewer: {
320
- permissions: createMockPermissions({ viewer: true }),
321
- accessLevel: 'viewer' as AccessLevel,
322
- },
323
- noAccess: {
324
- permissions: createMockPermissions({}),
325
- accessLevel: 'viewer' as AccessLevel,
326
- },
327
- loading: {
328
- permissions: {},
329
- accessLevel: null,
330
- isLoading: true,
331
- },
332
- error: {
333
- permissions: {},
334
- accessLevel: null,
335
- error: new Error('Test error'),
336
- },
337
- };
338
-
339
- // Re-export vi for convenience
340
- export { vi } from 'vitest';