@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.
- package/dist/{DataTable-BGK2YF7A.js → DataTable-PWLLTSP7.js} +5 -5
- package/dist/{UnifiedAuthProvider-DGQsy-vY.d.ts → UnifiedAuthProvider-CQNiemcB.d.ts} +2 -2
- package/dist/{chunk-BLZBTCBT.js → chunk-2T6QEWMI.js} +2 -2
- package/dist/{chunk-DNAASEYY.js → chunk-3FAB54BI.js} +4 -4
- package/dist/{chunk-37LRETMD.js → chunk-3PNBACK3.js} +2 -2
- package/dist/{chunk-ZSLTSF55.js → chunk-6AQ7X3EE.js} +5 -5
- package/dist/{chunk-X4Y4KT5T.js → chunk-D4X7PPGX.js} +3 -3
- package/dist/{chunk-SAB5UT2E.js → chunk-FZ7EBWOT.js} +3 -3
- package/dist/{chunk-B3MGS7VR.js → chunk-GIISFLMP.js} +3 -3
- package/dist/{chunk-RL267HOF.js → chunk-NYF3CUNC.js} +2 -2
- package/dist/{chunk-P27KH7XF.js → chunk-OQ6DTLZ6.js} +156 -196
- package/dist/chunk-OQ6DTLZ6.js.map +1 -0
- package/dist/{chunk-APHGXR2D.js → chunk-VCHXOYD5.js} +3 -3
- package/dist/components.d.ts +1 -1
- package/dist/components.js +7 -7
- package/dist/hooks.js +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.js +10 -10
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +3 -3
- package/dist/rbac/index.js +5 -5
- package/dist/utils.js +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +1 -1
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +1 -1
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventContextType.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +1 -1
- package/docs/api/interfaces/EventProviderProps.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACContextType.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACProviderProps.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +3 -3
- package/package.json +1 -1
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +756 -0
- package/src/components/DataTable/__tests__/DataTable.test.tsx +880 -0
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +702 -0
- package/src/components/PrintButton/__tests__/PrintButton.test.tsx +271 -0
- package/src/providers/AuthProvider.tsx +131 -230
- package/src/providers/OrganisationProvider.tsx +72 -10
- package/src/providers/__tests__/AuthProvider.test.tsx +619 -0
- package/src/providers/__tests__/EventProvider.test.tsx +190 -0
- package/src/providers/__tests__/InactivityProvider.test.tsx +645 -0
- package/src/providers/__tests__/OrganisationProvider.test.tsx +343 -0
- package/src/providers/__tests__/README.md +167 -0
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +581 -0
- package/src/rbac/__tests__/rbac-core.test.tsx +277 -0
- package/dist/chunk-P27KH7XF.js.map +0 -1
- /package/dist/{DataTable-BGK2YF7A.js.map → DataTable-PWLLTSP7.js.map} +0 -0
- /package/dist/{chunk-BLZBTCBT.js.map → chunk-2T6QEWMI.js.map} +0 -0
- /package/dist/{chunk-DNAASEYY.js.map → chunk-3FAB54BI.js.map} +0 -0
- /package/dist/{chunk-37LRETMD.js.map → chunk-3PNBACK3.js.map} +0 -0
- /package/dist/{chunk-ZSLTSF55.js.map → chunk-6AQ7X3EE.js.map} +0 -0
- /package/dist/{chunk-X4Y4KT5T.js.map → chunk-D4X7PPGX.js.map} +0 -0
- /package/dist/{chunk-SAB5UT2E.js.map → chunk-FZ7EBWOT.js.map} +0 -0
- /package/dist/{chunk-B3MGS7VR.js.map → chunk-GIISFLMP.js.map} +0 -0
- /package/dist/{chunk-RL267HOF.js.map → chunk-NYF3CUNC.js.map} +0 -0
- /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
|
+
});
|