@jmruthers/pace-core 0.5.68 → 0.5.69
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-4IUY7BXB.js → DataTable-MPBSXUC6.js} +5 -6
- package/dist/{PublicLoadingSpinner-DdKXTkCZ.d.ts → PublicLoadingSpinner-BOdyU3u-.d.ts} +1 -1
- package/dist/{chunk-PXWEDX7Y.js → chunk-2ARQW6VX.js} +3 -3
- package/dist/{chunk-MOJXHWDE.js → chunk-6JILXFEA.js} +335 -5
- package/dist/chunk-6JILXFEA.js.map +1 -0
- package/dist/{chunk-D7ARGIA3.js → chunk-6RBH67W7.js} +23 -6
- package/dist/chunk-6RBH67W7.js.map +1 -0
- package/dist/{chunk-ZMS23NS5.js → chunk-FJTAWPAQ.js} +3 -5
- package/dist/{chunk-ZMS23NS5.js.map → chunk-FJTAWPAQ.js.map} +1 -1
- package/dist/{chunk-OPCWH3A4.js → chunk-NO5QHMDX.js} +7 -6
- package/dist/chunk-NO5QHMDX.js.map +1 -0
- package/dist/{chunk-ZPK5656W.js → chunk-O3NWNXDY.js} +4 -5
- package/dist/chunk-O3NWNXDY.js.map +1 -0
- package/dist/{chunk-UYA6U6H7.js → chunk-Q2UP3ZWQ.js} +4 -4
- package/dist/{chunk-KRCRNXPD.js → chunk-RVYGJPOD.js} +79 -18
- package/dist/chunk-RVYGJPOD.js.map +1 -0
- package/dist/{chunk-NN45OBIS.js → chunk-UCMHBF7Y.js} +3 -5
- package/dist/{chunk-NN45OBIS.js.map → chunk-UCMHBF7Y.js.map} +1 -1
- package/dist/{chunk-ZPG4XPV5.js → chunk-V3QO3LL7.js} +5 -7
- package/dist/chunk-V3QO3LL7.js.map +1 -0
- package/dist/{chunk-U6GPOF6J.js → chunk-ZXJGZLLO.js} +17 -17
- package/dist/{chunk-U6GPOF6J.js.map → chunk-ZXJGZLLO.js.map} +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +8 -9
- package/dist/components.js.map +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +9 -6
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/providers.js +5 -7
- package/dist/rbac/index.js +5 -6
- package/dist/{usePublicRouteParams-CdoFxnJK.d.ts → usePublicRouteParams-Ua1Vz-HG.d.ts} +35 -1
- package/dist/utils.d.ts +4 -1
- package/dist/utils.js +3 -3
- package/docs/DOCUMENTATION_CHECKLIST.md +281 -0
- package/docs/README.md +22 -10
- package/docs/api/classes/ColumnFactory.md +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/classes/StorageUtils.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 +2 -2
- 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/SwitchProps.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 +39 -14
- package/docs/architecture/services.md +374 -0
- package/docs/best-practices/README.md +1 -1
- package/docs/best-practices/testing.md +1 -1
- package/docs/breaking-changes.md +182 -0
- package/docs/common-patterns.md +445 -0
- package/docs/core-concepts/authentication.md +26 -11
- package/docs/core-concepts/events.md +2 -0
- package/docs/core-concepts/organisations.md +2 -0
- package/docs/core-concepts/permissions.md +2 -0
- package/docs/{INDEX.md → documentation-index.md} +26 -38
- package/docs/faq.md +286 -0
- package/docs/{FILE_REFERENCE_SYSTEM.md → file-reference-system.md} +1 -1
- package/docs/getting-started/installation-guide.md +284 -0
- package/docs/getting-started/quick-start.md +8 -1
- package/docs/implementation-guides/app-layout.md +3 -1
- package/docs/implementation-guides/data-tables.md +2 -0
- package/docs/implementation-guides/dynamic-colors.md +47 -2
- package/docs/implementation-guides/event-theming-summary.md +220 -0
- package/docs/implementation-guides/forms.md +9 -7
- package/docs/implementation-guides/navigation.md +2 -0
- package/docs/migration/service-architecture.md +351 -0
- package/docs/rbac/README-rbac-rls-integration.md +2 -2
- package/docs/rbac/README.md +1 -1
- package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
- package/docs/rbac/quick-start.md +2 -0
- package/docs/rbac/rbac-rls-integration.md +2 -2
- package/docs/style-guide.md +136 -1
- package/docs/testing/README.md +1 -1
- package/docs/troubleshooting/authentication-issues.md +334 -0
- package/docs/troubleshooting/common-issues.md +2 -0
- package/docs/troubleshooting/styling-issues.md +199 -144
- package/docs/usage.md +23 -2
- package/package.json +1 -1
- package/src/__tests__/{TESTING_GUIDELINES.md → TEST_GUIDE_CURSOR.md} +20 -0
- package/src/__tests__/TEST_GUIDE_HUMAN.md +103 -0
- package/src/__tests__/fixtures/test-data.ts +90 -0
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +260 -0
- package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +224 -0
- package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +273 -0
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +98 -0
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +436 -0
- package/src/__tests__/helpers/__tests__/timer-utils.test.ts +371 -0
- package/src/__tests__/helpers/component-test-utils.tsx +14 -4
- package/src/__tests__/helpers/optimized-test-setup.ts +68 -0
- package/src/__tests__/helpers/test-providers.tsx +329 -0
- package/src/__tests__/helpers/test-utils.tsx +91 -45
- package/src/__tests__/helpers/timer-utils.ts +71 -0
- package/src/__tests__/hooks/usePermissions.test.ts +1 -5
- package/src/__tests__/integration/UserProfile.test.tsx +1 -5
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +42 -12
- package/src/__tests__/setup.ts +34 -28
- package/src/components/Alert/Alert.test.tsx +1 -5
- package/src/components/Avatar/Avatar.test.tsx +1 -5
- package/src/components/Button/Button.test.tsx +4 -20
- package/src/components/Card/Card.test.tsx +1 -5
- package/src/components/Checkbox/Checkbox.test.tsx +1 -5
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +1 -5
- package/src/components/DataTable/__tests__/DataTable.test.tsx +45 -49
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +1 -5
- package/src/components/DataTable/__tests__/styles.test.ts +382 -0
- package/src/components/DataTable/context/__tests__/DataTableContext.test.tsx +409 -0
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +634 -0
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +519 -0
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +714 -0
- package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +592 -0
- package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +354 -0
- package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +539 -0
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +1 -5
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +1 -8
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +34 -38
- package/src/components/Footer/Footer.test.tsx +1 -5
- package/src/components/Form/Form.test.tsx +22 -35
- package/src/components/Header/Header.test.tsx +1 -9
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +1 -5
- package/src/components/Input/Input.test.tsx +2 -10
- package/src/components/LoginForm/LoginForm.test.tsx +1 -5
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +24 -24
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +1 -6
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +6 -16
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +1 -5
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +1 -5
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +1 -7
- package/src/components/PasswordReset/PasswordChangeForm.test.tsx +1 -9
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +1 -9
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +4 -5
- package/src/components/PublicLayout/PublicPageHeader.tsx +13 -9
- package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +666 -0
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +457 -0
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +393 -0
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +351 -0
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +374 -0
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +388 -0
- package/src/components/Select/Select.bug-test.tsx +69 -0
- package/src/components/Select/Select.refactored.tsx +497 -0
- package/src/components/Select/Select.test.tsx +42 -49
- package/src/components/Select/Select.tsx +5 -2
- package/src/components/Select/hooks.ts +254 -0
- package/src/components/Switch/Switch.test.tsx +1 -5
- package/src/components/Table/__tests__/Table.test.tsx +775 -0
- package/src/components/Toast/Toast.test.tsx +15 -8
- package/src/components/Tooltip/Tooltip.test.tsx +1 -5
- package/src/components/UserMenu/UserMenu.test.tsx +3 -15
- package/src/components/__tests__/FileDisplay.test.tsx +575 -0
- package/src/components/__tests__/FileUpload.test.tsx +446 -0
- package/src/components/__tests__/SuperAdminGuard.test.tsx +422 -354
- package/src/hooks/__tests__/ServiceHooks.test.tsx +613 -0
- package/src/hooks/__tests__/hooks.integration.test.tsx +1 -10
- package/src/hooks/__tests__/useApiFetch.unit.test.ts +10 -14
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +307 -0
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +1 -6
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +1 -5
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +6 -9
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +321 -0
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +583 -0
- package/src/hooks/__tests__/usePublicEventLogo.unit.test.ts +640 -0
- package/src/hooks/__tests__/usePublicRouteParams.unit.test.ts +435 -0
- package/src/hooks/__tests__/useRBAC.unit.test.ts +10 -10
- package/src/hooks/__tests__/useStorage.unit.test.ts +751 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/public/usePublicEvent.ts +30 -9
- package/src/hooks/public/usePublicRouteParams.ts +13 -3
- package/src/hooks/services/useAuth.ts +50 -0
- package/src/hooks/services/useAuthService.ts +30 -0
- package/src/hooks/services/useCurrentEvent.ts +36 -0
- package/src/hooks/services/useCurrentOrganisation.ts +52 -0
- package/src/hooks/services/useEventService.ts +30 -0
- package/src/hooks/services/useInactivityService.ts +30 -0
- package/src/hooks/services/useOrganisationService.ts +30 -0
- package/src/hooks/services/usePermissions.ts +70 -0
- package/src/hooks/services/useRBACService.ts +30 -0
- package/src/hooks/useCounter.test.ts +1 -5
- package/src/hooks/useEventTheme.ts +86 -0
- package/src/hooks/useOrganisationPermissions.test.ts +2 -5
- package/src/hooks/useOrganisationSecurity.test.ts +1 -5
- package/src/hooks/usePermissionCache.test.ts +1 -5
- package/src/hooks/usePermissionCheck.ts +150 -0
- package/src/hooks/useSecureDataAccess.test.ts +1 -5
- package/src/index.ts +1 -0
- package/src/providers/OrganisationProvider.test.tsx +1 -5
- package/src/providers/OrganisationProvider.tsx +56 -4
- package/src/providers/UnifiedAuthProvider.test.tsx +1 -5
- package/src/providers/__tests__/AuthProvider.test.tsx +105 -439
- package/src/providers/__tests__/AuthProvider.test.tsx.backup +771 -0
- package/src/providers/__tests__/EventProvider.test.tsx +211 -110
- package/src/providers/__tests__/EventProvider.test.tsx.backup +824 -0
- package/src/providers/__tests__/InactivityProvider.test.tsx +1 -5
- package/src/providers/__tests__/OrganisationProvider.test.tsx +97 -261
- package/src/providers/__tests__/OrganisationProvider.test.tsx.backup +820 -0
- package/src/providers/__tests__/ServiceProviders.test.tsx +477 -0
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +72 -504
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx.backup +911 -0
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx.backup2 +166 -0
- package/src/providers/services/AuthServiceProvider.tsx +65 -0
- package/src/providers/services/EventServiceProvider.tsx +83 -0
- package/src/providers/services/InactivityServiceProvider.tsx +83 -0
- package/src/providers/services/OrganisationServiceProvider.tsx +77 -0
- package/src/providers/services/RBACServiceProvider.tsx +79 -0
- package/src/providers/services/UnifiedAuthProvider.tsx +368 -0
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +210 -0
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +269 -0
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +892 -0
- package/src/rbac/__tests__/engine.comprehensive.test.ts +954 -0
- package/src/rbac/__tests__/integration.authflow.test.tsx +1 -5
- package/src/rbac/__tests__/integration.navigation.test.tsx +1 -4
- package/src/rbac/__tests__/rbac-core.test.tsx +2 -7
- package/src/rbac/__tests__/rbac-functions.test.ts +1 -9
- package/src/rbac/__tests__/rbac-integration.test.ts +1 -9
- package/src/rbac/api.test.ts +1 -9
- package/src/rbac/cache.test.ts +10 -8
- package/src/rbac/cli/__tests__/policy-manager.test.ts +339 -0
- package/src/rbac/components/EnhancedNavigationMenu.test.tsx +1 -5
- package/src/rbac/components/NavigationProvider.test.tsx +1 -5
- package/src/rbac/components/PagePermissionProvider.test.tsx +1 -5
- package/src/rbac/components/SecureDataProvider.test.tsx +1 -5
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +25 -29
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +27 -30
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +23 -27
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +18 -22
- package/src/rbac/config.test.ts +1 -5
- package/src/rbac/hooks/useCan.test.ts +262 -9
- package/src/rbac/hooks/usePermissions.test.ts +246 -6
- package/src/rbac/hooks/useRBAC.simple.test.ts +1 -5
- package/src/rbac/hooks/useRBAC.test.ts +472 -198
- package/src/rbac/providers/__tests__/RBACProvider.test.tsx +1 -9
- package/src/services/AuthService.ts +416 -0
- package/src/services/EventService.ts +366 -0
- package/src/services/InactivityService.ts +388 -0
- package/src/services/OrganisationService.ts +592 -0
- package/src/services/RBACService.ts +522 -0
- package/src/services/__tests__/AuthService.test.ts +356 -0
- package/src/services/__tests__/BaseService.test.ts +314 -0
- package/src/services/__tests__/EventService.test.ts +489 -0
- package/src/services/__tests__/InactivityService.test.ts +403 -0
- package/src/services/__tests__/OrganisationService.test.ts +660 -0
- package/src/services/__tests__/RBACService.test.ts +492 -0
- package/src/services/base/BaseService.ts +87 -0
- package/src/services/interfaces/IAuthService.ts +39 -0
- package/src/services/interfaces/IEventService.ts +30 -0
- package/src/services/interfaces/IInactivityService.ts +31 -0
- package/src/services/interfaces/IOrganisationService.ts +41 -0
- package/src/services/interfaces/IRBACService.ts +62 -0
- package/src/theming/__tests__/runtime.test.ts +540 -0
- package/src/types/__tests__/file-reference.test.ts +447 -0
- package/src/types/__tests__/organisation.test.ts +1133 -0
- package/src/types/__tests__/theme.test.ts +830 -0
- package/src/types/__tests__/type-validation.test.ts +527 -0
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +1 -5
- package/src/utils/__tests__/debugLogger.test.ts +417 -0
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +1 -6
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +1 -5
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +35 -35
- package/src/utils/__tests__/organisationContext.unit.test.ts +1 -5
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +5 -11
- package/src/utils/__tests__/secureErrors.unit.test.ts +1 -6
- package/src/utils/__tests__/secureStorage.unit.test.ts +1 -5
- package/src/utils/__tests__/securityMonitor.unit.test.ts +1 -5
- package/src/utils/__tests__/sessionTracking.unit.test.ts +1 -5
- package/src/utils/appIdResolver.test.ts +6 -10
- package/src/utils/appNameResolver.simple.test.ts +142 -0
- package/src/utils/appNameResolver.test.ts +31 -458
- package/src/utils/appNameResolver.test.ts.backup +494 -0
- package/src/utils/debugLogger.ts +26 -5
- package/src/utils/formatDate.test.ts +1 -5
- package/src/utils/organisationContext.test.ts +1 -5
- package/src/utils/performanceBudgets.ts +3 -4
- package/src/utils/secureDataAccess.test.ts +1 -5
- package/src/utils/storage/__tests__/helpers.unit.test.ts +1 -5
- package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +1 -5
- package/dist/chunk-D7ARGIA3.js.map +0 -1
- package/dist/chunk-IPCH4YPT.js +0 -315
- package/dist/chunk-IPCH4YPT.js.map +0 -1
- package/dist/chunk-KRCRNXPD.js.map +0 -1
- package/dist/chunk-MOJXHWDE.js.map +0 -1
- package/dist/chunk-OPCWH3A4.js.map +0 -1
- package/dist/chunk-ZPG4XPV5.js.map +0 -1
- package/dist/chunk-ZPK5656W.js.map +0 -1
- package/docs/getting-started/installation.md +0 -269
- package/src/__tests__/REBUILD_PLAN.md +0 -223
- /package/dist/{DataTable-4IUY7BXB.js.map → DataTable-MPBSXUC6.js.map} +0 -0
- /package/dist/{chunk-PXWEDX7Y.js.map → chunk-2ARQW6VX.js.map} +0 -0
- /package/dist/{chunk-UYA6U6H7.js.map → chunk-Q2UP3ZWQ.js.map} +0 -0
|
@@ -91,11 +91,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
91
91
|
});
|
|
92
92
|
});
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
vi.restoreAllMocks();
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
describe('Normal Rendering', () => {
|
|
94
|
+
describe('Normal Rendering', () => {
|
|
99
95
|
it('renders children when no error occurs', () => {
|
|
100
96
|
renderWithProviders(
|
|
101
97
|
<ErrorBoundary>
|
|
@@ -145,7 +141,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
145
141
|
await waitFor(() => {
|
|
146
142
|
expect(screen.getByText('Error in TestComponent')).toBeInTheDocument();
|
|
147
143
|
expect(screen.getByText('Test error')).toBeInTheDocument();
|
|
148
|
-
});
|
|
144
|
+
}, { interval: 10 });
|
|
149
145
|
|
|
150
146
|
consoleSpy.mockRestore();
|
|
151
147
|
});
|
|
@@ -161,7 +157,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
161
157
|
|
|
162
158
|
await waitFor(() => {
|
|
163
159
|
expect(screen.getByText('An unexpected error occurred.')).toBeInTheDocument();
|
|
164
|
-
});
|
|
160
|
+
}, { interval: 10 });
|
|
165
161
|
|
|
166
162
|
consoleSpy.mockRestore();
|
|
167
163
|
});
|
|
@@ -181,7 +177,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
181
177
|
await waitFor(() => {
|
|
182
178
|
expect(screen.getByText('Custom error message')).toBeInTheDocument();
|
|
183
179
|
expect(screen.queryByRole('alert')).not.toBeInTheDocument();
|
|
184
|
-
});
|
|
180
|
+
}, { interval: 10 });
|
|
185
181
|
|
|
186
182
|
consoleSpy.mockRestore();
|
|
187
183
|
});
|
|
@@ -199,7 +195,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
199
195
|
const errorElement = screen.getByText('Error in Component').closest('[data-error-boundary]');
|
|
200
196
|
const firstErrorId = errorElement?.getAttribute('data-error-boundary');
|
|
201
197
|
expect(firstErrorId).toBeTruthy();
|
|
202
|
-
});
|
|
198
|
+
}, { interval: 10 });
|
|
203
199
|
|
|
204
200
|
// Trigger another error
|
|
205
201
|
rerender(
|
|
@@ -212,7 +208,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
212
208
|
const errorElement = screen.getByText('Error in Component').closest('[data-error-boundary]');
|
|
213
209
|
const secondErrorId = errorElement?.getAttribute('data-error-boundary');
|
|
214
210
|
expect(secondErrorId).toBeTruthy();
|
|
215
|
-
});
|
|
211
|
+
}, { interval: 10 });
|
|
216
212
|
|
|
217
213
|
consoleSpy.mockRestore();
|
|
218
214
|
});
|
|
@@ -230,7 +226,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
230
226
|
|
|
231
227
|
await waitFor(() => {
|
|
232
228
|
expect(screen.getByText('Retry (1/3)')).toBeInTheDocument();
|
|
233
|
-
});
|
|
229
|
+
}, { interval: 10 });
|
|
234
230
|
|
|
235
231
|
consoleSpy.mockRestore();
|
|
236
232
|
});
|
|
@@ -246,7 +242,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
246
242
|
|
|
247
243
|
await waitFor(() => {
|
|
248
244
|
expect(screen.queryByText(/retry/i)).not.toBeInTheDocument();
|
|
249
|
-
});
|
|
245
|
+
}, { interval: 10 });
|
|
250
246
|
|
|
251
247
|
consoleSpy.mockRestore();
|
|
252
248
|
});
|
|
@@ -262,14 +258,14 @@ describe('ErrorBoundary Component', () => {
|
|
|
262
258
|
|
|
263
259
|
await waitFor(() => {
|
|
264
260
|
expect(screen.getByText('Retry (1/3)')).toBeInTheDocument();
|
|
265
|
-
});
|
|
261
|
+
}, { interval: 10 });
|
|
266
262
|
|
|
267
263
|
const retryButton = screen.getByText('Retry (1/3)');
|
|
268
264
|
fireEvent.click(retryButton);
|
|
269
265
|
|
|
270
266
|
await waitFor(() => {
|
|
271
267
|
expect(screen.getByText('Retry (2/3)')).toBeInTheDocument();
|
|
272
|
-
});
|
|
268
|
+
}, { interval: 10 });
|
|
273
269
|
|
|
274
270
|
consoleSpy.mockRestore();
|
|
275
271
|
});
|
|
@@ -286,14 +282,14 @@ describe('ErrorBoundary Component', () => {
|
|
|
286
282
|
// Click retry twice to reach max retries
|
|
287
283
|
await waitFor(() => {
|
|
288
284
|
expect(screen.getByText('Retry (1/2)')).toBeInTheDocument();
|
|
289
|
-
});
|
|
285
|
+
}, { interval: 10 });
|
|
290
286
|
|
|
291
287
|
const firstRetryButton = screen.getByText('Retry (1/2)');
|
|
292
288
|
fireEvent.click(firstRetryButton);
|
|
293
289
|
|
|
294
290
|
await waitFor(() => {
|
|
295
291
|
expect(screen.getByText('Retry (2/2)')).toBeInTheDocument();
|
|
296
|
-
});
|
|
292
|
+
}, { interval: 10 });
|
|
297
293
|
|
|
298
294
|
const secondRetryButton = screen.getByText('Retry (2/2)');
|
|
299
295
|
fireEvent.click(secondRetryButton);
|
|
@@ -301,7 +297,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
301
297
|
await waitFor(() => {
|
|
302
298
|
expect(screen.getByText('Maximum retry attempts reached. Please reload the page or contact support.')).toBeInTheDocument();
|
|
303
299
|
expect(screen.queryByText(/Retry \(/)).not.toBeInTheDocument();
|
|
304
|
-
});
|
|
300
|
+
}, { interval: 10 });
|
|
305
301
|
|
|
306
302
|
consoleSpy.mockRestore();
|
|
307
303
|
});
|
|
@@ -318,7 +314,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
318
314
|
// Wait for error to be caught
|
|
319
315
|
await waitFor(() => {
|
|
320
316
|
expect(screen.getByText('Error in Component')).toBeInTheDocument();
|
|
321
|
-
});
|
|
317
|
+
}, { interval: 10 });
|
|
322
318
|
|
|
323
319
|
// Click retry - this should reset the error state
|
|
324
320
|
const retryButton = screen.getByText(/retry/i);
|
|
@@ -327,7 +323,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
327
323
|
// Should show retry count increased
|
|
328
324
|
await waitFor(() => {
|
|
329
325
|
expect(screen.getByText('Retry (2/3)')).toBeInTheDocument();
|
|
330
|
-
});
|
|
326
|
+
}, { interval: 10 });
|
|
331
327
|
|
|
332
328
|
consoleSpy.mockRestore();
|
|
333
329
|
});
|
|
@@ -351,7 +347,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
351
347
|
expect.any(Object), // errorInfo
|
|
352
348
|
expect.any(String) // errorId
|
|
353
349
|
);
|
|
354
|
-
});
|
|
350
|
+
}, { interval: 10 });
|
|
355
351
|
|
|
356
352
|
consoleSpy.mockRestore();
|
|
357
353
|
});
|
|
@@ -396,7 +392,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
396
392
|
expect.any(Error),
|
|
397
393
|
expect.any(Object)
|
|
398
394
|
);
|
|
399
|
-
});
|
|
395
|
+
}, { interval: 10 });
|
|
400
396
|
|
|
401
397
|
consoleSpy.mockRestore();
|
|
402
398
|
});
|
|
@@ -416,7 +412,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
416
412
|
const errorElement = screen.getByText('Error in Component').closest('[role="alert"]');
|
|
417
413
|
expect(errorElement).toBeInTheDocument();
|
|
418
414
|
expect(errorElement).toHaveAttribute('role', 'alert');
|
|
419
|
-
});
|
|
415
|
+
}, { interval: 10 });
|
|
420
416
|
|
|
421
417
|
consoleSpy.mockRestore();
|
|
422
418
|
});
|
|
@@ -434,7 +430,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
434
430
|
const retryButton = screen.getByText(/retry/i);
|
|
435
431
|
expect(retryButton).toBeInTheDocument();
|
|
436
432
|
expect(retryButton.tagName).toBe('BUTTON');
|
|
437
|
-
});
|
|
433
|
+
}, { interval: 10 });
|
|
438
434
|
|
|
439
435
|
consoleSpy.mockRestore();
|
|
440
436
|
});
|
|
@@ -452,7 +448,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
452
448
|
const reloadButton = screen.getByText('Reload Page');
|
|
453
449
|
expect(reloadButton).toBeInTheDocument();
|
|
454
450
|
expect(reloadButton.tagName).toBe('BUTTON');
|
|
455
|
-
});
|
|
451
|
+
}, { interval: 10 });
|
|
456
452
|
|
|
457
453
|
consoleSpy.mockRestore();
|
|
458
454
|
});
|
|
@@ -470,7 +466,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
470
466
|
const heading = screen.getByText('Error in TestComponent');
|
|
471
467
|
expect(heading).toBeInTheDocument();
|
|
472
468
|
expect(heading.tagName).toBe('H3');
|
|
473
|
-
});
|
|
469
|
+
}, { interval: 10 });
|
|
474
470
|
|
|
475
471
|
consoleSpy.mockRestore();
|
|
476
472
|
});
|
|
@@ -492,7 +488,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
492
488
|
await waitFor(() => {
|
|
493
489
|
expect(screen.getByText('Error Details (Development)')).toBeInTheDocument();
|
|
494
490
|
expect(screen.getByText(/Error ID:/)).toBeInTheDocument();
|
|
495
|
-
});
|
|
491
|
+
}, { interval: 10 });
|
|
496
492
|
|
|
497
493
|
vi.unstubAllEnvs();
|
|
498
494
|
consoleSpy.mockRestore();
|
|
@@ -513,7 +509,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
513
509
|
await waitFor(() => {
|
|
514
510
|
expect(screen.queryByText('Error Details (Development)')).not.toBeInTheDocument();
|
|
515
511
|
expect(screen.queryByText(/Error ID:/)).not.toBeInTheDocument();
|
|
516
|
-
});
|
|
512
|
+
}, { interval: 10 });
|
|
517
513
|
|
|
518
514
|
vi.unstubAllEnvs();
|
|
519
515
|
consoleSpy.mockRestore();
|
|
@@ -532,7 +528,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
532
528
|
|
|
533
529
|
await waitFor(() => {
|
|
534
530
|
expect(screen.getByText('Reload Page')).toBeInTheDocument();
|
|
535
|
-
});
|
|
531
|
+
}, { interval: 10 });
|
|
536
532
|
|
|
537
533
|
fireEvent.click(screen.getByText('Reload Page'));
|
|
538
534
|
|
|
@@ -553,13 +549,13 @@ describe('ErrorBoundary Component', () => {
|
|
|
553
549
|
// Click retry to reach max retries
|
|
554
550
|
await waitFor(() => {
|
|
555
551
|
expect(screen.getByText('Retry (1/1)')).toBeInTheDocument();
|
|
556
|
-
});
|
|
552
|
+
}, { interval: 10 });
|
|
557
553
|
|
|
558
554
|
fireEvent.click(screen.getByText(/retry/i));
|
|
559
555
|
|
|
560
556
|
await waitFor(() => {
|
|
561
557
|
expect(screen.getByText(/Maximum retry attempts reached/)).toBeInTheDocument();
|
|
562
|
-
});
|
|
558
|
+
}, { interval: 10 });
|
|
563
559
|
|
|
564
560
|
fireEvent.click(screen.getByText('Reload Page'));
|
|
565
561
|
|
|
@@ -581,7 +577,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
581
577
|
|
|
582
578
|
await waitFor(() => {
|
|
583
579
|
expect(screen.getByText('Error in Component')).toBeInTheDocument();
|
|
584
|
-
});
|
|
580
|
+
}, { interval: 10 });
|
|
585
581
|
|
|
586
582
|
// Re-render with same props
|
|
587
583
|
rerender(
|
|
@@ -607,7 +603,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
607
603
|
|
|
608
604
|
await waitFor(() => {
|
|
609
605
|
expect(screen.getByText('Error in Component')).toBeInTheDocument();
|
|
610
|
-
});
|
|
606
|
+
}, { interval: 10 });
|
|
611
607
|
|
|
612
608
|
// Change to non-throwing component - error boundary should maintain error state
|
|
613
609
|
rerender(
|
|
@@ -640,7 +636,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
640
636
|
|
|
641
637
|
await waitFor(() => {
|
|
642
638
|
expect(screen.getByText('Error in Parent')).toBeInTheDocument();
|
|
643
|
-
});
|
|
639
|
+
}, { interval: 10 });
|
|
644
640
|
|
|
645
641
|
consoleSpy.mockRestore();
|
|
646
642
|
});
|
|
@@ -660,7 +656,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
660
656
|
await waitFor(() => {
|
|
661
657
|
expect(screen.getByText('Outer content')).toBeInTheDocument();
|
|
662
658
|
expect(screen.getByText('Error in Inner')).toBeInTheDocument();
|
|
663
|
-
});
|
|
659
|
+
}, { interval: 10 });
|
|
664
660
|
|
|
665
661
|
consoleSpy.mockRestore();
|
|
666
662
|
});
|
|
@@ -676,7 +672,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
676
672
|
|
|
677
673
|
await waitFor(() => {
|
|
678
674
|
expect(screen.getByText('Error in Component')).toBeInTheDocument();
|
|
679
|
-
});
|
|
675
|
+
}, { interval: 10 });
|
|
680
676
|
|
|
681
677
|
consoleSpy.mockRestore();
|
|
682
678
|
});
|
|
@@ -692,7 +688,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
692
688
|
|
|
693
689
|
await waitFor(() => {
|
|
694
690
|
expect(screen.getByText('An unexpected error occurred.')).toBeInTheDocument();
|
|
695
|
-
});
|
|
691
|
+
}, { interval: 10 });
|
|
696
692
|
|
|
697
693
|
consoleSpy.mockRestore();
|
|
698
694
|
});
|
|
@@ -721,7 +717,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
721
717
|
|
|
722
718
|
await waitFor(() => {
|
|
723
719
|
expect(screen.getByText('Error in Component')).toBeInTheDocument();
|
|
724
|
-
});
|
|
720
|
+
}, { interval: 10 });
|
|
725
721
|
|
|
726
722
|
// Rapidly change between error and non-error states
|
|
727
723
|
// Note: Error boundaries maintain error state once triggered
|
|
@@ -744,7 +740,7 @@ describe('ErrorBoundary Component', () => {
|
|
|
744
740
|
|
|
745
741
|
await waitFor(() => {
|
|
746
742
|
expect(screen.getByText('Error in Component')).toBeInTheDocument();
|
|
747
|
-
});
|
|
743
|
+
}, { interval: 10 });
|
|
748
744
|
|
|
749
745
|
consoleSpy.mockRestore();
|
|
750
746
|
});
|
|
@@ -24,11 +24,7 @@ const mockDate = new Date('2024-01-01');
|
|
|
24
24
|
vi.spyOn(global, 'Date').mockImplementation(() => mockDate as any);
|
|
25
25
|
|
|
26
26
|
describe('Footer Component', () => {
|
|
27
|
-
|
|
28
|
-
vi.clearAllMocks();
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
describe('Rendering', () => {
|
|
27
|
+
describe('Rendering', () => {
|
|
32
28
|
it('renders with default props', () => {
|
|
33
29
|
renderWithProviders(<Footer />);
|
|
34
30
|
|
|
@@ -41,11 +41,7 @@ vi.mock('../Alert', () => ({
|
|
|
41
41
|
describe('Form Component', () => {
|
|
42
42
|
const user = userEvent.setup();
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
vi.clearAllMocks();
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
describe('Rendering', () => {
|
|
44
|
+
describe('Rendering', () => {
|
|
49
45
|
it('renders with basic props', () => {
|
|
50
46
|
const onSubmit = vi.fn();
|
|
51
47
|
|
|
@@ -356,11 +352,7 @@ describe('Form Component', () => {
|
|
|
356
352
|
describe('FormField Component', () => {
|
|
357
353
|
const user = userEvent.setup();
|
|
358
354
|
|
|
359
|
-
|
|
360
|
-
vi.clearAllMocks();
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
describe('Rendering', () => {
|
|
355
|
+
describe('Rendering', () => {
|
|
364
356
|
it('renders with basic props', () => {
|
|
365
357
|
const onSubmit = vi.fn();
|
|
366
358
|
|
|
@@ -575,11 +567,7 @@ describe('FormField Component', () => {
|
|
|
575
567
|
});
|
|
576
568
|
|
|
577
569
|
describe('FormFieldset Component', () => {
|
|
578
|
-
|
|
579
|
-
vi.clearAllMocks();
|
|
580
|
-
});
|
|
581
|
-
|
|
582
|
-
describe('Rendering', () => {
|
|
570
|
+
describe('Rendering', () => {
|
|
583
571
|
it('renders with legend', () => {
|
|
584
572
|
renderWithProviders(
|
|
585
573
|
<FormFieldset legend="Personal Information">
|
|
@@ -675,11 +663,7 @@ describe('FormFieldset Component', () => {
|
|
|
675
663
|
});
|
|
676
664
|
|
|
677
665
|
describe('FormErrorSummary Component', () => {
|
|
678
|
-
|
|
679
|
-
vi.clearAllMocks();
|
|
680
|
-
});
|
|
681
|
-
|
|
682
|
-
describe('Rendering', () => {
|
|
666
|
+
describe('Rendering', () => {
|
|
683
667
|
it('renders nothing when no errors', () => {
|
|
684
668
|
renderWithProviders(
|
|
685
669
|
<FormErrorSummary errors={{}} />
|
|
@@ -780,16 +764,7 @@ describe('FormErrorSummary Component', () => {
|
|
|
780
764
|
});
|
|
781
765
|
|
|
782
766
|
describe('FormLiveRegion Component', () => {
|
|
783
|
-
|
|
784
|
-
vi.clearAllMocks();
|
|
785
|
-
vi.useFakeTimers();
|
|
786
|
-
});
|
|
787
|
-
|
|
788
|
-
afterEach(() => {
|
|
789
|
-
vi.useRealTimers();
|
|
790
|
-
});
|
|
791
|
-
|
|
792
|
-
describe('Rendering', () => {
|
|
767
|
+
describe('Rendering', () => {
|
|
793
768
|
it('renders nothing when no message', () => {
|
|
794
769
|
const mockForm = {
|
|
795
770
|
formState: {
|
|
@@ -867,6 +842,8 @@ describe('FormLiveRegion Component', () => {
|
|
|
867
842
|
});
|
|
868
843
|
|
|
869
844
|
it('announces successful submission', async () => {
|
|
845
|
+
vi.useFakeTimers();
|
|
846
|
+
|
|
870
847
|
const mockForm = {
|
|
871
848
|
formState: {
|
|
872
849
|
isSubmitting: false,
|
|
@@ -888,9 +865,13 @@ describe('FormLiveRegion Component', () => {
|
|
|
888
865
|
|
|
889
866
|
// The message should be set after the timeout
|
|
890
867
|
expect(screen.getByRole('status')).toHaveTextContent('Form submitted successfully');
|
|
868
|
+
|
|
869
|
+
vi.useRealTimers();
|
|
891
870
|
});
|
|
892
871
|
|
|
893
872
|
it('announces custom success message', async () => {
|
|
873
|
+
vi.useFakeTimers();
|
|
874
|
+
|
|
894
875
|
const mockForm = {
|
|
895
876
|
formState: {
|
|
896
877
|
isSubmitting: false,
|
|
@@ -913,6 +894,8 @@ describe('FormLiveRegion Component', () => {
|
|
|
913
894
|
});
|
|
914
895
|
|
|
915
896
|
expect(screen.getByRole('status')).toHaveTextContent('Your data was saved successfully!');
|
|
897
|
+
|
|
898
|
+
vi.useRealTimers();
|
|
916
899
|
});
|
|
917
900
|
|
|
918
901
|
it('announces form errors', async () => {
|
|
@@ -981,6 +964,8 @@ describe('FormLiveRegion Component', () => {
|
|
|
981
964
|
|
|
982
965
|
describe('Field-Level Announcements', () => {
|
|
983
966
|
it('announces field errors when enabled', async () => {
|
|
967
|
+
vi.useFakeTimers();
|
|
968
|
+
|
|
984
969
|
const mockForm = {
|
|
985
970
|
formState: {
|
|
986
971
|
isSubmitting: false,
|
|
@@ -1003,9 +988,13 @@ describe('FormLiveRegion Component', () => {
|
|
|
1003
988
|
});
|
|
1004
989
|
|
|
1005
990
|
expect(screen.getByRole('status')).toHaveTextContent('name: Name is required');
|
|
991
|
+
|
|
992
|
+
vi.useRealTimers();
|
|
1006
993
|
});
|
|
1007
994
|
|
|
1008
995
|
it('does not announce field errors when disabled', () => {
|
|
996
|
+
vi.useFakeTimers();
|
|
997
|
+
|
|
1009
998
|
const mockForm = {
|
|
1010
999
|
formState: {
|
|
1011
1000
|
isSubmitting: false,
|
|
@@ -1025,6 +1014,8 @@ describe('FormLiveRegion Component', () => {
|
|
|
1025
1014
|
|
|
1026
1015
|
vi.advanceTimersByTime(500);
|
|
1027
1016
|
|
|
1017
|
+
vi.useRealTimers();
|
|
1018
|
+
|
|
1028
1019
|
expect(screen.queryByText('name: Name is required')).not.toBeInTheDocument();
|
|
1029
1020
|
});
|
|
1030
1021
|
});
|
|
@@ -1079,11 +1070,7 @@ describe('FormLiveRegion Component', () => {
|
|
|
1079
1070
|
describe('Integration', () => {
|
|
1080
1071
|
const user = userEvent.setup();
|
|
1081
1072
|
|
|
1082
|
-
|
|
1083
|
-
vi.clearAllMocks();
|
|
1084
|
-
});
|
|
1085
|
-
|
|
1086
|
-
it('works with complete form setup', async () => {
|
|
1073
|
+
it('works with complete form setup', async () => {
|
|
1087
1074
|
const onSubmit = vi.fn();
|
|
1088
1075
|
const onError = vi.fn();
|
|
1089
1076
|
const schema = z.object({
|
|
@@ -89,15 +89,7 @@ const mockProps: HeaderProps = {
|
|
|
89
89
|
};
|
|
90
90
|
|
|
91
91
|
describe('Header Component', () => {
|
|
92
|
-
|
|
93
|
-
vi.clearAllMocks();
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
afterEach(() => {
|
|
97
|
-
vi.clearAllMocks();
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
// Basic rendering tests
|
|
92
|
+
// Basic rendering tests
|
|
101
93
|
describe('Rendering', () => {
|
|
102
94
|
it('renders with default props', () => {
|
|
103
95
|
renderWithProviders(<Header />);
|
|
@@ -72,11 +72,7 @@ describe('InactivityWarningModal Component', () => {
|
|
|
72
72
|
onSignOutNow: vi.fn(),
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
vi.clearAllMocks();
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
describe('Rendering', () => {
|
|
75
|
+
describe('Rendering', () => {
|
|
80
76
|
it('renders when isOpen is true', () => {
|
|
81
77
|
renderWithProviders(<InactivityWarningModal {...defaultProps} />);
|
|
82
78
|
|
|
@@ -11,11 +11,7 @@ import { Input, InputGroup } from './Input';
|
|
|
11
11
|
import { renderWithProviders } from '../../__tests__/helpers/test-utils';
|
|
12
12
|
|
|
13
13
|
describe('Input Component', () => {
|
|
14
|
-
|
|
15
|
-
vi.clearAllMocks();
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
// Basic rendering tests
|
|
14
|
+
// Basic rendering tests
|
|
19
15
|
describe('Rendering', () => {
|
|
20
16
|
it('renders with default props', () => {
|
|
21
17
|
renderWithProviders(<Input />);
|
|
@@ -268,11 +264,7 @@ describe('Input Component', () => {
|
|
|
268
264
|
});
|
|
269
265
|
|
|
270
266
|
describe('InputGroup Component', () => {
|
|
271
|
-
|
|
272
|
-
vi.clearAllMocks();
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
// Basic rendering tests
|
|
267
|
+
// Basic rendering tests
|
|
276
268
|
describe('Rendering', () => {
|
|
277
269
|
it('renders with default props', () => {
|
|
278
270
|
renderWithProviders(
|
|
@@ -109,11 +109,7 @@ describe('LoginForm Component', () => {
|
|
|
109
109
|
onSignIn: vi.fn(),
|
|
110
110
|
};
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
vi.clearAllMocks();
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
describe('Rendering', () => {
|
|
112
|
+
describe('Rendering', () => {
|
|
117
113
|
it('renders with default props', () => {
|
|
118
114
|
renderWithProviders(<LoginForm {...defaultProps} />);
|
|
119
115
|
|