@jmruthers/pace-core 0.2.7 → 0.5.1
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-EEUDXPE5.js → DataTable-GX3XERFJ.js} +8 -4
- package/dist/{DataTable-C1AEm9Cx.d.ts → DataTable-ltTFXHS3.d.ts} +3 -1
- package/dist/{chunk-VYG4AXYW.js → chunk-5EL3KHOQ.js} +2 -2
- package/dist/{chunk-ETEJVKYK.js → chunk-6CR3MRZN.js} +1426 -62
- package/dist/chunk-6CR3MRZN.js.map +1 -0
- package/dist/chunk-AUE24LVR.js +268 -0
- package/dist/chunk-AUE24LVR.js.map +1 -0
- package/dist/chunk-COBPIXXQ.js +379 -0
- package/dist/chunk-COBPIXXQ.js.map +1 -0
- package/dist/{chunk-EWKPTNPO.js → chunk-GSNM5D6H.js} +388 -86
- package/dist/chunk-GSNM5D6H.js.map +1 -0
- package/dist/{chunk-2V3Y6YBC.js → chunk-OEGRKULD.js} +1 -42
- package/dist/chunk-OEGRKULD.js.map +1 -0
- package/dist/chunk-OYRY44Q2.js +62 -0
- package/dist/chunk-OYRY44Q2.js.map +1 -0
- package/dist/{chunk-RRUYHORU.js → chunk-T3XIA4AJ.js} +297 -433
- package/dist/chunk-T3XIA4AJ.js.map +1 -0
- package/dist/{chunk-HEMJ4SUJ.js → chunk-TGDCLPP2.js} +11 -7
- package/dist/{chunk-HEMJ4SUJ.js.map → chunk-TGDCLPP2.js.map} +1 -1
- package/dist/{chunk-HNDFPXUU.js → chunk-U6JDHVC2.js} +6 -4
- package/dist/{chunk-HNDFPXUU.js.map → chunk-U6JDHVC2.js.map} +1 -1
- package/dist/{chunk-TIVL4UQ7.js → chunk-XJK2J4N6.js} +6 -4
- package/dist/{chunk-TIVL4UQ7.js.map → chunk-XJK2J4N6.js.map} +1 -1
- package/dist/components.d.ts +2 -2
- package/dist/components.js +21 -20
- package/dist/components.js.map +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +7 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.js +26 -25
- package/dist/index.js.map +1 -1
- package/dist/providers.js +8 -7
- package/dist/rbac/index.d.ts +806 -806
- package/dist/rbac/index.js +937 -1179
- package/dist/rbac/index.js.map +1 -1
- package/dist/{types-DiRQsGJs.d.ts → types-BRDU7N6w.d.ts} +12 -1
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +6 -6
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- 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/DataTableAction.md +21 -8
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +46 -33
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- 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/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.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 +2 -2
- 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/PaletteData.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/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 +5 -2
- package/src/__tests__/REBUILD_PLAN.md +223 -0
- package/src/__tests__/TESTING_GUIDELINES.md +341 -0
- package/src/__tests__/fixtures/mocks.ts +93 -0
- package/src/__tests__/helpers/component-test-utils.tsx +145 -0
- package/src/__tests__/helpers/test-utils.tsx +117 -0
- package/src/__tests__/integration/UserProfile.test.tsx +128 -0
- package/src/__tests__/setup.ts +37 -225
- package/src/__tests__/templates/component.test.template.tsx +97 -75
- package/src/__tests__/templates/hook.test.template.ts +173 -0
- package/src/__tests__/types/test.types.ts +106 -0
- package/src/components/Alert/Alert.test.tsx +496 -0
- package/src/components/Avatar/Avatar.test.tsx +484 -0
- package/src/components/Button/Button.test.tsx +662 -0
- package/src/components/Card/Card.test.tsx +593 -0
- package/src/components/Checkbox/Checkbox.test.tsx +461 -0
- package/src/components/DataTable/DataTable.tsx +9 -1
- package/src/components/DataTable/components/AccessDeniedPage.tsx +168 -0
- package/src/components/DataTable/components/ActionButtons.tsx +18 -1
- package/src/components/DataTable/components/DataTableCore.tsx +97 -11
- package/src/components/DataTable/components/DataTableToolbar.tsx +22 -10
- package/src/components/DataTable/components/UnifiedTableBody.tsx +33 -4
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +1 -0
- package/src/components/DataTable/examples/HierarchicalExample.tsx +3 -0
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +3 -0
- package/src/components/DataTable/examples/PerformanceExample.tsx +3 -0
- package/src/components/DataTable/types.ts +39 -1
- package/src/components/Dialog/Dialog.test.tsx +1139 -0
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +752 -0
- package/src/components/FileUpload/FileUpload.test.tsx +665 -0
- package/src/hooks/useCounter.test.ts +135 -0
- package/src/rbac/index.ts +3 -3
- package/dist/chunk-2V3Y6YBC.js.map +0 -1
- package/dist/chunk-BEZRLNK3.js +0 -1744
- package/dist/chunk-BEZRLNK3.js.map +0 -1
- package/dist/chunk-ETEJVKYK.js.map +0 -1
- package/dist/chunk-EWKPTNPO.js.map +0 -1
- package/dist/chunk-OHXGNT3K.js +0 -21
- package/dist/chunk-OHXGNT3K.js.map +0 -1
- package/dist/chunk-RRUYHORU.js.map +0 -1
- package/src/__tests__/README.md +0 -404
- package/src/__tests__/debug-provider.unit.test.tsx +0 -67
- package/src/__tests__/e2e/workflows.test.tsx +0 -373
- package/src/__tests__/hybridPermissions.unit.test.tsx +0 -474
- package/src/__tests__/index.integration.test.ts +0 -491
- package/src/__tests__/mocks/MockAuthProvider-standalone.tsx +0 -47
- package/src/__tests__/mocks/MockAuthProvider.tsx +0 -63
- package/src/__tests__/mocks/enhancedSupabaseMock.ts +0 -252
- package/src/__tests__/mocks/index.test.ts +0 -23
- package/src/__tests__/mocks/index.ts +0 -16
- package/src/__tests__/mocks/mockAuth.ts +0 -155
- package/src/__tests__/mocks/mockSupabase.ts +0 -83
- package/src/__tests__/mocks/mockSupabaseClient.ts +0 -63
- package/src/__tests__/mocks/providers.tsx +0 -22
- package/src/__tests__/patterns/__tests__/testPatterns.test.ts +0 -394
- package/src/__tests__/patterns/testPatterns.ts +0 -124
- package/src/__tests__/performance/componentPerformance.performance.test.ts +0 -27
- package/src/__tests__/performance/index.ts +0 -24
- package/src/__tests__/performance/performanceValidation.performance.test.ts +0 -15
- package/src/__tests__/security/security.unit.test.tsx +0 -7
- package/src/__tests__/security/securityValidation.security.test.tsx +0 -153
- package/src/__tests__/setupTests.d.ts +0 -1
- package/src/__tests__/shared/componentTestUtils.tsx +0 -475
- package/src/__tests__/shared/errorHandlingTestUtils.ts +0 -107
- package/src/__tests__/shared/index.ts +0 -81
- package/src/__tests__/shared/integrationTestUtils.tsx +0 -375
- package/src/__tests__/shared/performanceTestUtils.tsx +0 -476
- package/src/__tests__/shared/testUtils.optimized.tsx +0 -685
- package/src/__tests__/simple.test.tsx +0 -20
- package/src/__tests__/test-utils/dataFactories.ts +0 -60
- package/src/__tests__/test-utils/index.ts +0 -6
- package/src/__tests__/typeSafety.unit.test.ts +0 -65
- package/src/__tests__/unifiedAuth.unit.test.tsx +0 -151
- package/src/__tests__/utils/accessibilityHelpers.ts +0 -254
- package/src/__tests__/utils/assertions.ts +0 -50
- package/src/__tests__/utils/deterministicHelpers.ts +0 -31
- package/src/__tests__/utils/edgeCaseConfig.test.ts +0 -75
- package/src/__tests__/utils/edgeCaseConfig.ts +0 -98
- package/src/__tests__/utils/mockHelpers.ts +0 -149
- package/src/__tests__/utils/mockLoader.ts +0 -101
- package/src/__tests__/utils/performanceHelpers.ts +0 -55
- package/src/__tests__/utils/performanceTestHelpers.ts +0 -68
- package/src/__tests__/utils/testDataFactories.ts +0 -28
- package/src/__tests__/utils/testIsolation.ts +0 -67
- package/src/__tests__/utils/visualTestHelpers.ts +0 -20
- package/src/__tests__/visual/__snapshots__/componentSnapshots.visual.test.tsx.snap +0 -68
- package/src/__tests__/visual/__snapshots__/componentVisuals.visual.test.tsx.snap +0 -14
- package/src/__tests__/visual/__snapshots__/visualRegression.test.tsx.snap +0 -217
- package/src/__tests__/visual/__snapshots__/visualRegression.visual.test.tsx.snap +0 -24
- package/src/__tests__/visual/componentSnapshots.visual.test.tsx +0 -33
- package/src/__tests__/visual/componentVisuals.visual.test.tsx +0 -12
- package/src/__tests__/visual/visualRegression.visual.test.tsx +0 -20
- package/src/components/Alert/__tests__/Alert.unit.test.tsx +0 -381
- package/src/components/Avatar/__tests__/Avatar.unit.test.tsx +0 -232
- package/src/components/Button/__tests__/Button.accessibility.test.tsx +0 -131
- package/src/components/Button/__tests__/Button.comprehensive.test.tsx +0 -721
- package/src/components/Button/__tests__/Button.unit.test.tsx +0 -189
- package/src/components/Button/__tests__/EventSelector.integration.test.tsx +0 -285
- package/src/components/Card/__tests__/Card.accessibility.test.tsx +0 -394
- package/src/components/Card/__tests__/Card.comprehensive.test.tsx +0 -599
- package/src/components/Card/__tests__/Card.integration.test.tsx +0 -673
- package/src/components/Card/__tests__/Card.performance.test.tsx +0 -546
- package/src/components/Card/__tests__/Card.unit.test.tsx +0 -330
- package/src/components/Card/__tests__/Card.visual.test.tsx +0 -599
- package/src/components/Card/__tests__/README.md +0 -211
- package/src/components/Checkbox/__tests__/Checkbox.unit.test.tsx +0 -520
- package/src/components/DataTable/__tests__/DataTable.errorHandling.test.tsx +0 -251
- package/src/components/DataTable/__tests__/DataTable.hierarchical.test.tsx +0 -680
- package/src/components/DataTable/__tests__/DataTable.infinite-loop.test.tsx +0 -323
- package/src/components/DataTable/__tests__/DataTable.integration.test.tsx +0 -716
- package/src/components/DataTable/__tests__/DataTable.performance.test.tsx +0 -589
- package/src/components/DataTable/__tests__/DataTable.permissions.test.tsx +0 -316
- package/src/components/DataTable/__tests__/DataTable.regressionFixes.test.tsx +0 -546
- package/src/components/DataTable/__tests__/DataTable.selection.controlled.test.tsx +0 -386
- package/src/components/DataTable/__tests__/DataTable.selection.test.tsx +0 -338
- package/src/components/DataTable/__tests__/DataTable.sorting.test.tsx +0 -321
- package/src/components/DataTable/__tests__/DataTable.userWorkflows.test.tsx +0 -320
- package/src/components/DataTable/__tests__/DataTable.workflowValidation.test.tsx +0 -583
- package/src/components/DataTable/__tests__/DataTable.workflows.test.tsx +0 -711
- package/src/components/DataTable/__tests__/performance-regression.test.tsx +0 -777
- package/src/components/DataTable/__tests__/performance.test.tsx +0 -365
- package/src/components/DataTable/components/__tests__/ActionButtons.unit.test.tsx +0 -150
- package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +0 -224
- package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.unit.test.tsx +0 -244
- package/src/components/DataTable/components/__tests__/DataTable.accessibility.test.tsx +0 -629
- package/src/components/DataTable/components/__tests__/DataTable.integration.test.tsx +0 -470
- package/src/components/DataTable/components/__tests__/DataTable.performance.test.tsx +0 -160
- package/src/components/DataTable/components/__tests__/DataTable.real.test.tsx +0 -251
- package/src/components/DataTable/components/__tests__/DataTable.security.test.tsx +0 -171
- package/src/components/DataTable/components/__tests__/DataTable.unit.test.tsx +0 -290
- package/src/components/DataTable/components/__tests__/DataTableBody.unit.test.tsx +0 -147
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.unit.test.tsx +0 -182
- package/src/components/DataTable/components/__tests__/DataTableModals.unit.test.tsx +0 -123
- package/src/components/DataTable/components/__tests__/EditableRow.unit.test.tsx +0 -660
- package/src/components/DataTable/components/__tests__/EmptyState.unit.test.tsx +0 -256
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -498
- package/src/components/DataTable/components/__tests__/FilterRow.unit.test.tsx +0 -112
- package/src/components/DataTable/components/__tests__/FilteringToggle.unit.test.tsx +0 -133
- package/src/components/DataTable/components/__tests__/GroupHeader.unit.test.tsx +0 -172
- package/src/components/DataTable/components/__tests__/GroupingDropdown.unit.test.tsx +0 -222
- package/src/components/DataTable/components/__tests__/ImportModal.unit.test.tsx +0 -780
- package/src/components/DataTable/components/__tests__/LoadingState.unit.test.tsx +0 -65
- package/src/components/DataTable/components/__tests__/PaginationControls.unit.test.tsx +0 -634
- package/src/components/DataTable/components/__tests__/StateComponents.unit.test.tsx +0 -48
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.hierarchical.test.tsx +0 -541
- package/src/components/DataTable/components/__tests__/ViewRowModal.unit.test.tsx +0 -228
- package/src/components/DataTable/components/__tests__/VirtualizedDataTable.unit.test.tsx +0 -568
- package/src/components/DataTable/core/__tests__/ActionManager.unit.test.ts +0 -405
- package/src/components/DataTable/core/__tests__/ArchitectureIntegration.unit.test.tsx +0 -445
- package/src/components/DataTable/core/__tests__/ColumnFactory.unit.test.ts +0 -288
- package/src/components/DataTable/core/__tests__/ColumnManager.unit.test.ts +0 -623
- package/src/components/DataTable/core/__tests__/DataManager.unit.test.ts +0 -431
- package/src/components/DataTable/core/__tests__/DataTableContext.unit.test.tsx +0 -433
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.unit.test.ts +0 -422
- package/src/components/DataTable/core/__tests__/PluginRegistry.unit.test.tsx +0 -207
- package/src/components/DataTable/core/__tests__/StateManager.unit.test.ts +0 -278
- package/src/components/DataTable/examples/__tests__/PerformanceExample.unit.test.tsx +0 -281
- package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.unit.test.ts +0 -407
- package/src/components/DataTable/hooks/__tests__/useColumnReordering.unit.test.ts +0 -679
- package/src/components/DataTable/utils/__tests__/debugTools.unit.test.ts +0 -267
- package/src/components/DataTable/utils/__tests__/errorHandling.unit.test.ts +0 -467
- package/src/components/DataTable/utils/__tests__/exportUtils.unit.test.ts +0 -380
- package/src/components/DataTable/utils/__tests__/flexibleImport.unit.test.ts +0 -233
- package/src/components/DataTable/utils/__tests__/performanceUtils.unit.test.ts +0 -414
- package/src/components/Dialog/__tests__/Dialog.accessibility.test.tsx +0 -521
- package/src/components/Dialog/__tests__/Dialog.auto-size.example.tsx +0 -157
- package/src/components/Dialog/__tests__/Dialog.enhanced.test.tsx +0 -538
- package/src/components/Dialog/__tests__/Dialog.unit.test.tsx +0 -1373
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -151
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.accessibility.test.tsx +0 -517
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.integration.test.tsx +0 -572
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.unit.test.tsx +0 -579
- package/src/components/EventSelector/__tests__/EventSelector.test.tsx +0 -528
- package/src/components/FileUpload/__tests__/FileUpload.integration.test.tsx +0 -992
- package/src/components/FileUpload/__tests__/FileUpload.real.test.tsx +0 -927
- package/src/components/FileUpload/__tests__/FileUpload.test.tsx +0 -855
- package/src/components/FileUpload/__tests__/FileUpload.unit.test.tsx +0 -1311
- package/src/components/FileUpload/__tests__/FileUpload.unmocked.test.tsx +0 -937
- package/src/components/Footer/__tests__/Footer.accessibility.test.tsx +0 -359
- package/src/components/Footer/__tests__/Footer.integration.test.tsx +0 -353
- package/src/components/Footer/__tests__/Footer.performance.test.tsx +0 -309
- package/src/components/Footer/__tests__/Footer.unit.test.tsx +0 -309
- package/src/components/Footer/__tests__/Footer.visual.test.tsx +0 -335
- package/src/components/Form/__tests__/Form.accessibility.test.tsx +0 -820
- package/src/components/Form/__tests__/Form.unit.test.tsx +0 -305
- package/src/components/Form/__tests__/FormErrorSummary.unit.test.tsx +0 -285
- package/src/components/Form/__tests__/FormFieldset.unit.test.tsx +0 -241
- package/src/components/Header/__tests__/Header.accessibility.test.tsx +0 -382
- package/src/components/Header/__tests__/Header.comprehensive.test.tsx +0 -509
- package/src/components/Header/__tests__/Header.unit.test.tsx +0 -335
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +0 -196
- package/src/components/InactivityWarningModal/__tests__/InactivityWarningModal.unit.test.tsx +0 -224
- package/src/components/Input/__tests__/Input.accessibility.test.tsx +0 -632
- package/src/components/Input/__tests__/Input.unit.test.tsx +0 -1121
- package/src/components/Label/__tests__/Label.accessibility.test.tsx +0 -239
- package/src/components/Label/__tests__/Label.unit.test.tsx +0 -331
- package/src/components/LoadingSpinner/__tests__/LoadingSpinner.accessibility.test.tsx +0 -116
- package/src/components/LoadingSpinner/__tests__/LoadingSpinner.unit.test.tsx +0 -144
- package/src/components/LoginForm/__tests__/LoginForm.accessibility.test.tsx +0 -201
- package/src/components/LoginForm/__tests__/LoginForm.unit.test.tsx +0 -119
- package/src/components/NavigationMenu/__tests__/NavigationMenu.accessibility.test.tsx +0 -378
- package/src/components/NavigationMenu/__tests__/NavigationMenu.enhanced.test.tsx +0 -768
- package/src/components/NavigationMenu/__tests__/NavigationMenu.integration.test.tsx +0 -576
- package/src/components/NavigationMenu/__tests__/NavigationMenu.performance.test.tsx +0 -585
- package/src/components/NavigationMenu/__tests__/NavigationMenu.real.component.test.tsx +0 -783
- package/src/components/NavigationMenu/__tests__/NavigationMenu.security.enhanced.test.tsx +0 -810
- package/src/components/NavigationMenu/__tests__/NavigationMenu.security.test.tsx +0 -494
- package/src/components/NavigationMenu/__tests__/NavigationMenu.unit.test.tsx +0 -331
- package/src/components/NavigationMenu/__tests__/NavigationMenu.userWorkflows.test.tsx +0 -347
- package/src/components/NavigationMenu/__tests__/NavigationMenu.workflows.test.tsx +0 -584
- package/src/components/OrganisationSelector/__tests__/OrganisationSelector.unit.test.tsx +0 -664
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -288
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +0 -893
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +0 -629
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +0 -782
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -904
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.accessibility.test.tsx +0 -463
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.integration.test.tsx +0 -586
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.unit.test.tsx +0 -533
- package/src/components/PasswordReset/__tests__/PasswordChangeForm.accessibility.test.tsx +0 -408
- package/src/components/PasswordReset/__tests__/PasswordChangeForm.unit.test.tsx +0 -561
- package/src/components/PasswordReset/__tests__/PasswordReset.integration.test.tsx +0 -304
- package/src/components/PasswordReset/__tests__/PasswordResetForm.accessibility.test.tsx +0 -20
- package/src/components/PasswordReset/__tests__/PasswordResetForm.unit.test.tsx +0 -523
- package/src/components/PasswordReset/__tests__/__mocks__/UnifiedAuthProvider.ts +0 -29
- package/src/components/Print/__tests__/Print.comprehensive.test.tsx +0 -331
- package/src/components/PrintButton/__tests__/PrintButton.unit.test.tsx +0 -429
- package/src/components/PrintButton/__tests__/PrintButtonGroup.unit.test.tsx +0 -277
- package/src/components/PrintButton/__tests__/PrintToolbar.unit.test.tsx +0 -264
- package/src/components/PrintCard/__tests__/PrintCard.unit.test.tsx +0 -233
- package/src/components/PrintCard/__tests__/PrintCardContent.test.tsx +0 -284
- package/src/components/PrintCard/__tests__/PrintCardGrid.unit.test.tsx +0 -214
- package/src/components/PrintCard/__tests__/PrintCardImage.unit.test.tsx +0 -264
- package/src/components/PrintDataTable/__tests__/PrintDataTable.unit.test.tsx +0 -361
- package/src/components/PrintDataTable/__tests__/PrintTableGroup.unit.test.tsx +0 -314
- package/src/components/PrintDataTable/__tests__/PrintTableRow.unit.test.tsx +0 -362
- package/src/components/PrintFooter/__tests__/PrintFooter.unit.test.tsx +0 -500
- package/src/components/PrintFooter/__tests__/PrintFooterContent.unit.test.tsx +0 -321
- package/src/components/PrintFooter/__tests__/PrintFooterInfo.unit.test.tsx +0 -335
- package/src/components/PrintFooter/__tests__/PrintPageNumber.unit.test.tsx +0 -340
- package/src/components/PrintGrid/__tests__/PrintGrid.unit.test.tsx +0 -340
- package/src/components/PrintGrid/__tests__/PrintGridBreakpoint.unit.test.tsx +0 -261
- package/src/components/PrintGrid/__tests__/PrintGridContainer.unit.test.tsx +0 -338
- package/src/components/PrintGrid/__tests__/PrintGridItem.unit.test.tsx +0 -338
- package/src/components/PrintHeader/__tests__/PrintCoverHeader.unit.test.tsx +0 -309
- package/src/components/PrintHeader/__tests__/PrintHeader.unit.test.tsx +0 -202
- package/src/components/PrintLayout/__tests__/PrintLayout.unit.test.tsx +0 -238
- package/src/components/PrintPageBreak/__tests__/PrintPageBreak.unit.test.tsx +0 -263
- package/src/components/PrintPageBreak/__tests__/PrintPageBreakGroup.unit.test.tsx +0 -239
- package/src/components/PrintPageBreak/__tests__/PrintPageBreakIndicator.unit.test.tsx +0 -235
- package/src/components/PrintSection/__tests__/PrintColumn.unit.test.tsx +0 -385
- package/src/components/PrintSection/__tests__/PrintDivider.unit.test.tsx +0 -373
- package/src/components/PrintSection/__tests__/PrintSection.unit.test.tsx +0 -390
- package/src/components/PrintSection/__tests__/PrintSectionContent.unit.test.tsx +0 -321
- package/src/components/PrintSection/__tests__/PrintSectionHeader.unit.test.tsx +0 -334
- package/src/components/PrintText/__tests__/PrintText.unit.test.tsx +0 -351
- package/src/components/Progress/__tests__/Progress.accessibility.test.tsx +0 -240
- package/src/components/Progress/__tests__/Progress.unit.test.tsx +0 -242
- package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +0 -761
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.simplified.test.tsx +0 -228
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -228
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -459
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -362
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -522
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -599
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -513
- package/src/components/RBAC/__tests__/PagePermissionGuard.unit.test.tsx +0 -683
- package/src/components/RBAC/__tests__/RBAC.integration.test.tsx +0 -573
- package/src/components/RBAC/__tests__/RBACGuard.unit.test.tsx +0 -467
- package/src/components/RBAC/__tests__/RBACProvider.accessibility.test.tsx +0 -475
- package/src/components/RBAC/__tests__/RBACProvider.advanced.test.tsx +0 -569
- package/src/components/RBAC/__tests__/RBACProvider.integration.test.tsx +0 -352
- package/src/components/RBAC/__tests__/RBACProvider.unit.test.tsx +0 -128
- package/src/components/RBAC/__tests__/RoleBasedContent.unit.test.tsx +0 -657
- package/src/components/Select/__tests__/SearchableSelect.unit.test.tsx +0 -437
- package/src/components/Select/__tests__/Select.accessibility.test.tsx +0 -1202
- package/src/components/Select/__tests__/Select.actual.test.tsx +0 -774
- package/src/components/Select/__tests__/Select.comprehensive.test.tsx +0 -837
- package/src/components/Select/__tests__/Select.enhanced.test.tsx +0 -1101
- package/src/components/Select/__tests__/Select.integration.test.tsx +0 -772
- package/src/components/Select/__tests__/Select.performance.test.tsx +0 -695
- package/src/components/Select/__tests__/Select.real-world.test.tsx +0 -1046
- package/src/components/Select/__tests__/Select.search-algorithms.test.tsx +0 -968
- package/src/components/Select/__tests__/Select.unit.test.tsx +0 -647
- package/src/components/Select/__tests__/Select.utils.test.tsx +0 -890
- package/src/components/Table/__tests__/Table.accessibility.test.tsx +0 -233
- package/src/components/Table/__tests__/Table.unit.test.tsx +0 -235
- package/src/components/Toast/__tests__/Toast.accessibility.test.tsx +0 -238
- package/src/components/Toast/__tests__/Toast.integration.test.tsx +0 -699
- package/src/components/Toast/__tests__/Toast.unit.test.tsx +0 -750
- package/src/components/Tooltip/__tests__/Tooltip.accessibility.test.tsx +0 -121
- package/src/components/Tooltip/__tests__/Tooltip.unit.test.tsx +0 -185
- package/src/components/UserMenu/__tests__/UserMenu.accessibility.test.tsx +0 -139
- package/src/components/UserMenu/__tests__/UserMenu.integration.test.tsx +0 -188
- package/src/components/UserMenu/__tests__/UserMenu.unit.test.tsx +0 -458
- package/src/components/__tests__/EdgeCaseTesting.enhanced.test.tsx +0 -524
- package/src/components/__tests__/ErrorTesting.enhanced.test.tsx +0 -455
- package/src/components/__tests__/SuperAdminGuard.test.tsx +0 -456
- package/src/components/__tests__/SuperAdminGuard.unit.test.tsx +0 -456
- package/src/components/examples/__tests__/PermissionExample.unit.test.tsx +0 -360
- package/src/hooks/__tests__/hooks.integration.test.tsx +0 -575
- package/src/hooks/__tests__/useApiFetch.unit.test.ts +0 -115
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +0 -133
- package/src/hooks/__tests__/useDebounce.unit.test.ts +0 -82
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +0 -293
- package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +0 -385
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +0 -286
- package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +0 -838
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +0 -627
- package/src/hooks/__tests__/useRBAC.unit.test.ts +0 -911
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -537
- package/src/hooks/__tests__/useToast.unit.test.tsx +0 -62
- package/src/hooks/__tests__/useZodForm.unit.test.tsx +0 -37
- package/src/hooks/public/__tests__/usePublicEvent.test.tsx +0 -397
- package/src/hooks/public/__tests__/usePublicEventLogo.test.tsx +0 -690
- package/src/hooks/public/__tests__/usePublicRouteParams.test.tsx +0 -449
- package/src/providers/__tests__/EventProvider.unit.test.tsx +0 -768
- package/src/providers/__tests__/OrganisationProvider.basic.test.tsx +0 -116
- package/src/providers/__tests__/OrganisationProvider.unit.test.tsx +0 -1312
- package/src/providers/__tests__/UnifiedAuthProvider.inactivity.test.tsx +0 -601
- package/src/providers/__tests__/UnifiedAuthProvider.unit.test.tsx +0 -683
- package/src/providers/__tests__/index.unit.test.ts +0 -78
- package/src/rbac/__tests__/PagePermissionGuard.test.tsx +0 -673
- package/src/rbac/__tests__/README.md +0 -170
- package/src/rbac/__tests__/RoleBasedRouter.test.tsx +0 -709
- package/src/rbac/__tests__/TestContext.tsx +0 -72
- package/src/rbac/__tests__/__mocks__/cache.ts +0 -144
- package/src/rbac/__tests__/__mocks__/supabase.ts +0 -152
- package/src/rbac/__tests__/adapters-hooks-comprehensive.test.tsx +0 -782
- package/src/rbac/__tests__/adapters-hooks.test.tsx +0 -561
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +0 -963
- package/src/rbac/__tests__/adapters.test.tsx +0 -444
- package/src/rbac/__tests__/api.test.ts +0 -620
- package/src/rbac/__tests__/audit-observability-comprehensive.test.ts +0 -792
- package/src/rbac/__tests__/audit-observability.test.ts +0 -549
- package/src/rbac/__tests__/audit.test.ts +0 -616
- package/src/rbac/__tests__/build-contract-compliance-simple.test.ts +0 -230
- package/src/rbac/__tests__/cache-invalidation-comprehensive.test.ts +0 -889
- package/src/rbac/__tests__/cache-invalidation.test.ts +0 -457
- package/src/rbac/__tests__/cache.test.ts +0 -458
- package/src/rbac/__tests__/components-navigation-guard.enhanced.test.tsx +0 -859
- package/src/rbac/__tests__/components-navigation-guard.test.tsx +0 -895
- package/src/rbac/__tests__/components-navigation-provider.test.tsx +0 -692
- package/src/rbac/__tests__/components-page-permission-guard.test.tsx +0 -673
- package/src/rbac/__tests__/components-page-permission-provider.test.tsx +0 -614
- package/src/rbac/__tests__/components-permission-enforcer.enhanced.fixed.test.tsx +0 -836
- package/src/rbac/__tests__/components-permission-enforcer.enhanced.test.tsx +0 -837
- package/src/rbac/__tests__/components-permission-enforcer.test.tsx +0 -825
- package/src/rbac/__tests__/components-role-based-router.test.tsx +0 -709
- package/src/rbac/__tests__/components-secure-data-provider.test.tsx +0 -607
- package/src/rbac/__tests__/config.test.ts +0 -583
- package/src/rbac/__tests__/core-logic-unit.test.ts +0 -190
- package/src/rbac/__tests__/core-permission-logic-comprehensive.test.ts +0 -1467
- package/src/rbac/__tests__/core-permission-logic-fixed.test.ts +0 -151
- package/src/rbac/__tests__/core-permission-logic-simple.test.ts +0 -968
- package/src/rbac/__tests__/core-permission-logic.test.ts +0 -966
- package/src/rbac/__tests__/edge-cases-comprehensive.test.ts +0 -988
- package/src/rbac/__tests__/edge-cases.test.ts +0 -654
- package/src/rbac/__tests__/engine.test.ts +0 -361
- package/src/rbac/__tests__/engine.unit.test.ts +0 -361
- package/src/rbac/__tests__/hooks.enhanced.test.tsx +0 -979
- package/src/rbac/__tests__/hooks.fixed.test.tsx +0 -475
- package/src/rbac/__tests__/hooks.test.tsx +0 -385
- package/src/rbac/__tests__/index.test.ts +0 -269
- package/src/rbac/__tests__/integration.enhanced.test.tsx +0 -824
- package/src/rbac/__tests__/page-permission-guard-super-admin.test.tsx +0 -261
- package/src/rbac/__tests__/performance.enhanced.test.tsx +0 -724
- package/src/rbac/__tests__/permissions.test.ts +0 -383
- package/src/rbac/__tests__/requires-event.test.ts +0 -330
- package/src/rbac/__tests__/scope-isolation-comprehensive.test.ts +0 -1349
- package/src/rbac/__tests__/scope-isolation.test.ts +0 -755
- package/src/rbac/__tests__/secure-client-rls-comprehensive.test.ts +0 -592
- package/src/rbac/__tests__/secure-client-rls.test.ts +0 -377
- package/src/rbac/__tests__/security.test.ts +0 -296
- package/src/rbac/__tests__/setup.ts +0 -228
- package/src/rbac/__tests__/test-utils-enhanced.tsx +0 -400
- package/src/rbac/__tests__/types.test.ts +0 -685
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -631
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -667
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -647
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -496
- package/src/rbac/testing/__tests__/index.test.tsx +0 -342
- package/src/rbac/utils/__tests__/eventContext.test.ts +0 -428
- package/src/rbac/utils/__tests__/eventContext.unit.test.ts +0 -428
- package/src/styles/__tests__/styles.unit.test.ts +0 -164
- package/src/test-dom-cleanup.test.tsx +0 -38
- package/src/theming/__tests__/README.md +0 -335
- package/src/theming/__tests__/runtime.accessibility.test.ts +0 -474
- package/src/theming/__tests__/runtime.error.test.ts +0 -616
- package/src/theming/__tests__/runtime.integration.test.ts +0 -376
- package/src/theming/__tests__/runtime.performance.test.ts +0 -411
- package/src/theming/__tests__/runtime.unit.test.ts +0 -470
- package/src/types/__tests__/database.unit.test.ts +0 -489
- package/src/types/__tests__/guards.unit.test.ts +0 -146
- package/src/types/__tests__/index.unit.test.ts +0 -77
- package/src/types/__tests__/organisation.unit.test.ts +0 -713
- package/src/types/__tests__/rbac.unit.test.ts +0 -621
- package/src/types/__tests__/security.unit.test.ts +0 -347
- package/src/types/__tests__/supabase.unit.test.ts +0 -658
- package/src/types/__tests__/theme.unit.test.ts +0 -218
- package/src/types/__tests__/unified.unit.test.ts +0 -537
- package/src/types/__tests__/validation.unit.test.ts +0 -616
- package/src/utils/__tests__/appConfig.unit.test.ts +0 -55
- package/src/utils/__tests__/appNameResolver.unit.test.ts +0 -137
- package/src/utils/__tests__/audit.unit.test.ts +0 -69
- package/src/utils/__tests__/auth-utils.unit.test.ts +0 -70
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +0 -317
- package/src/utils/__tests__/cn.unit.test.ts +0 -34
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +0 -480
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +0 -322
- package/src/utils/__tests__/formatDate.unit.test.ts +0 -109
- package/src/utils/__tests__/formatting.unit.test.ts +0 -66
- package/src/utils/__tests__/index.unit.test.ts +0 -251
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +0 -304
- package/src/utils/__tests__/organisationContext.unit.test.ts +0 -192
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +0 -259
- package/src/utils/__tests__/permissionTypes.unit.test.ts +0 -250
- package/src/utils/__tests__/permissionUtils.unit.test.ts +0 -362
- package/src/utils/__tests__/sanitization.unit.test.ts +0 -346
- package/src/utils/__tests__/schemaUtils.unit.test.ts +0 -441
- package/src/utils/__tests__/secureDataAccess.unit.test.ts +0 -334
- package/src/utils/__tests__/secureErrors.unit.test.ts +0 -377
- package/src/utils/__tests__/secureStorage.unit.test.ts +0 -293
- package/src/utils/__tests__/security.unit.test.ts +0 -127
- package/src/utils/__tests__/securityMonitor.unit.test.ts +0 -280
- package/src/utils/__tests__/sessionTracking.unit.test.ts +0 -370
- package/src/utils/__tests__/validation.unit.test.ts +0 -84
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -571
- package/src/utils/print/__tests__/PrintDataProcessor.unit.test.ts +0 -219
- package/src/utils/print/__tests__/usePrintOptimization.unit.test.tsx +0 -353
- package/src/utils/storage/__tests__/config.unit.test.ts +0 -206
- package/src/utils/storage/__tests__/helpers.unit.test.ts +0 -648
- package/src/utils/storage/__tests__/index.unit.test.ts +0 -167
- package/src/utils/storage/__tests__/types.unit.test.ts +0 -441
- package/src/validation/__tests__/common.unit.test.ts +0 -101
- package/src/validation/__tests__/csrf.unit.test.ts +0 -302
- package/src/validation/__tests__/passwordSchema.unit.test.ts +0 -98
- package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +0 -466
- /package/dist/{DataTable-EEUDXPE5.js.map → DataTable-GX3XERFJ.js.map} +0 -0
- /package/dist/{chunk-VYG4AXYW.js.map → chunk-5EL3KHOQ.js.map} +0 -0
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { screen, waitFor } from '@testing-library/react';
|
|
3
|
-
import userEvent from '@testing-library/user-event';
|
|
4
|
-
import { axe, toHaveNoViolations } from 'jest-axe';
|
|
5
|
-
import { MemoryRouter } from 'react-router-dom';
|
|
6
|
-
import { vi } from 'vitest';
|
|
7
|
-
import '@testing-library/jest-dom';
|
|
8
|
-
import { UnifiedAuthProvider } from '../../../providers/UnifiedAuthProvider';
|
|
9
|
-
import { PaceLoginPage } from '../PaceLoginPage';
|
|
10
|
-
import { renderWithProviders, createMockSupabaseClient } from '../../../__tests__/shared';
|
|
11
|
-
|
|
12
|
-
// Extend expect to include axe matchers
|
|
13
|
-
expect.extend(toHaveNoViolations);
|
|
14
|
-
|
|
15
|
-
// Mock Supabase client
|
|
16
|
-
const mockSupabaseClient = createMockSupabaseClient();
|
|
17
|
-
|
|
18
|
-
vi.mock('@supabase/supabase-js', () => ({
|
|
19
|
-
createClient: vi.fn(() => mockSupabaseClient),
|
|
20
|
-
}));
|
|
21
|
-
|
|
22
|
-
const TestWrapper: React.FC<{ children: React.ReactNode; appName?: string }> = ({
|
|
23
|
-
children,
|
|
24
|
-
appName = "Test App"
|
|
25
|
-
}) => (
|
|
26
|
-
<MemoryRouter>
|
|
27
|
-
<UnifiedAuthProvider appName={appName} supabaseClient={mockSupabaseClient as any}>
|
|
28
|
-
<div style={{ display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100vh', gap: '2rem' }}>
|
|
29
|
-
<h1>{appName}</h1>
|
|
30
|
-
<div style={{ width: '400px' }}>
|
|
31
|
-
{children}
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
</UnifiedAuthProvider>
|
|
35
|
-
</MemoryRouter>
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
describe('PaceLoginPage Accessibility', () => {
|
|
39
|
-
beforeEach(() => {
|
|
40
|
-
vi.clearAllMocks();
|
|
41
|
-
|
|
42
|
-
mockSupabaseClient.auth.signInWithPassword.mockResolvedValue({
|
|
43
|
-
data: { user: null, session: null },
|
|
44
|
-
error: null,
|
|
45
|
-
});
|
|
46
|
-
// Ensure from method returns a proper query builder
|
|
47
|
-
mockSupabaseClient.from.mockReturnValue({
|
|
48
|
-
select: vi.fn().mockReturnThis(),
|
|
49
|
-
eq: vi.fn().mockReturnThis(),
|
|
50
|
-
single: vi.fn().mockResolvedValue({ data: null, error: null }),
|
|
51
|
-
insert: vi.fn().mockReturnThis(),
|
|
52
|
-
update: vi.fn().mockReturnThis(),
|
|
53
|
-
delete: vi.fn().mockReturnThis(),
|
|
54
|
-
});
|
|
55
|
-
// Ensure rpc method returns proper structure
|
|
56
|
-
mockSupabaseClient.rpc.mockResolvedValue({ data: null, error: null });
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
describe('WCAG Compliance', () => {
|
|
60
|
-
it('should meet WCAG 2.1 AA standards', async () => {
|
|
61
|
-
const { container } = renderWithProviders(
|
|
62
|
-
<TestWrapper appName="WCAG App">
|
|
63
|
-
<PaceLoginPage appName="WCAG App" />
|
|
64
|
-
</TestWrapper>
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
const results = await axe(container, {
|
|
68
|
-
rules: {
|
|
69
|
-
'heading-order': { enabled: false }, // Disable for demo app structure
|
|
70
|
-
'landmark-main-is-top-level': { enabled: false }, // Disable for test wrapper structure
|
|
71
|
-
'landmark-no-duplicate-main': { enabled: false }, // Disable for test wrapper structure
|
|
72
|
-
},
|
|
73
|
-
});
|
|
74
|
-
expect(results).toHaveNoViolations();
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it('should have proper color contrast ratios', async () => {
|
|
78
|
-
const { container } = renderWithProviders(
|
|
79
|
-
<TestWrapper appName="Contrast App">
|
|
80
|
-
<PaceLoginPage appName="Contrast App" />
|
|
81
|
-
</TestWrapper>
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
const results = await axe(container, {
|
|
85
|
-
rules: {
|
|
86
|
-
'heading-order': { enabled: false }, // Disable for demo app structure
|
|
87
|
-
'landmark-main-is-top-level': { enabled: false }, // Disable for test wrapper structure
|
|
88
|
-
'landmark-no-duplicate-main': { enabled: false }, // Disable for test wrapper structure
|
|
89
|
-
'color-contrast': { enabled: true },
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
expect(results).toHaveNoViolations();
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('should have proper form structure and labels', async () => {
|
|
96
|
-
renderWithProviders(
|
|
97
|
-
<TestWrapper appName="Form Structure App">
|
|
98
|
-
<PaceLoginPage appName="Form Structure App" />
|
|
99
|
-
</TestWrapper>
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
// Check for form element using test ID
|
|
103
|
-
const form = screen.getByTestId('login-form');
|
|
104
|
-
expect(form).toBeInTheDocument();
|
|
105
|
-
|
|
106
|
-
// Check for proper labels
|
|
107
|
-
const emailLabel = screen.getByText('Email');
|
|
108
|
-
const passwordLabel = screen.getByText('Password');
|
|
109
|
-
expect(emailLabel).toBeInTheDocument();
|
|
110
|
-
expect(passwordLabel).toBeInTheDocument();
|
|
111
|
-
|
|
112
|
-
// Check label associations
|
|
113
|
-
const emailInput = screen.getByPlaceholderText('Enter your email');
|
|
114
|
-
const passwordInput = screen.getByPlaceholderText('Enter your password');
|
|
115
|
-
expect(emailInput).toHaveAttribute('id', 'email');
|
|
116
|
-
expect(passwordInput).toHaveAttribute('id', 'password');
|
|
117
|
-
expect(emailLabel).toHaveAttribute('for', 'email');
|
|
118
|
-
expect(passwordLabel).toHaveAttribute('for', 'password');
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
describe('Keyboard Navigation', () => {
|
|
123
|
-
it('should support tab navigation in logical order', async () => {
|
|
124
|
-
const user = userEvent.setup();
|
|
125
|
-
|
|
126
|
-
renderWithProviders(
|
|
127
|
-
<TestWrapper appName="Keyboard Navigation App">
|
|
128
|
-
<PaceLoginPage appName="Keyboard Navigation App" />
|
|
129
|
-
</TestWrapper>
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
const emailInput = screen.getByPlaceholderText('Enter your email');
|
|
133
|
-
const passwordInput = screen.getByPlaceholderText('Enter your password');
|
|
134
|
-
const signInButton = screen.getByRole('button', { name: /sign in/i });
|
|
135
|
-
|
|
136
|
-
// Start with email input focused
|
|
137
|
-
emailInput.focus();
|
|
138
|
-
expect(emailInput).toHaveFocus();
|
|
139
|
-
|
|
140
|
-
// Tab to password input
|
|
141
|
-
await user.tab();
|
|
142
|
-
expect(passwordInput).toHaveFocus();
|
|
143
|
-
|
|
144
|
-
// Tab to sign in button (but it's disabled, so focus may not work)
|
|
145
|
-
await user.tab();
|
|
146
|
-
// Note: Disabled buttons are not focusable, so we just verify the button exists
|
|
147
|
-
expect(signInButton).toBeInTheDocument();
|
|
148
|
-
|
|
149
|
-
// Tab should cycle back to email input
|
|
150
|
-
await user.tab();
|
|
151
|
-
expect(emailInput).toHaveFocus();
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('should handle reverse keyboard navigation elements', async () => {
|
|
155
|
-
const user = userEvent.setup();
|
|
156
|
-
|
|
157
|
-
renderWithProviders(
|
|
158
|
-
<TestWrapper appName="Reverse Navigation App">
|
|
159
|
-
<PaceLoginPage appName="Reverse Navigation App" />
|
|
160
|
-
</TestWrapper>
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
const emailInput = screen.getByPlaceholderText('Enter your email');
|
|
164
|
-
const passwordInput = screen.getByPlaceholderText('Enter your password');
|
|
165
|
-
const signInButton = screen.getByRole('button', { name: /sign in/i });
|
|
166
|
-
|
|
167
|
-
// Test that all elements are present and can be focused
|
|
168
|
-
emailInput.focus();
|
|
169
|
-
expect(emailInput).toHaveFocus();
|
|
170
|
-
|
|
171
|
-
passwordInput.focus();
|
|
172
|
-
expect(passwordInput).toHaveFocus();
|
|
173
|
-
|
|
174
|
-
// Test that shift+tab keyboard events don't cause errors
|
|
175
|
-
await user.keyboard('{Shift>}{Tab}{/Shift}');
|
|
176
|
-
|
|
177
|
-
// Test that elements remain accessible and focusable
|
|
178
|
-
expect(emailInput).toBeInTheDocument();
|
|
179
|
-
expect(passwordInput).toBeInTheDocument();
|
|
180
|
-
expect(signInButton).toBeInTheDocument();
|
|
181
|
-
|
|
182
|
-
// Verify we can still focus elements manually
|
|
183
|
-
emailInput.focus();
|
|
184
|
-
expect(emailInput).toHaveFocus();
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('should support enter key for form submission', async () => {
|
|
188
|
-
const user = userEvent.setup();
|
|
189
|
-
|
|
190
|
-
renderWithProviders(
|
|
191
|
-
<TestWrapper appName="Enter Key App">
|
|
192
|
-
<PaceLoginPage appName="Enter Key App" />
|
|
193
|
-
</TestWrapper>
|
|
194
|
-
);
|
|
195
|
-
|
|
196
|
-
const emailInput = screen.getByPlaceholderText('Enter your email');
|
|
197
|
-
const passwordInput = screen.getByPlaceholderText('Enter your password');
|
|
198
|
-
|
|
199
|
-
// Fill out the form
|
|
200
|
-
await user.type(emailInput, 'test@example.com');
|
|
201
|
-
await user.type(passwordInput, 'password123');
|
|
202
|
-
|
|
203
|
-
// Press enter on password input should submit the form
|
|
204
|
-
await user.keyboard('{Enter}');
|
|
205
|
-
|
|
206
|
-
await waitFor(() => {
|
|
207
|
-
expect(mockSupabaseClient.auth.signInWithPassword).toHaveBeenCalled();
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
describe('Screen Reader Support', () => {
|
|
213
|
-
it('should have proper ARIA labels and descriptions', () => {
|
|
214
|
-
renderWithProviders(
|
|
215
|
-
<TestWrapper appName="ARIA App">
|
|
216
|
-
<PaceLoginPage appName="ARIA App" />
|
|
217
|
-
</TestWrapper>
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
// Check for proper heading structure
|
|
221
|
-
const heading = screen.getByRole('heading', { level: 3 });
|
|
222
|
-
expect(heading).toBeInTheDocument();
|
|
223
|
-
expect(heading).toHaveTextContent('Sign in to ARIA App');
|
|
224
|
-
|
|
225
|
-
// Check for descriptive text
|
|
226
|
-
const description = screen.getByText('Enter your credentials to continue.');
|
|
227
|
-
expect(description).toBeInTheDocument();
|
|
228
|
-
|
|
229
|
-
// Check input labels
|
|
230
|
-
const emailInput = screen.getByLabelText('Email');
|
|
231
|
-
const passwordInput = screen.getByLabelText('Password');
|
|
232
|
-
expect(emailInput).toBeInTheDocument();
|
|
233
|
-
expect(passwordInput).toBeInTheDocument();
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
it('should announce loading state to screen readers', async () => {
|
|
237
|
-
const user = userEvent.setup();
|
|
238
|
-
|
|
239
|
-
// Mock a slow sign-in response
|
|
240
|
-
mockSupabaseClient.auth.signInWithPassword.mockImplementation(() =>
|
|
241
|
-
new Promise(resolve => {
|
|
242
|
-
setTimeout(() => {
|
|
243
|
-
resolve({ data: { user: null, session: null }, error: null });
|
|
244
|
-
}, 100);
|
|
245
|
-
})
|
|
246
|
-
);
|
|
247
|
-
|
|
248
|
-
renderWithProviders(
|
|
249
|
-
<TestWrapper appName="Loading Announcement App">
|
|
250
|
-
<PaceLoginPage appName="Loading Announcement App" />
|
|
251
|
-
</TestWrapper>
|
|
252
|
-
);
|
|
253
|
-
|
|
254
|
-
const emailInput = screen.getByPlaceholderText('Enter your email');
|
|
255
|
-
const passwordInput = screen.getByPlaceholderText('Enter your password');
|
|
256
|
-
const signInButton = screen.getByRole('button', { name: /sign in/i });
|
|
257
|
-
|
|
258
|
-
// Fill out the form
|
|
259
|
-
await user.type(emailInput, 'test@example.com');
|
|
260
|
-
await user.type(passwordInput, 'password123');
|
|
261
|
-
await user.click(signInButton);
|
|
262
|
-
|
|
263
|
-
// Check that sign-in was called
|
|
264
|
-
await waitFor(() => {
|
|
265
|
-
expect(mockSupabaseClient.auth.signInWithPassword).toHaveBeenCalled();
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
// Button should remain present
|
|
269
|
-
expect(signInButton).toBeInTheDocument();
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
it('should announce error messages to screen readers', async () => {
|
|
273
|
-
const user = userEvent.setup();
|
|
274
|
-
|
|
275
|
-
// Mock an error response
|
|
276
|
-
mockSupabaseClient.auth.signInWithPassword.mockResolvedValue({
|
|
277
|
-
data: { user: null, session: null },
|
|
278
|
-
error: { message: 'Invalid credentials' },
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
renderWithProviders(
|
|
282
|
-
<TestWrapper appName="Error Announcement App">
|
|
283
|
-
<PaceLoginPage appName="Error Announcement App" />
|
|
284
|
-
</TestWrapper>
|
|
285
|
-
);
|
|
286
|
-
|
|
287
|
-
const emailInput = screen.getByPlaceholderText('Enter your email');
|
|
288
|
-
const passwordInput = screen.getByPlaceholderText('Enter your password');
|
|
289
|
-
const signInButton = screen.getByRole('button', { name: /sign in/i });
|
|
290
|
-
|
|
291
|
-
// Fill out the form and submit
|
|
292
|
-
await user.type(emailInput, 'test@example.com');
|
|
293
|
-
await user.type(passwordInput, 'wrongpassword');
|
|
294
|
-
await user.click(signInButton);
|
|
295
|
-
|
|
296
|
-
// Error should be announced
|
|
297
|
-
await waitFor(() => {
|
|
298
|
-
expect(mockSupabaseClient.auth.signInWithPassword).toHaveBeenCalled();
|
|
299
|
-
});
|
|
300
|
-
});
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
describe('Focus Management', () => {
|
|
304
|
-
it('should maintain focus within the form', async () => {
|
|
305
|
-
const user = userEvent.setup();
|
|
306
|
-
|
|
307
|
-
renderWithProviders(
|
|
308
|
-
<TestWrapper appName="Focus Management App">
|
|
309
|
-
<PaceLoginPage appName="Focus Management App" />
|
|
310
|
-
</TestWrapper>
|
|
311
|
-
);
|
|
312
|
-
|
|
313
|
-
const emailInput = screen.getByPlaceholderText('Enter your email');
|
|
314
|
-
const passwordInput = screen.getByPlaceholderText('Enter your password');
|
|
315
|
-
const signInButton = screen.getByRole('button', { name: /sign in/i });
|
|
316
|
-
|
|
317
|
-
// Start with email input
|
|
318
|
-
emailInput.focus();
|
|
319
|
-
expect(emailInput).toHaveFocus();
|
|
320
|
-
|
|
321
|
-
// Tab through form elements
|
|
322
|
-
await user.tab();
|
|
323
|
-
expect(passwordInput).toHaveFocus();
|
|
324
|
-
|
|
325
|
-
await user.tab();
|
|
326
|
-
// Note: Disabled button may not be focusable
|
|
327
|
-
expect(signInButton).toBeInTheDocument();
|
|
328
|
-
|
|
329
|
-
// Tab again should cycle back to email input
|
|
330
|
-
await user.tab();
|
|
331
|
-
expect(emailInput).toHaveFocus();
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
it('should restore focus after error dismissal', async () => {
|
|
335
|
-
const user = userEvent.setup();
|
|
336
|
-
|
|
337
|
-
// Mock an error response
|
|
338
|
-
mockSupabaseClient.auth.signInWithPassword.mockResolvedValue({
|
|
339
|
-
data: { user: null, session: null },
|
|
340
|
-
error: { message: 'Invalid credentials' },
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
renderWithProviders(
|
|
344
|
-
<TestWrapper appName="Focus Restoration App">
|
|
345
|
-
<PaceLoginPage appName="Focus Restoration App" />
|
|
346
|
-
</TestWrapper>
|
|
347
|
-
);
|
|
348
|
-
|
|
349
|
-
const emailInput = screen.getByPlaceholderText('Enter your email');
|
|
350
|
-
const passwordInput = screen.getByPlaceholderText('Enter your password');
|
|
351
|
-
const signInButton = screen.getByRole('button', { name: /sign in/i });
|
|
352
|
-
|
|
353
|
-
// Fill out the form and submit
|
|
354
|
-
await user.type(emailInput, 'test@example.com');
|
|
355
|
-
await user.type(passwordInput, 'wrongpassword');
|
|
356
|
-
await user.click(signInButton);
|
|
357
|
-
|
|
358
|
-
// Wait for error to be processed
|
|
359
|
-
await waitFor(() => {
|
|
360
|
-
expect(mockSupabaseClient.auth.signInWithPassword).toHaveBeenCalled();
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
// Focus should be maintained on the form
|
|
364
|
-
expect(emailInput).toBeInTheDocument();
|
|
365
|
-
expect(passwordInput).toBeInTheDocument();
|
|
366
|
-
expect(signInButton).toBeInTheDocument();
|
|
367
|
-
});
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
describe('Responsive Design Accessibility', () => {
|
|
371
|
-
it('should be accessible on different screen sizes', async () => {
|
|
372
|
-
// Set mobile viewport
|
|
373
|
-
Object.defineProperty(window, 'innerWidth', {
|
|
374
|
-
writable: true,
|
|
375
|
-
configurable: true,
|
|
376
|
-
value: 375,
|
|
377
|
-
});
|
|
378
|
-
|
|
379
|
-
const { container } = renderWithProviders(
|
|
380
|
-
<TestWrapper appName="Mobile Accessibility App">
|
|
381
|
-
<PaceLoginPage appName="Mobile Accessibility App" />
|
|
382
|
-
</TestWrapper>
|
|
383
|
-
);
|
|
384
|
-
|
|
385
|
-
// Test with axe-core, excluding heading order for demo purposes
|
|
386
|
-
const results = await axe(container, {
|
|
387
|
-
rules: {
|
|
388
|
-
'heading-order': { enabled: false }, // Disable for demo app structure
|
|
389
|
-
'landmark-main-is-top-level': { enabled: false }, // Disable for test wrapper structure
|
|
390
|
-
'landmark-no-duplicate-main': { enabled: false }, // Disable for test wrapper structure
|
|
391
|
-
},
|
|
392
|
-
});
|
|
393
|
-
expect(results).toHaveNoViolations();
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
it('should have proper touch targets on mobile', () => {
|
|
397
|
-
// Set mobile viewport
|
|
398
|
-
Object.defineProperty(window, 'innerWidth', {
|
|
399
|
-
writable: true,
|
|
400
|
-
configurable: true,
|
|
401
|
-
value: 375,
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
renderWithProviders(
|
|
405
|
-
<TestWrapper appName="Touch Targets App">
|
|
406
|
-
<PaceLoginPage appName="Touch Targets App" />
|
|
407
|
-
</TestWrapper>
|
|
408
|
-
);
|
|
409
|
-
|
|
410
|
-
const signInButton = screen.getByRole('button', { name: /sign in/i });
|
|
411
|
-
const buttonRect = signInButton.getBoundingClientRect();
|
|
412
|
-
|
|
413
|
-
// Touch targets should be at least 44x44 pixels
|
|
414
|
-
// Note: In test environment, getBoundingClientRect may return 0
|
|
415
|
-
// This is a structural test to ensure the button exists
|
|
416
|
-
expect(signInButton).toBeInTheDocument();
|
|
417
|
-
expect(signInButton).toHaveClass('h-9'); // Check for height class
|
|
418
|
-
});
|
|
419
|
-
});
|
|
420
|
-
|
|
421
|
-
describe('Internationalization', () => {
|
|
422
|
-
it('should support RTL languages', async () => {
|
|
423
|
-
// Set RTL direction
|
|
424
|
-
document.documentElement.dir = 'rtl';
|
|
425
|
-
|
|
426
|
-
const { container } = renderWithProviders(
|
|
427
|
-
<TestWrapper appName="RTL App">
|
|
428
|
-
<PaceLoginPage appName="RTL App" />
|
|
429
|
-
</TestWrapper>
|
|
430
|
-
);
|
|
431
|
-
|
|
432
|
-
const results = await axe(container, {
|
|
433
|
-
rules: {
|
|
434
|
-
'heading-order': { enabled: false }, // Disable for demo app structure
|
|
435
|
-
'landmark-main-is-top-level': { enabled: false }, // Disable for test wrapper structure
|
|
436
|
-
'landmark-no-duplicate-main': { enabled: false }, // Disable for test wrapper structure
|
|
437
|
-
},
|
|
438
|
-
});
|
|
439
|
-
expect(results).toHaveNoViolations();
|
|
440
|
-
|
|
441
|
-
// Reset document direction
|
|
442
|
-
document.documentElement.dir = 'ltr';
|
|
443
|
-
});
|
|
444
|
-
|
|
445
|
-
it('should have proper language attributes', () => {
|
|
446
|
-
// Set language
|
|
447
|
-
document.documentElement.lang = 'es';
|
|
448
|
-
|
|
449
|
-
renderWithProviders(
|
|
450
|
-
<TestWrapper appName="Language App">
|
|
451
|
-
<PaceLoginPage appName="Language App" />
|
|
452
|
-
</TestWrapper>
|
|
453
|
-
);
|
|
454
|
-
|
|
455
|
-
// Form should inherit language from document
|
|
456
|
-
const form = screen.getByTestId('login-form');
|
|
457
|
-
expect(form).toBeInTheDocument();
|
|
458
|
-
|
|
459
|
-
// Reset language
|
|
460
|
-
document.documentElement.lang = 'en';
|
|
461
|
-
});
|
|
462
|
-
});
|
|
463
|
-
});
|