@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
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Component Test Utilities Tests
|
|
3
|
+
* @package @jmruthers/pace-core
|
|
4
|
+
* @module TestHelpers/__tests__
|
|
5
|
+
* @since 1.0.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { render, screen } from '@testing-library/react';
|
|
10
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
11
|
+
import userEvent from '@testing-library/user-event';
|
|
12
|
+
import {
|
|
13
|
+
componentTestPatterns,
|
|
14
|
+
commonScenarios,
|
|
15
|
+
createTestData
|
|
16
|
+
} from '../component-test-utils';
|
|
17
|
+
|
|
18
|
+
// Mock the renderWithProviders function
|
|
19
|
+
vi.mock('../test-utils', () => ({
|
|
20
|
+
renderWithProviders: vi.fn((ui) => render(ui))
|
|
21
|
+
}));
|
|
22
|
+
|
|
23
|
+
describe('[helpers] componentTestPatterns', () => {
|
|
24
|
+
describe('testRenders', () => {
|
|
25
|
+
it('creates test that renders component without crashing', () => {
|
|
26
|
+
const TestComponent = () => <div data-testid="test-component">Test</div>;
|
|
27
|
+
const testFn = componentTestPatterns.testRenders(TestComponent);
|
|
28
|
+
|
|
29
|
+
expect(typeof testFn).toBe('function');
|
|
30
|
+
|
|
31
|
+
// Execute the test
|
|
32
|
+
expect(() => testFn()).not.toThrow();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('creates test that renders component with props', () => {
|
|
36
|
+
const TestComponent = ({ name }: { name: string }) => <div data-testid="test-component">{name}</div>;
|
|
37
|
+
const testFn = componentTestPatterns.testRenders(TestComponent, { name: 'Test Name' });
|
|
38
|
+
|
|
39
|
+
expect(typeof testFn).toBe('function');
|
|
40
|
+
|
|
41
|
+
// Execute the test
|
|
42
|
+
expect(() => testFn()).not.toThrow();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe('testProps', () => {
|
|
47
|
+
it('creates test cases for prop handling', () => {
|
|
48
|
+
const TestComponent = ({ disabled }: { disabled?: boolean }) => (
|
|
49
|
+
<button disabled={disabled}>Test Button</button>
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const testCases = [
|
|
53
|
+
{
|
|
54
|
+
name: 'disabled prop',
|
|
55
|
+
props: { disabled: true },
|
|
56
|
+
expectedBehavior: () => {
|
|
57
|
+
expect(screen.getByRole('button')).toBeDisabled();
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'enabled prop',
|
|
62
|
+
props: { disabled: false },
|
|
63
|
+
expectedBehavior: () => {
|
|
64
|
+
expect(screen.getByRole('button')).not.toBeDisabled();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
const tests = componentTestPatterns.testProps(TestComponent, testCases);
|
|
70
|
+
|
|
71
|
+
expect(tests).toHaveLength(2);
|
|
72
|
+
expect(tests[0].name).toBe('handles disabled prop');
|
|
73
|
+
expect(tests[1].name).toBe('handles enabled prop');
|
|
74
|
+
|
|
75
|
+
// Execute the first test
|
|
76
|
+
expect(() => tests[0].test()).not.toThrow();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
describe('testEvents', () => {
|
|
81
|
+
it('creates test cases for event handling', async () => {
|
|
82
|
+
const TestComponent = () => <button>Click me</button>;
|
|
83
|
+
|
|
84
|
+
const eventTests = [
|
|
85
|
+
{
|
|
86
|
+
name: 'click event',
|
|
87
|
+
action: async (element: HTMLElement) => {
|
|
88
|
+
const user = userEvent.setup();
|
|
89
|
+
await user.click(element);
|
|
90
|
+
},
|
|
91
|
+
expectedBehavior: () => {
|
|
92
|
+
expect(screen.getByRole('button')).toBeInTheDocument();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
const tests = componentTestPatterns.testEvents(TestComponent, eventTests);
|
|
98
|
+
|
|
99
|
+
expect(tests).toHaveLength(1);
|
|
100
|
+
expect(tests[0].name).toBe('handles click event');
|
|
101
|
+
|
|
102
|
+
// Execute the test
|
|
103
|
+
await expect(tests[0].test()).resolves.not.toThrow();
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
describe('testAccessibility', () => {
|
|
108
|
+
it('creates accessibility test', () => {
|
|
109
|
+
const TestComponent = () => <button>Test Button</button>;
|
|
110
|
+
const testFn = componentTestPatterns.testAccessibility(TestComponent);
|
|
111
|
+
|
|
112
|
+
expect(typeof testFn).toBe('function');
|
|
113
|
+
|
|
114
|
+
// Execute the test
|
|
115
|
+
expect(() => testFn()).not.toThrow();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
describe('[helpers] commonScenarios', () => {
|
|
121
|
+
describe('button scenarios', () => {
|
|
122
|
+
it('creates button render test', () => {
|
|
123
|
+
const TestButton = ({ children, onClick, disabled }: any) => (
|
|
124
|
+
<button onClick={onClick} disabled={disabled}>
|
|
125
|
+
{children}
|
|
126
|
+
</button>
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
const tests = commonScenarios.button.renders(TestButton);
|
|
130
|
+
|
|
131
|
+
expect(tests).toHaveLength(3);
|
|
132
|
+
expect(tests[0].name).toBe('renders with text');
|
|
133
|
+
expect(tests[1].name).toBe('handles click events');
|
|
134
|
+
expect(tests[2].name).toBe('can be disabled');
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('executes button render test', () => {
|
|
138
|
+
const TestButton = ({ children }: any) => <button>{children}</button>;
|
|
139
|
+
const tests = commonScenarios.button.renders(TestButton);
|
|
140
|
+
|
|
141
|
+
expect(() => tests[0].test()).not.toThrow();
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('executes button click test', async () => {
|
|
145
|
+
const TestButton = ({ children, onClick }: any) => (
|
|
146
|
+
<button onClick={onClick}>{children}</button>
|
|
147
|
+
);
|
|
148
|
+
const tests = commonScenarios.button.renders(TestButton);
|
|
149
|
+
|
|
150
|
+
await expect(tests[1].test()).resolves.not.toThrow();
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it('executes button disabled test', () => {
|
|
154
|
+
const TestButton = ({ children, disabled }: any) => (
|
|
155
|
+
<button disabled={disabled}>{children}</button>
|
|
156
|
+
);
|
|
157
|
+
const tests = commonScenarios.button.renders(TestButton);
|
|
158
|
+
|
|
159
|
+
expect(() => tests[2].test()).not.toThrow();
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
describe('form scenarios', () => {
|
|
164
|
+
it('creates form render test', () => {
|
|
165
|
+
const TestForm = ({ onSubmit }: any) => (
|
|
166
|
+
<form onSubmit={onSubmit}>
|
|
167
|
+
<button type="submit">Submit</button>
|
|
168
|
+
</form>
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
const tests = commonScenarios.form.renders(TestForm);
|
|
172
|
+
|
|
173
|
+
expect(tests).toHaveLength(2);
|
|
174
|
+
expect(tests[0].name).toBe('renders form elements');
|
|
175
|
+
expect(tests[1].name).toBe('handles form submission');
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it('executes form render test', () => {
|
|
179
|
+
const TestForm = () => (
|
|
180
|
+
<form>
|
|
181
|
+
<button type="submit">Submit</button>
|
|
182
|
+
</form>
|
|
183
|
+
);
|
|
184
|
+
const tests = commonScenarios.form.renders(TestForm);
|
|
185
|
+
|
|
186
|
+
expect(() => tests[0].test()).not.toThrow();
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('executes form submission test', async () => {
|
|
190
|
+
const TestForm = ({ onSubmit }: any) => (
|
|
191
|
+
<form onSubmit={onSubmit}>
|
|
192
|
+
<button type="submit">Submit</button>
|
|
193
|
+
</form>
|
|
194
|
+
);
|
|
195
|
+
const tests = commonScenarios.form.renders(TestForm);
|
|
196
|
+
|
|
197
|
+
await expect(tests[1].test()).resolves.not.toThrow();
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
describe('[helpers] createTestData', () => {
|
|
203
|
+
describe('button data', () => {
|
|
204
|
+
it('creates button data with defaults', () => {
|
|
205
|
+
const buttonData = createTestData.button();
|
|
206
|
+
|
|
207
|
+
expect(buttonData).toHaveProperty('children', 'Test Button');
|
|
208
|
+
expect(buttonData).toHaveProperty('onClick');
|
|
209
|
+
expect(typeof buttonData.onClick).toBe('function');
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
it('creates button data with overrides', () => {
|
|
213
|
+
const customOnClick = vi.fn();
|
|
214
|
+
const buttonData = createTestData.button({
|
|
215
|
+
children: 'Custom Button',
|
|
216
|
+
onClick: customOnClick
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
expect(buttonData.children).toBe('Custom Button');
|
|
220
|
+
expect(buttonData.onClick).toBe(customOnClick);
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
describe('form data', () => {
|
|
225
|
+
it('creates form data with defaults', () => {
|
|
226
|
+
const formData = createTestData.form();
|
|
227
|
+
|
|
228
|
+
expect(formData).toHaveProperty('onSubmit');
|
|
229
|
+
expect(typeof formData.onSubmit).toBe('function');
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it('creates form data with overrides', () => {
|
|
233
|
+
const customOnSubmit = vi.fn();
|
|
234
|
+
const formData = createTestData.form({ onSubmit: customOnSubmit });
|
|
235
|
+
|
|
236
|
+
expect(formData.onSubmit).toBe(customOnSubmit);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
describe('user data', () => {
|
|
241
|
+
it('creates user data with defaults', () => {
|
|
242
|
+
const userData = createTestData.user();
|
|
243
|
+
|
|
244
|
+
expect(userData).toHaveProperty('id', '1');
|
|
245
|
+
expect(userData).toHaveProperty('name', 'Test User');
|
|
246
|
+
expect(userData).toHaveProperty('email', 'test@example.com');
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it('creates user data with overrides', () => {
|
|
250
|
+
const userData = createTestData.user({
|
|
251
|
+
name: 'Custom User',
|
|
252
|
+
email: 'custom@example.com'
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
expect(userData.name).toBe('Custom User');
|
|
256
|
+
expect(userData.email).toBe('custom@example.com');
|
|
257
|
+
expect(userData.id).toBe('1'); // Should still have default
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
});
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Optimized Test Setup Tests
|
|
3
|
+
* @package @jmruthers/pace-core
|
|
4
|
+
* @module TestHelpers/__tests__
|
|
5
|
+
* @since 1.0.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
9
|
+
import {
|
|
10
|
+
createFastMock,
|
|
11
|
+
createFastErrorMock,
|
|
12
|
+
setupOptimizedMocks,
|
|
13
|
+
cleanupOptimizedMocks,
|
|
14
|
+
createOptimizedTest
|
|
15
|
+
} from '../optimized-test-setup';
|
|
16
|
+
|
|
17
|
+
describe('[helpers] createFastMock', () => {
|
|
18
|
+
it('creates mock that resolves with value', async () => {
|
|
19
|
+
const mockValue = { data: 'test' };
|
|
20
|
+
const mockFn = createFastMock(mockValue);
|
|
21
|
+
|
|
22
|
+
const result = await mockFn();
|
|
23
|
+
|
|
24
|
+
expect(result).toEqual(mockValue);
|
|
25
|
+
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('creates mock that can be called multiple times', async () => {
|
|
29
|
+
const mockValue = { data: 'test' };
|
|
30
|
+
const mockFn = createFastMock(mockValue);
|
|
31
|
+
|
|
32
|
+
const result1 = await mockFn();
|
|
33
|
+
const result2 = await mockFn();
|
|
34
|
+
|
|
35
|
+
expect(result1).toEqual(mockValue);
|
|
36
|
+
expect(result2).toEqual(mockValue);
|
|
37
|
+
expect(mockFn).toHaveBeenCalledTimes(2);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('creates mock with different values', async () => {
|
|
41
|
+
const mockValue1 = { data: 'test1' };
|
|
42
|
+
const mockValue2 = { data: 'test2' };
|
|
43
|
+
const mockFn1 = createFastMock(mockValue1);
|
|
44
|
+
const mockFn2 = createFastMock(mockValue2);
|
|
45
|
+
|
|
46
|
+
const result1 = await mockFn1();
|
|
47
|
+
const result2 = await mockFn2();
|
|
48
|
+
|
|
49
|
+
expect(result1).toEqual(mockValue1);
|
|
50
|
+
expect(result2).toEqual(mockValue2);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe('[helpers] createFastErrorMock', () => {
|
|
55
|
+
it('creates mock that rejects with error', async () => {
|
|
56
|
+
const testError = new Error('Test error');
|
|
57
|
+
const mockFn = createFastErrorMock(testError);
|
|
58
|
+
|
|
59
|
+
await expect(mockFn()).rejects.toThrow('Test error');
|
|
60
|
+
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('creates mock that can be called multiple times', async () => {
|
|
64
|
+
const testError = new Error('Test error');
|
|
65
|
+
const mockFn = createFastErrorMock(testError);
|
|
66
|
+
|
|
67
|
+
await expect(mockFn()).rejects.toThrow('Test error');
|
|
68
|
+
await expect(mockFn()).rejects.toThrow('Test error');
|
|
69
|
+
expect(mockFn).toHaveBeenCalledTimes(2);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('creates mock with different errors', async () => {
|
|
73
|
+
const error1 = new Error('Error 1');
|
|
74
|
+
const error2 = new Error('Error 2');
|
|
75
|
+
const mockFn1 = createFastErrorMock(error1);
|
|
76
|
+
const mockFn2 = createFastErrorMock(error2);
|
|
77
|
+
|
|
78
|
+
await expect(mockFn1()).rejects.toThrow('Error 1');
|
|
79
|
+
await expect(mockFn2()).rejects.toThrow('Error 2');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
describe('[helpers] setupOptimizedMocks', () => {
|
|
84
|
+
it('sets up fetch mock', () => {
|
|
85
|
+
setupOptimizedMocks();
|
|
86
|
+
|
|
87
|
+
expect(global.fetch).toBeDefined();
|
|
88
|
+
expect(vi.isMockFunction(global.fetch)).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('sets up setTimeout mock', () => {
|
|
92
|
+
setupOptimizedMocks();
|
|
93
|
+
|
|
94
|
+
// Test that setTimeout executes callback immediately
|
|
95
|
+
let called = false;
|
|
96
|
+
global.setTimeout(() => {
|
|
97
|
+
called = true;
|
|
98
|
+
}, 1000);
|
|
99
|
+
|
|
100
|
+
expect(called).toBe(true);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('sets up setInterval mock', () => {
|
|
104
|
+
setupOptimizedMocks();
|
|
105
|
+
|
|
106
|
+
// Test that setInterval executes callback immediately
|
|
107
|
+
let called = false;
|
|
108
|
+
global.setInterval(() => {
|
|
109
|
+
called = true;
|
|
110
|
+
}, 1000);
|
|
111
|
+
|
|
112
|
+
expect(called).toBe(true);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('fetch mock resolves with success response', async () => {
|
|
116
|
+
setupOptimizedMocks();
|
|
117
|
+
|
|
118
|
+
const response = await global.fetch('https://example.com');
|
|
119
|
+
|
|
120
|
+
expect(response.ok).toBe(true);
|
|
121
|
+
expect(await response.json()).toEqual({});
|
|
122
|
+
expect(await response.text()).toBe('');
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('setTimeout executes callback immediately', () => {
|
|
126
|
+
setupOptimizedMocks();
|
|
127
|
+
|
|
128
|
+
const callback = vi.fn();
|
|
129
|
+
const result = global.setTimeout(callback, 1000);
|
|
130
|
+
|
|
131
|
+
expect(callback).toHaveBeenCalledTimes(1);
|
|
132
|
+
expect(result).toBe(1);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it('setInterval executes callback immediately', () => {
|
|
136
|
+
setupOptimizedMocks();
|
|
137
|
+
|
|
138
|
+
const callback = vi.fn();
|
|
139
|
+
const result = global.setInterval(callback, 1000);
|
|
140
|
+
|
|
141
|
+
expect(callback).toHaveBeenCalledTimes(1);
|
|
142
|
+
expect(result).toBe(1);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
describe('[helpers] cleanupOptimizedMocks', () => {
|
|
147
|
+
it('restores all mocks', () => {
|
|
148
|
+
// Set up some mocks first
|
|
149
|
+
setupOptimizedMocks();
|
|
150
|
+
|
|
151
|
+
// Verify mocks are set up
|
|
152
|
+
expect(vi.isMockFunction(global.fetch)).toBe(true);
|
|
153
|
+
|
|
154
|
+
// Clean up mocks
|
|
155
|
+
cleanupOptimizedMocks();
|
|
156
|
+
|
|
157
|
+
// Verify mocks are restored (this is hard to test directly, but we can verify the function exists)
|
|
158
|
+
expect(typeof cleanupOptimizedMocks).toBe('function');
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
describe('[helpers] createOptimizedTest', () => {
|
|
163
|
+
it('creates test with name and function', () => {
|
|
164
|
+
const testFn = vi.fn();
|
|
165
|
+
const test = createOptimizedTest('Test Name', testFn);
|
|
166
|
+
|
|
167
|
+
expect(test).toHaveProperty('name', 'Test Name');
|
|
168
|
+
expect(test).toHaveProperty('fn');
|
|
169
|
+
expect(typeof test.fn).toBe('function');
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it('executes test function with optimized setup', async () => {
|
|
173
|
+
let called = false;
|
|
174
|
+
const testFn = async () => { called = true; };
|
|
175
|
+
const test = createOptimizedTest('Test Name', testFn);
|
|
176
|
+
|
|
177
|
+
await test.fn();
|
|
178
|
+
|
|
179
|
+
expect(called).toBe(true);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it('sets up and cleans up mocks around test execution', async () => {
|
|
183
|
+
let called = false;
|
|
184
|
+
const testFn = async () => {
|
|
185
|
+
called = true;
|
|
186
|
+
// Verify that fetch mock is set up
|
|
187
|
+
const fetchResult = await global.fetch('https://test.com');
|
|
188
|
+
expect(fetchResult.ok).toBe(true);
|
|
189
|
+
};
|
|
190
|
+
const test = createOptimizedTest('Test Name', testFn);
|
|
191
|
+
|
|
192
|
+
await test.fn();
|
|
193
|
+
|
|
194
|
+
expect(called).toBe(true);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it('handles test function errors gracefully', async () => {
|
|
198
|
+
const testError = new Error('Test error');
|
|
199
|
+
const testFn = async () => { throw testError; };
|
|
200
|
+
const test = createOptimizedTest('Test Name', testFn);
|
|
201
|
+
|
|
202
|
+
await expect(test.fn()).rejects.toThrow('Test error');
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it('handles synchronous test functions', async () => {
|
|
206
|
+
let called = false;
|
|
207
|
+
const testFn = () => { called = true; return 'sync result'; };
|
|
208
|
+
const test = createOptimizedTest('Test Name', testFn);
|
|
209
|
+
|
|
210
|
+
await test.fn();
|
|
211
|
+
|
|
212
|
+
expect(called).toBe(true);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it('handles asynchronous test functions', async () => {
|
|
216
|
+
let called = false;
|
|
217
|
+
const testFn = async () => { called = true; return 'async result'; };
|
|
218
|
+
const test = createOptimizedTest('Test Name', testFn);
|
|
219
|
+
|
|
220
|
+
await test.fn();
|
|
221
|
+
|
|
222
|
+
expect(called).toBe(true);
|
|
223
|
+
});
|
|
224
|
+
});
|