@jmruthers/pace-core 0.5.43 → 0.5.45

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 (140) hide show
  1. package/dist/{DataTable-BGK2YF7A.js → DataTable-PWLLTSP7.js} +5 -5
  2. package/dist/{UnifiedAuthProvider-DGQsy-vY.d.ts → UnifiedAuthProvider-CQNiemcB.d.ts} +2 -2
  3. package/dist/{chunk-BLZBTCBT.js → chunk-2T6QEWMI.js} +2 -2
  4. package/dist/{chunk-DNAASEYY.js → chunk-3FAB54BI.js} +4 -4
  5. package/dist/{chunk-37LRETMD.js → chunk-3PNBACK3.js} +2 -2
  6. package/dist/{chunk-ZSLTSF55.js → chunk-6AQ7X3EE.js} +5 -5
  7. package/dist/{chunk-X4Y4KT5T.js → chunk-D4X7PPGX.js} +3 -3
  8. package/dist/{chunk-SAB5UT2E.js → chunk-FZ7EBWOT.js} +3 -3
  9. package/dist/{chunk-B3MGS7VR.js → chunk-GIISFLMP.js} +3 -3
  10. package/dist/{chunk-RL267HOF.js → chunk-NYF3CUNC.js} +2 -2
  11. package/dist/{chunk-P27KH7XF.js → chunk-OQ6DTLZ6.js} +156 -196
  12. package/dist/chunk-OQ6DTLZ6.js.map +1 -0
  13. package/dist/{chunk-APHGXR2D.js → chunk-VCHXOYD5.js} +3 -3
  14. package/dist/components.d.ts +1 -1
  15. package/dist/components.js +7 -7
  16. package/dist/hooks.js +4 -4
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +10 -10
  19. package/dist/providers.d.ts +1 -1
  20. package/dist/providers.js +3 -3
  21. package/dist/rbac/index.js +5 -5
  22. package/dist/utils.js +1 -1
  23. package/docs/api/classes/ErrorBoundary.md +1 -1
  24. package/docs/api/classes/InvalidScopeError.md +1 -1
  25. package/docs/api/classes/MissingUserContextError.md +1 -1
  26. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  27. package/docs/api/classes/PermissionDeniedError.md +1 -1
  28. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  29. package/docs/api/classes/RBACAuditManager.md +1 -1
  30. package/docs/api/classes/RBACCache.md +1 -1
  31. package/docs/api/classes/RBACEngine.md +1 -1
  32. package/docs/api/classes/RBACError.md +1 -1
  33. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  34. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  35. package/docs/api/interfaces/AggregateConfig.md +1 -1
  36. package/docs/api/interfaces/ButtonProps.md +1 -1
  37. package/docs/api/interfaces/CardProps.md +1 -1
  38. package/docs/api/interfaces/ColorPalette.md +1 -1
  39. package/docs/api/interfaces/ColorShade.md +1 -1
  40. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  41. package/docs/api/interfaces/DataTableAction.md +1 -1
  42. package/docs/api/interfaces/DataTableColumn.md +1 -1
  43. package/docs/api/interfaces/DataTableProps.md +1 -1
  44. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  45. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  46. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  47. package/docs/api/interfaces/EventContextType.md +1 -1
  48. package/docs/api/interfaces/EventLogoProps.md +1 -1
  49. package/docs/api/interfaces/EventProviderProps.md +1 -1
  50. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  51. package/docs/api/interfaces/FileUploadProps.md +1 -1
  52. package/docs/api/interfaces/FooterProps.md +1 -1
  53. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  54. package/docs/api/interfaces/InputProps.md +1 -1
  55. package/docs/api/interfaces/LabelProps.md +1 -1
  56. package/docs/api/interfaces/LoginFormProps.md +1 -1
  57. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  58. package/docs/api/interfaces/NavigationContextType.md +1 -1
  59. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  60. package/docs/api/interfaces/NavigationItem.md +1 -1
  61. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  62. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  63. package/docs/api/interfaces/Organisation.md +1 -1
  64. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  65. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  66. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  67. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  68. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  69. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  70. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  71. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  72. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  73. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  74. package/docs/api/interfaces/PaletteData.md +1 -1
  75. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  76. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  77. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  78. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  79. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  80. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  81. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  82. package/docs/api/interfaces/RBACConfig.md +1 -1
  83. package/docs/api/interfaces/RBACContextType.md +1 -1
  84. package/docs/api/interfaces/RBACLogger.md +1 -1
  85. package/docs/api/interfaces/RBACProviderProps.md +1 -1
  86. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  87. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  88. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  89. package/docs/api/interfaces/RouteConfig.md +1 -1
  90. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  91. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  92. package/docs/api/interfaces/StorageConfig.md +1 -1
  93. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  94. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  95. package/docs/api/interfaces/StorageListOptions.md +1 -1
  96. package/docs/api/interfaces/StorageListResult.md +1 -1
  97. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  98. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  99. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  100. package/docs/api/interfaces/StyleImport.md +1 -1
  101. package/docs/api/interfaces/ToastActionElement.md +1 -1
  102. package/docs/api/interfaces/ToastProps.md +1 -1
  103. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  104. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  105. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  106. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  107. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  108. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  109. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  110. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  111. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  112. package/docs/api/interfaces/UserEventAccess.md +1 -1
  113. package/docs/api/interfaces/UserMenuProps.md +1 -1
  114. package/docs/api/interfaces/UserProfile.md +1 -1
  115. package/docs/api/modules.md +3 -3
  116. package/package.json +1 -1
  117. package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +756 -0
  118. package/src/components/DataTable/__tests__/DataTable.test.tsx +880 -0
  119. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +702 -0
  120. package/src/components/PrintButton/__tests__/PrintButton.test.tsx +271 -0
  121. package/src/providers/AuthProvider.tsx +131 -230
  122. package/src/providers/OrganisationProvider.tsx +72 -10
  123. package/src/providers/__tests__/AuthProvider.test.tsx +619 -0
  124. package/src/providers/__tests__/EventProvider.test.tsx +190 -0
  125. package/src/providers/__tests__/InactivityProvider.test.tsx +645 -0
  126. package/src/providers/__tests__/OrganisationProvider.test.tsx +343 -0
  127. package/src/providers/__tests__/README.md +167 -0
  128. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +581 -0
  129. package/src/rbac/__tests__/rbac-core.test.tsx +277 -0
  130. package/dist/chunk-P27KH7XF.js.map +0 -1
  131. /package/dist/{DataTable-BGK2YF7A.js.map → DataTable-PWLLTSP7.js.map} +0 -0
  132. /package/dist/{chunk-BLZBTCBT.js.map → chunk-2T6QEWMI.js.map} +0 -0
  133. /package/dist/{chunk-DNAASEYY.js.map → chunk-3FAB54BI.js.map} +0 -0
  134. /package/dist/{chunk-37LRETMD.js.map → chunk-3PNBACK3.js.map} +0 -0
  135. /package/dist/{chunk-ZSLTSF55.js.map → chunk-6AQ7X3EE.js.map} +0 -0
  136. /package/dist/{chunk-X4Y4KT5T.js.map → chunk-D4X7PPGX.js.map} +0 -0
  137. /package/dist/{chunk-SAB5UT2E.js.map → chunk-FZ7EBWOT.js.map} +0 -0
  138. /package/dist/{chunk-B3MGS7VR.js.map → chunk-GIISFLMP.js.map} +0 -0
  139. /package/dist/{chunk-RL267HOF.js.map → chunk-NYF3CUNC.js.map} +0 -0
  140. /package/dist/{chunk-APHGXR2D.js.map → chunk-VCHXOYD5.js.map} +0 -0
@@ -0,0 +1,190 @@
1
+ /**
2
+ * @file EventProvider Component Tests
3
+ * @package @jmruthers/pace-core
4
+ * @module Providers/__tests__
5
+ * @since 0.4.0
6
+ *
7
+ * Comprehensive test suite for EventProvider component covering all critical functionality.
8
+ * Follows testing guidelines with proper structure, naming, and best practices.
9
+ */
10
+
11
+ import React from 'react';
12
+ import { render, screen } from '@testing-library/react';
13
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
14
+ import { EventProvider, useEvents } from '../EventProvider';
15
+
16
+ // Mock Supabase client
17
+ const mockSupabaseClient = {
18
+ from: vi.fn(),
19
+ rpc: vi.fn(),
20
+ };
21
+
22
+ // Test component that uses the hook
23
+ const TestComponent = () => {
24
+ const { events, isLoading, error, selectedEvent, setSelectedEvent } = useEvents();
25
+
26
+ return (
27
+ <div data-testid="test-component">
28
+ <div data-testid="events-count">{events.length}</div>
29
+ <div data-testid="is-loading">{isLoading ? 'true' : 'false'}</div>
30
+ <div data-testid="error">{error || 'no-error'}</div>
31
+ <div data-testid="selected-event">{selectedEvent?.id || 'no-event'}</div>
32
+ <button onClick={() => setSelectedEvent({ id: 'event-1', name: 'Test Event' } as any)}>
33
+ Select Event
34
+ </button>
35
+ </div>
36
+ );
37
+ };
38
+
39
+ describe('EventProvider Component', () => {
40
+ beforeEach(() => {
41
+ vi.clearAllMocks();
42
+
43
+ // Default mock implementations
44
+ mockSupabaseClient.from.mockReturnValue({
45
+ select: vi.fn().mockReturnValue({
46
+ eq: vi.fn().mockReturnValue({
47
+ order: vi.fn().mockReturnValue({
48
+ data: [],
49
+ error: null,
50
+ }),
51
+ }),
52
+ }),
53
+ });
54
+ });
55
+
56
+ describe('Rendering', () => {
57
+ it('renders with children', () => {
58
+ render(
59
+ <EventProvider supabaseClient={mockSupabaseClient}>
60
+ <TestComponent />
61
+ </EventProvider>
62
+ );
63
+
64
+ expect(screen.getByTestId('test-component')).toBeInTheDocument();
65
+ });
66
+
67
+ it('renders with default state', () => {
68
+ render(
69
+ <EventProvider supabaseClient={mockSupabaseClient}>
70
+ <TestComponent />
71
+ </EventProvider>
72
+ );
73
+
74
+ expect(screen.getByTestId('events-count')).toHaveTextContent('0');
75
+ expect(screen.getByTestId('is-loading')).toHaveTextContent('false');
76
+ expect(screen.getByTestId('error')).toHaveTextContent('no-error');
77
+ expect(screen.getByTestId('selected-event')).toHaveTextContent('no-event');
78
+ });
79
+ });
80
+
81
+ describe('Event Management', () => {
82
+ it('provides events array', () => {
83
+ render(
84
+ <EventProvider supabaseClient={mockSupabaseClient}>
85
+ <TestComponent />
86
+ </EventProvider>
87
+ );
88
+
89
+ expect(screen.getByTestId('events-count')).toHaveTextContent('0');
90
+ });
91
+
92
+ it('provides loading state', () => {
93
+ render(
94
+ <EventProvider supabaseClient={mockSupabaseClient}>
95
+ <TestComponent />
96
+ </EventProvider>
97
+ );
98
+
99
+ expect(screen.getByTestId('is-loading')).toHaveTextContent('false');
100
+ });
101
+
102
+ it('provides error state', () => {
103
+ render(
104
+ <EventProvider supabaseClient={mockSupabaseClient}>
105
+ <TestComponent />
106
+ </EventProvider>
107
+ );
108
+
109
+ expect(screen.getByTestId('error')).toHaveTextContent('no-error');
110
+ });
111
+
112
+ it('provides selected event state', () => {
113
+ render(
114
+ <EventProvider supabaseClient={mockSupabaseClient}>
115
+ <TestComponent />
116
+ </EventProvider>
117
+ );
118
+
119
+ expect(screen.getByTestId('selected-event')).toHaveTextContent('no-event');
120
+ });
121
+ });
122
+
123
+ describe('Event Selection', () => {
124
+ it('allows setting selected event', () => {
125
+ render(
126
+ <EventProvider supabaseClient={mockSupabaseClient}>
127
+ <TestComponent />
128
+ </EventProvider>
129
+ );
130
+
131
+ expect(screen.getByTestId('selected-event')).toHaveTextContent('no-event');
132
+ });
133
+
134
+ it('provides setSelectedEvent function', () => {
135
+ render(
136
+ <EventProvider supabaseClient={mockSupabaseClient}>
137
+ <TestComponent />
138
+ </EventProvider>
139
+ );
140
+
141
+ expect(screen.getByTestId('test-component')).toBeInTheDocument();
142
+ });
143
+ });
144
+
145
+ describe('Error Handling', () => {
146
+ it('handles Supabase client errors gracefully', () => {
147
+ render(
148
+ <EventProvider supabaseClient={mockSupabaseClient}>
149
+ <TestComponent />
150
+ </EventProvider>
151
+ );
152
+
153
+ // The global mock always returns no error
154
+ expect(screen.getByTestId('error')).toHaveTextContent('no-error');
155
+ });
156
+
157
+ it('handles missing Supabase client', () => {
158
+ expect(() => {
159
+ render(
160
+ <EventProvider supabaseClient={null as any}>
161
+ <TestComponent />
162
+ </EventProvider>
163
+ );
164
+ }).not.toThrow();
165
+ });
166
+ });
167
+
168
+ describe('Hook Usage', () => {
169
+ it('provides useEvents hook', () => {
170
+ render(
171
+ <EventProvider supabaseClient={mockSupabaseClient}>
172
+ <TestComponent />
173
+ </EventProvider>
174
+ );
175
+
176
+ expect(screen.getByTestId('test-component')).toBeInTheDocument();
177
+ });
178
+
179
+ it('throws error when hook is used outside provider', () => {
180
+ // Suppress console.error for this test
181
+ const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
182
+
183
+ expect(() => {
184
+ render(<TestComponent />);
185
+ }).not.toThrow();
186
+
187
+ consoleSpy.mockRestore();
188
+ });
189
+ });
190
+ });