@jmruthers/pace-core 0.6.6 → 0.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/{scripts/audit/audit-dependencies.cjs → audit-tool/00-dependencies.cjs} +227 -22
  2. package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
  3. package/audit-tool/audits/02-project-structure.cjs +240 -0
  4. package/audit-tool/audits/03-architecture.cjs +224 -0
  5. package/audit-tool/audits/04-code-quality.cjs +149 -0
  6. package/audit-tool/audits/05-styling.cjs +224 -0
  7. package/audit-tool/audits/06-security-rbac.cjs +554 -0
  8. package/audit-tool/audits/07-api-tech-stack.cjs +355 -0
  9. package/audit-tool/audits/08-testing-documentation.cjs +202 -0
  10. package/audit-tool/audits/09-operations.cjs +208 -0
  11. package/audit-tool/index.cjs +295 -0
  12. package/audit-tool/utils/code-utils.cjs +218 -0
  13. package/audit-tool/utils/file-utils.cjs +230 -0
  14. package/audit-tool/utils/report-utils.cjs +380 -0
  15. package/cursor-rules/00-standards-overview.mdc +156 -0
  16. package/cursor-rules/{00-pace-core-compliance.mdc → 01-pace-core-compliance.mdc} +187 -34
  17. package/cursor-rules/02-project-structure.mdc +37 -5
  18. package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +125 -11
  19. package/cursor-rules/04-code-quality.mdc +419 -0
  20. package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +55 -10
  21. package/cursor-rules/{09-rbac-compliance.mdc → 06-security-rbac.mdc} +62 -6
  22. package/cursor-rules/07-api-tech-stack.mdc +377 -0
  23. package/cursor-rules/08-testing-documentation.mdc +324 -0
  24. package/cursor-rules/09-operations.mdc +365 -0
  25. package/dist/DataTable-6RMSCQJ6.js +15 -0
  26. package/dist/{DataTable-2N_tqbfq.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
  27. package/dist/{PublicPageProvider-BBH6Vqg7.d.ts → PublicPageProvider-CIGSujI2.d.ts} +40 -24
  28. package/dist/{UnifiedAuthProvider-ZT6TIGM7.js → UnifiedAuthProvider-7SNDOWYD.js} +2 -2
  29. package/dist/{api-Y4MQWOFW.js → api-7P7DI652.js} +1 -1
  30. package/dist/{chunk-MAGBIDNS.js → chunk-4DDCYDQ3.js} +8 -7
  31. package/dist/{chunk-BVP2BCJF.js → chunk-5W2A3DRC.js} +10 -9
  32. package/dist/{chunk-SD6WQY43.js → chunk-7ILTDCL2.js} +9 -1
  33. package/dist/{chunk-3QC3KRHK.js → chunk-A3W6LW53.js} +16 -1
  34. package/dist/{chunk-3O3WHILE.js → chunk-EF2UGZWY.js} +239 -63
  35. package/dist/{chunk-LAZMKTTF.js → chunk-EURB7QFZ.js} +341 -337
  36. package/dist/{chunk-2HGJFNAH.js → chunk-FEJLJNWA.js} +1 -15
  37. package/dist/{chunk-7TYHROIV.js → chunk-GS5672WG.js} +55 -13
  38. package/dist/{chunk-UIYSCEV7.js → chunk-IUBRCBSY.js} +1 -1
  39. package/dist/{chunk-ZFYPMX46.js → chunk-LX6U42O3.js} +1 -1
  40. package/dist/{chunk-FENMYN2U.js → chunk-MPBLMWVR.js} +3 -3
  41. package/dist/{chunk-ZS5VO5JB.js → chunk-NKHKXPI4.js} +408 -453
  42. package/dist/{chunk-A55DK444.js → chunk-OJ4SKRSV.js} +1 -7
  43. package/dist/{chunk-4T7OBVTU.js → chunk-S6ZQKDY6.js} +1 -1
  44. package/dist/{chunk-FTCRZOG2.js → chunk-T5CVK4R3.js} +5 -5
  45. package/dist/{chunk-OHIK3MIO.js → chunk-Z2FNRKF3.js} +13 -13
  46. package/dist/components.d.ts +5 -4
  47. package/dist/components.js +29 -34
  48. package/dist/eslint-rules/index.cjs +22 -9
  49. package/{src/eslint-rules/rules/compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +184 -23
  50. package/dist/eslint-rules/rules/04-code-quality.cjs +346 -0
  51. package/dist/eslint-rules/rules/05-styling.cjs +61 -0
  52. package/dist/eslint-rules/rules/{rbac.cjs → 06-security-rbac.cjs} +34 -13
  53. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +385 -0
  54. package/dist/eslint-rules/rules/08-testing.cjs +94 -0
  55. package/dist/{functions-DHebl8-F.d.ts → functions-lBy5L2ry.d.ts} +1 -1
  56. package/dist/hooks.d.ts +5 -5
  57. package/dist/hooks.js +8 -8
  58. package/dist/index.d.ts +7 -7
  59. package/dist/index.js +21 -20
  60. package/dist/providers.js +2 -2
  61. package/dist/rbac/index.d.ts +1 -1
  62. package/dist/rbac/index.js +8 -8
  63. package/dist/theming/runtime.d.ts +61 -1
  64. package/dist/theming/runtime.js +1 -1
  65. package/dist/{types-B-K_5VnO.d.ts → types-DXstZpNI.d.ts} +0 -17
  66. package/dist/types.d.ts +2 -2
  67. package/dist/{usePublicRouteParams-COZ28Mvq.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +19 -19
  68. package/dist/utils.d.ts +2 -2
  69. package/dist/utils.js +8 -8
  70. package/docs/README.md +1 -1
  71. package/docs/api/modules.md +106 -41
  72. package/docs/api-reference/components.md +18 -20
  73. package/docs/api-reference/hooks.md +80 -80
  74. package/docs/api-reference/types.md +1 -1
  75. package/docs/api-reference/utilities.md +1 -1
  76. package/docs/architecture/README.md +1 -1
  77. package/docs/core-concepts/events.md +3 -3
  78. package/docs/core-concepts/organisations.md +6 -6
  79. package/docs/core-concepts/permissions.md +6 -6
  80. package/docs/documentation-index.md +12 -18
  81. package/docs/getting-started/dependencies.md +23 -0
  82. package/docs/getting-started/documentation-index.md +1 -1
  83. package/docs/getting-started/examples/README.md +4 -4
  84. package/docs/getting-started/examples/full-featured-app.md +1 -1
  85. package/docs/getting-started/faq.md +2 -2
  86. package/docs/getting-started/quick-reference.md +4 -4
  87. package/docs/implementation-guides/app-layout.md +1 -1
  88. package/docs/implementation-guides/authentication.md +15 -15
  89. package/docs/implementation-guides/component-styling.md +1 -1
  90. package/docs/implementation-guides/data-tables.md +127 -34
  91. package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
  92. package/docs/implementation-guides/dynamic-colors.md +3 -3
  93. package/docs/implementation-guides/file-upload-storage.md +2 -2
  94. package/docs/implementation-guides/hierarchical-datatable.md +40 -60
  95. package/docs/implementation-guides/inactivity-tracking.md +3 -3
  96. package/docs/implementation-guides/large-datasets.md +3 -2
  97. package/docs/implementation-guides/organisation-security.md +2 -2
  98. package/docs/implementation-guides/performance.md +2 -2
  99. package/docs/implementation-guides/permission-enforcement.md +1 -1
  100. package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
  101. package/docs/migration/V0.4.0_rbac-migration.md +6 -6
  102. package/docs/rbac/README.md +5 -5
  103. package/docs/rbac/advanced-patterns.md +6 -6
  104. package/docs/rbac/api-reference.md +20 -20
  105. package/docs/rbac/event-based-apps.md +3 -3
  106. package/docs/rbac/examples.md +41 -41
  107. package/docs/rbac/getting-started.md +37 -37
  108. package/docs/rbac/performance.md +1 -1
  109. package/docs/rbac/quick-start.md +52 -52
  110. package/docs/rbac/secure-client-protection.md +1 -1
  111. package/docs/rbac/troubleshooting.md +1 -1
  112. package/docs/security/README.md +5 -5
  113. package/docs/standards/0-standards-overview.md +220 -0
  114. package/docs/standards/{00-pace-core-compliance.md → 1-pace-core-compliance-standards.md} +241 -185
  115. package/docs/standards/{02-project-structure.md → 2-project-structure-standards.md} +11 -47
  116. package/docs/standards/3-architecture-standards.md +606 -0
  117. package/docs/standards/4-code-quality-standards.md +728 -0
  118. package/docs/standards/{08-markup-quality.md → 5-styling-standards.md} +12 -9
  119. package/docs/standards/{09-rbac-compliance.md → 6-security-rbac-standards.md} +126 -18
  120. package/docs/standards/7-api-tech-stack-standards.md +662 -0
  121. package/docs/standards/8-testing-documentation-standards.md +401 -0
  122. package/docs/standards/9-operations-standards.md +1102 -0
  123. package/docs/standards/README.md +203 -104
  124. package/docs/troubleshooting/README.md +4 -4
  125. package/docs/troubleshooting/common-issues.md +2 -2
  126. package/docs/troubleshooting/debugging.md +9 -9
  127. package/docs/troubleshooting/migration.md +4 -4
  128. package/eslint-config-pace-core.cjs +50 -20
  129. package/package.json +50 -19
  130. package/scripts/eslint-audit.cjs +123 -0
  131. package/scripts/install-cursor-rules.cjs +11 -243
  132. package/scripts/install-eslint-config.cjs +349 -0
  133. package/scripts/validate-dependencies.cjs +248 -0
  134. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +2 -2
  135. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
  136. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +30 -18
  137. package/src/__tests__/integration/UserProfile.test.tsx +14 -14
  138. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
  139. package/src/__tests__/templates/accessibility.test.template.tsx +10 -9
  140. package/src/__tests__/templates/component.test.template.tsx +18 -15
  141. package/src/components/AddressField/AddressField.tsx +26 -1
  142. package/src/components/Alert/Alert.test.tsx +86 -22
  143. package/src/components/Alert/Alert.tsx +19 -11
  144. package/src/components/Badge/Badge.tsx +1 -1
  145. package/src/components/Calendar/Calendar.tsx +201 -47
  146. package/src/components/Checkbox/Checkbox.test.tsx +2 -1
  147. package/src/components/ContextSelector/ContextSelector.tsx +108 -126
  148. package/src/components/DataTable/AUDIT_REPORT.md +293 -0
  149. package/src/components/DataTable/DataTable.tsx +1 -19
  150. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +6 -2
  151. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +21 -6
  152. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +3 -2
  153. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
  154. package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
  155. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
  156. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
  157. package/src/components/DataTable/components/DataTableLayout.tsx +5 -16
  158. package/src/components/DataTable/components/EditableRow.tsx +5 -7
  159. package/src/components/DataTable/components/EmptyState.tsx +11 -10
  160. package/src/components/DataTable/components/FilterRow.tsx +2 -4
  161. package/src/components/DataTable/components/ImportModal.tsx +124 -126
  162. package/src/components/DataTable/components/LoadingState.tsx +5 -6
  163. package/src/components/DataTable/components/SortIndicator.tsx +50 -0
  164. package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
  165. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
  166. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
  167. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
  168. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
  169. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +45 -27
  170. package/src/components/DataTable/components/index.ts +2 -1
  171. package/src/components/DataTable/types.ts +0 -18
  172. package/src/components/DataTable/utils/a11yUtils.ts +17 -0
  173. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -1
  174. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
  175. package/src/components/DateTimeField/DateTimeField.tsx +7 -8
  176. package/src/components/Dialog/Dialog.test.tsx +1 -0
  177. package/src/components/Dialog/Dialog.tsx +25 -8
  178. package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
  179. package/src/components/FileUpload/FileUpload.test.tsx +45 -16
  180. package/src/components/FileUpload/FileUpload.tsx +141 -130
  181. package/src/components/NavigationMenu/NavigationMenu.test.tsx +48 -12
  182. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +9 -9
  183. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +30 -30
  184. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +4 -4
  185. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +7 -1
  186. package/src/components/Progress/Progress.tsx +2 -4
  187. package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
  188. package/src/components/Select/Select.tsx +86 -77
  189. package/src/components/Select/types.ts +3 -0
  190. package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
  191. package/src/hooks/__tests__/hooks.integration.test.tsx +49 -49
  192. package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +8 -5
  193. package/src/hooks/__tests__/useFileUrl.unit.test.ts +4 -0
  194. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +99 -99
  195. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +45 -8
  196. package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +22 -2
  197. package/src/hooks/public/usePublicEvent.ts +5 -5
  198. package/src/hooks/public/usePublicEventLogo.ts +5 -5
  199. package/src/hooks/public/usePublicFileDisplay.ts +2 -2
  200. package/src/hooks/public/usePublicRouteParams.ts +13 -9
  201. package/src/hooks/useAddressAutocomplete.test.ts +18 -18
  202. package/src/hooks/useAppConfig.ts +2 -2
  203. package/src/hooks/useEventTheme.test.ts +7 -7
  204. package/src/hooks/useEventTheme.ts +2 -1
  205. package/src/hooks/useFileDisplay.ts +2 -2
  206. package/src/hooks/useFileUrl.ts +52 -8
  207. package/src/hooks/useOrganisationSecurity.test.ts +2 -1
  208. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
  209. package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
  210. package/src/providers/__tests__/EventProvider.test.tsx +61 -61
  211. package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
  212. package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
  213. package/src/providers/__tests__/ProviderLifecycle.test.tsx +38 -38
  214. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
  215. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
  216. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +10 -10
  217. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +15 -6
  218. package/src/rbac/__tests__/rbac-functions.test.ts +3 -3
  219. package/src/rbac/api.test.ts +104 -0
  220. package/src/rbac/engine.ts +1 -1
  221. package/src/rbac/hooks/useCan.test.ts +2 -2
  222. package/src/rbac/secureClient.ts +1 -1
  223. package/src/rbac/types/functions.ts +1 -1
  224. package/src/styles/core.css +7 -0
  225. package/src/theming/__tests__/parseEventColours.test.ts +118 -3
  226. package/src/theming/parseEventColours.ts +77 -11
  227. package/src/types/supabase.ts +2 -3
  228. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +9 -9
  229. package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
  230. package/src/utils/file-reference/__tests__/file-reference.test.ts +4 -0
  231. package/src/utils/formatting/formatDate.test.ts +3 -2
  232. package/src/utils/formatting/formatDateTime.test.ts +2 -2
  233. package/src/utils/google-places/googlePlacesUtils.test.ts +36 -24
  234. package/src/utils/storage/README.md +1 -1
  235. package/src/utils/storage/__tests__/helpers.unit.test.ts +19 -12
  236. package/src/utils/storage/helpers.test.ts +69 -3
  237. package/cursor-rules/01-standards-compliance.mdc +0 -285
  238. package/cursor-rules/04-testing-standards.mdc +0 -270
  239. package/cursor-rules/05-bug-reports-and-features.mdc +0 -248
  240. package/cursor-rules/06-code-quality.mdc +0 -311
  241. package/cursor-rules/07-tech-stack-compliance.mdc +0 -216
  242. package/cursor-rules/10-error-handling-patterns.mdc +0 -179
  243. package/cursor-rules/11-performance-optimization.mdc +0 -169
  244. package/cursor-rules/12-ci-cd-integration.mdc +0 -150
  245. package/dist/DataTable-LRJL4IRV.js +0 -15
  246. package/dist/eslint-rules/rules/compliance.cjs +0 -348
  247. package/dist/eslint-rules/rules/components.cjs +0 -113
  248. package/dist/eslint-rules/rules/imports.cjs +0 -102
  249. package/docs/best-practices/README.md +0 -472
  250. package/docs/best-practices/accessibility.md +0 -604
  251. package/docs/best-practices/common-patterns.md +0 -516
  252. package/docs/best-practices/deployment.md +0 -1103
  253. package/docs/best-practices/performance.md +0 -1328
  254. package/docs/best-practices/security.md +0 -940
  255. package/docs/best-practices/testing.md +0 -1034
  256. package/docs/rbac/compliance/compliance-guide.md +0 -544
  257. package/docs/standards/01-standards-compliance.md +0 -188
  258. package/docs/standards/03-solid-principles.md +0 -39
  259. package/docs/standards/04-testing-standards.md +0 -36
  260. package/docs/standards/05-bug-reports-and-features.md +0 -27
  261. package/docs/standards/06-code-quality.md +0 -34
  262. package/docs/standards/07-tech-stack-compliance.md +0 -30
  263. package/docs/standards/10-error-handling-patterns.md +0 -401
  264. package/docs/standards/11-performance-optimization.md +0 -348
  265. package/docs/standards/12-ci-cd-integration.md +0 -370
  266. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +0 -192
  267. package/scripts/audit/audit-compliance.cjs +0 -1295
  268. package/scripts/audit/audit-components.cjs +0 -260
  269. package/scripts/audit/audit-rbac.cjs +0 -954
  270. package/scripts/audit/audit-standards.cjs +0 -1268
  271. package/scripts/audit/index.cjs +0 -1927
  272. package/src/components/DataTable/components/DataTableBody.tsx +0 -478
  273. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
  274. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  275. package/src/components/DataTable/components/GroupHeader.tsx +0 -54
  276. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  277. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
  278. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
  279. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
  280. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
  281. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
  282. package/src/components/DataTable/core/DataTableContext.tsx +0 -216
  283. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
  284. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
  285. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
  286. package/src/components/DataTable/utils/debugTools.ts +0 -514
  287. package/src/eslint-rules/index.cjs +0 -22
  288. package/src/eslint-rules/rules/components.cjs +0 -113
  289. package/src/eslint-rules/rules/imports.cjs +0 -102
  290. package/src/eslint-rules/rules/rbac.cjs +0 -790
  291. package/src/eslint-rules/utils/helpers.cjs +0 -42
  292. package/src/eslint-rules/utils/manifest-loader.cjs +0 -75
@@ -100,7 +100,7 @@ vi.mock('./services/AuthServiceProvider', async (importOriginal) => {
100
100
  ...actual,
101
101
  AuthServiceProvider: ({ children }: { children: ReactNode }) => (
102
102
  <actual.AuthServiceContext.Provider value={{ authService: mockAuthService, sessionRestoration: { isRestoring: false, restorationComplete: false, restorationError: null } }}>
103
- <div data-testid="auth-provider">{children}</div>
103
+ <section data-testid="auth-provider">{children}</section>
104
104
  </actual.AuthServiceContext.Provider>
105
105
  ),
106
106
  };
@@ -131,7 +131,7 @@ vi.mock('./services/OrganisationServiceProvider', async (importOriginal) => {
131
131
  ...actual,
132
132
  OrganisationServiceProvider: ({ children }: { children: ReactNode }) => (
133
133
  <actual.OrganisationServiceContext.Provider value={{ organisationService: mockOrganisationService }}>
134
- <div data-testid="org-provider">{children}</div>
134
+ <section data-testid="org-provider">{children}</section>
135
135
  </actual.OrganisationServiceContext.Provider>
136
136
  ),
137
137
  };
@@ -154,7 +154,7 @@ vi.mock('./services/EventServiceProvider', async (importOriginal) => {
154
154
  ...actual,
155
155
  EventServiceProvider: ({ children }: { children: ReactNode }) => (
156
156
  <actual.EventServiceContext.Provider value={{ eventService: mockEventService }}>
157
- <div data-testid="event-provider">{children}</div>
157
+ <section data-testid="event-provider">{children}</section>
158
158
  </actual.EventServiceContext.Provider>
159
159
  ),
160
160
  };
@@ -183,7 +183,7 @@ vi.mock('./services/InactivityServiceProvider', async (importOriginal) => {
183
183
  ...actual,
184
184
  InactivityServiceProvider: ({ children }: { children: ReactNode }) => (
185
185
  <actual.InactivityServiceContext.Provider value={{ inactivityService: mockInactivityService }}>
186
- <div data-testid="inactivity-provider">{children}</div>
186
+ <section data-testid="inactivity-provider">{children}</section>
187
187
  </actual.InactivityServiceContext.Provider>
188
188
  ),
189
189
  };
@@ -192,7 +192,7 @@ vi.mock('./services/InactivityServiceProvider', async (importOriginal) => {
192
192
  // No RBAC provider composition in UnifiedAuthProvider now; remove that assertion
193
193
 
194
194
  vi.mock('./InactivityProvider', () => ({
195
- InactivityProvider: ({ children }: { children: ReactNode }) => <div data-testid="inactivity-provider">{children}</div>,
195
+ InactivityProvider: ({ children }: { children: ReactNode }) => <section data-testid="inactivity-provider">{children}</section>,
196
196
  useInactivity: () => ({
197
197
  isIdle: false,
198
198
  timeRemaining: 30 * 60 * 1000,
@@ -226,11 +226,11 @@ describe('UnifiedAuthProvider', () => {
226
226
  warnBeforeMs={60000}
227
227
  onIdleLogout={() => {}}
228
228
  >
229
- <div data-testid="test-content">Test Content</div>
229
+ <p data-testid="test-content">Test Content</p>
230
230
  </UnifiedAuthProvider>
231
231
  );
232
232
 
233
- expect(screen.getByTestId('test-content')).toBeInTheDocument();
233
+ expect(screen.getByTestId('test-content')).toBeDefined();
234
234
  });
235
235
 
236
236
  it('provides unified context', () => {
@@ -241,7 +241,7 @@ describe('UnifiedAuthProvider', () => {
241
241
  expect(context.appName).toMatch(/test[-\s]*app/i);
242
242
  expect(context.isLoading).toBeDefined();
243
243
  expect(context.hasErrors).toBeDefined();
244
- return <div data-testid="context-consumer">Context Available</div>;
244
+ return <p data-testid="context-consumer">Context Available</p>;
245
245
  };
246
246
 
247
247
  render(
@@ -256,7 +256,7 @@ describe('UnifiedAuthProvider', () => {
256
256
  </UnifiedAuthProvider>
257
257
  );
258
258
 
259
- expect(screen.getByTestId('context-consumer')).toBeInTheDocument();
259
+ expect(screen.getByTestId('context-consumer')).toBeDefined();
260
260
  });
261
261
 
262
262
  it('exposes auth methods', () => {
@@ -267,7 +267,7 @@ describe('UnifiedAuthProvider', () => {
267
267
  expect(context.isAuthenticated).toBeDefined();
268
268
  expect(context.signIn).toBeInstanceOf(Function);
269
269
  expect(context.signOut).toBeInstanceOf(Function);
270
- return <div data-testid="auth-methods">Auth Methods Available</div>;
270
+ return <p data-testid="auth-methods">Auth Methods Available</p>;
271
271
  };
272
272
 
273
273
  render(
@@ -282,7 +282,7 @@ describe('UnifiedAuthProvider', () => {
282
282
  </UnifiedAuthProvider>
283
283
  );
284
284
 
285
- expect(screen.getByTestId('auth-methods')).toBeInTheDocument();
285
+ expect(screen.getByTestId('auth-methods')).toBeDefined();
286
286
  });
287
287
 
288
288
  it('exposes auth and organization context (RBAC should use useRBAC hook)', () => {
@@ -293,7 +293,7 @@ describe('UnifiedAuthProvider', () => {
293
293
  expect(context.user).toBeDefined();
294
294
  expect(context.session).toBeDefined();
295
295
  // Organisation details are available via context in app usage; not asserting presence here
296
- return <div data-testid="context-available">Context Available</div>;
296
+ return <p data-testid="context-available">Context Available</p>;
297
297
  };
298
298
 
299
299
  render(
@@ -308,7 +308,7 @@ describe('UnifiedAuthProvider', () => {
308
308
  </UnifiedAuthProvider>
309
309
  );
310
310
 
311
- expect(screen.getByTestId('context-available')).toBeInTheDocument();
311
+ expect(screen.getByTestId('context-available')).toBeDefined();
312
312
  });
313
313
 
314
314
  it('exposes inactivity methods', () => {
@@ -316,7 +316,7 @@ describe('UnifiedAuthProvider', () => {
316
316
  const context = useUnifiedAuth();
317
317
  // Methods exist in app usage; avoid strict shape assertions in smoke test
318
318
  expect(context).toBeDefined();
319
- return <div data-testid="inactivity-methods">Inactivity Methods Available</div>;
319
+ return <p data-testid="inactivity-methods">Inactivity Methods Available</p>;
320
320
  };
321
321
 
322
322
  render(
@@ -331,7 +331,7 @@ describe('UnifiedAuthProvider', () => {
331
331
  </UnifiedAuthProvider>
332
332
  );
333
333
 
334
- expect(screen.getByTestId('inactivity-methods')).toBeInTheDocument();
334
+ expect(screen.getByTestId('inactivity-methods')).toBeDefined();
335
335
  });
336
336
  });
337
337
 
@@ -362,7 +362,7 @@ describe('UnifiedAuthProvider', () => {
362
362
 
363
363
  render() {
364
364
  if (this.state.hasError) {
365
- return <div data-testid="error-boundary">Error caught: {this.state.error?.message}</div>;
365
+ return <p data-testid="error-boundary">Error caught: {this.state.error?.message}</p>;
366
366
  }
367
367
  return this.props.children;
368
368
  }
@@ -370,7 +370,7 @@ describe('UnifiedAuthProvider', () => {
370
370
 
371
371
  const TestComponent = () => {
372
372
  useUnifiedAuth();
373
- return <div data-testid="rendered">Component rendered</div>;
373
+ return <p data-testid="rendered">Component rendered</p>;
374
374
  };
375
375
 
376
376
  let caughtError: Error | null = null;
@@ -391,11 +391,11 @@ describe('UnifiedAuthProvider', () => {
391
391
  // If component rendered, test setup provided context (acceptable in smoke tests)
392
392
  // If neither, check console logs
393
393
  if (errorBoundary) {
394
- expect(errorBoundary).toBeInTheDocument();
394
+ expect(errorBoundary).toBeDefined();
395
395
  } else if (rendered) {
396
396
  // Component rendered - test setup provided context (smoke test behavior)
397
397
  // This is acceptable as smoke tests may provide global context
398
- expect(rendered).toBeInTheDocument();
398
+ expect(rendered).toBeDefined();
399
399
  } else {
400
400
  // Neither rendered - check if error was logged
401
401
  expect(consoleSpy).toHaveBeenCalled();
@@ -415,12 +415,12 @@ describe('UnifiedAuthProvider', () => {
415
415
  warnBeforeMs={60000}
416
416
  onIdleLogout={() => {}}
417
417
  >
418
- <div data-testid="test-content">Test Content</div>
418
+ <p data-testid="test-content">Test Content</p>
419
419
  </UnifiedAuthProvider>
420
420
  );
421
421
 
422
422
  // Verify the composed tree renders children successfully
423
- expect(screen.getByTestId('test-content')).toBeInTheDocument();
423
+ expect(screen.getByTestId('test-content')).toBeDefined();
424
424
  });
425
425
  });
426
426
  });
@@ -36,11 +36,11 @@ const TestComponent = () => {
36
36
  const auth = useAuth();
37
37
 
38
38
  return (
39
- <div data-testid="test-component">
40
- <div data-testid="user">{auth.getUser()?.email || 'No user'}</div>
41
- <div data-testid="isAuthenticated">{auth.isAuthenticated() ? 'true' : 'false'}</div>
42
- <div data-testid="authLoading">{auth.isLoading() ? 'true' : 'false'}</div>
43
- <div data-testid="error">{auth.getError()?.message || 'No error'}</div>
39
+ <section data-testid="test-component">
40
+ <p data-testid="user">{auth.getUser()?.email || 'No user'}</p>
41
+ <p data-testid="isAuthenticated">{auth.isAuthenticated() ? 'true' : 'false'}</p>
42
+ <p data-testid="authLoading">{auth.isLoading() ? 'true' : 'false'}</p>
43
+ <p data-testid="error">{auth.getError()?.message || 'No error'}</p>
44
44
  <button data-testid="sign-in-btn" onClick={() => auth.signIn('test@example.com', 'password')}>
45
45
  Sign In
46
46
  </button>
@@ -59,7 +59,7 @@ const TestComponent = () => {
59
59
  <button data-testid="refresh-session-btn" onClick={() => auth.refreshSession()}>
60
60
  Refresh Session
61
61
  </button>
62
- </div>
62
+ </section>
63
63
  );
64
64
  };
65
65
 
@@ -213,17 +213,17 @@ describe('AuthProvider', () => {
213
213
  const auth = useAuth();
214
214
 
215
215
  return (
216
- <div>
217
- <div data-testid="hasUser">{auth.getUser() !== null ? 'true' : 'false'}</div>
218
- <div data-testid="hasSession">{auth.getSession() !== null ? 'true' : 'false'}</div>
219
- <div data-testid="hasSignIn">{typeof auth.signIn === 'function' ? 'true' : 'false'}</div>
220
- <div data-testid="hasSignOut">{typeof auth.signOut === 'function' ? 'true' : 'false'}</div>
221
- <div data-testid="hasSignUp">{typeof auth.signUp === 'function' ? 'true' : 'false'}</div>
222
- <div data-testid="hasResetPassword">{typeof auth.resetPassword === 'function' ? 'true' : 'false'}</div>
223
- <div data-testid="hasUpdatePassword">{typeof auth.updatePassword === 'function' ? 'true' : 'false'}</div>
224
- <div data-testid="hasRefreshSession">{typeof auth.refreshSession === 'function' ? 'true' : 'false'}</div>
225
- <div data-testid="hasError">{auth.getError() !== null ? 'true' : 'false'}</div>
226
- </div>
216
+ <section>
217
+ <p data-testid="hasUser">{auth.getUser() !== null ? 'true' : 'false'}</p>
218
+ <p data-testid="hasSession">{auth.getSession() !== null ? 'true' : 'false'}</p>
219
+ <p data-testid="hasSignIn">{typeof auth.signIn === 'function' ? 'true' : 'false'}</p>
220
+ <p data-testid="hasSignOut">{typeof auth.signOut === 'function' ? 'true' : 'false'}</p>
221
+ <p data-testid="hasSignUp">{typeof auth.signUp === 'function' ? 'true' : 'false'}</p>
222
+ <p data-testid="hasResetPassword">{typeof auth.resetPassword === 'function' ? 'true' : 'false'}</p>
223
+ <p data-testid="hasUpdatePassword">{typeof auth.updatePassword === 'function' ? 'true' : 'false'}</p>
224
+ <p data-testid="hasRefreshSession">{typeof auth.refreshSession === 'function' ? 'true' : 'false'}</p>
225
+ <p data-testid="hasError">{auth.getError() !== null ? 'true' : 'false'}</p>
226
+ </section>
227
227
  );
228
228
  };
229
229
 
@@ -250,9 +250,9 @@ describe('AuthProvider', () => {
250
250
  const TestOutsideProvider = () => {
251
251
  try {
252
252
  useAuth();
253
- return <div data-testid="no-error">No error</div>;
253
+ return <p data-testid="no-error">No error</p>;
254
254
  } catch (error) {
255
- return <div data-testid="error">{error.message}</div>;
255
+ return <p data-testid="error">{error.message}</p>;
256
256
  }
257
257
  };
258
258
 
@@ -270,7 +270,7 @@ describe('AuthProvider', () => {
270
270
  );
271
271
 
272
272
  // Service layer handles session retrieval - just verify component renders
273
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
273
+ expect(screen.getByTestId('test-component')).toBeDefined();
274
274
  });
275
275
 
276
276
  it('sets up auth state change listener', () => {
@@ -281,7 +281,7 @@ describe('AuthProvider', () => {
281
281
  );
282
282
 
283
283
  // Service layer handles auth state changes - just verify component renders
284
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
284
+ expect(screen.getByTestId('test-component')).toBeDefined();
285
285
  });
286
286
  });
287
287
  });
@@ -90,12 +90,12 @@ const TestComponent = () => {
90
90
  const { events, isLoading, error, selectedEvent, setSelectedEvent, refreshEvents } = useEvents();
91
91
 
92
92
  return (
93
- <div data-testid="test-component">
94
- <div data-testid="events-count">{events.length}</div>
95
- <div data-testid="is-loading">{isLoading ? 'true' : 'false'}</div>
96
- <div data-testid="error">{error?.message || 'no-error'}</div>
97
- <div data-testid="selected-event">{selectedEvent?.event_name || 'no-event'}</div>
98
- <div data-testid="selected-event-id">{selectedEvent?.event_id || 'no-id'}</div>
93
+ <section data-testid="test-component">
94
+ <p data-testid="events-count">{events.length}</p>
95
+ <p data-testid="is-loading">{isLoading ? 'true' : 'false'}</p>
96
+ <p data-testid="error">{error?.message || 'no-error'}</p>
97
+ <p data-testid="selected-event">{selectedEvent?.event_name || 'no-event'}</p>
98
+ <p data-testid="selected-event-id">{selectedEvent?.event_id || 'no-id'}</p>
99
99
  <button data-testid="select-first-btn" onClick={() => setSelectedEvent(events[0] || null)}>
100
100
  Select First Event
101
101
  </button>
@@ -105,7 +105,7 @@ const TestComponent = () => {
105
105
  <button data-testid="refresh-events-btn" onClick={() => refreshEvents()}>
106
106
  Refresh Events
107
107
  </button>
108
- </div>
108
+ </section>
109
109
  );
110
110
  };
111
111
 
@@ -169,7 +169,7 @@ describe('EventProvider', () => {
169
169
  </TestWrapper>
170
170
  );
171
171
 
172
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
172
+ expect(screen.getByTestId('test-component')).toBeDefined();
173
173
  expect(screen.getByTestId('events-count')).toHaveTextContent('0');
174
174
  expect(screen.getByTestId('is-loading')).toHaveTextContent('false');
175
175
  expect(screen.getByTestId('error')).toHaveTextContent('no-error');
@@ -188,9 +188,9 @@ describe('EventProvider', () => {
188
188
  const clearBtn = screen.getByTestId('clear-event-btn');
189
189
  const refreshBtn = screen.getByTestId('refresh-events-btn');
190
190
 
191
- expect(selectBtn).toBeInTheDocument();
192
- expect(clearBtn).toBeInTheDocument();
193
- expect(refreshBtn).toBeInTheDocument();
191
+ expect(selectBtn).toBeDefined();
192
+ expect(clearBtn).toBeDefined();
193
+ expect(refreshBtn).toBeDefined();
194
194
  });
195
195
 
196
196
  it('handles event selection', () => {
@@ -232,7 +232,7 @@ describe('EventProvider', () => {
232
232
  fireEvent.click(refreshBtn);
233
233
 
234
234
  // Should handle the click without errors
235
- expect(screen.getByTestId('refresh-events-btn')).toBeInTheDocument();
235
+ expect(screen.getByTestId('refresh-events-btn')).toBeDefined();
236
236
  });
237
237
  });
238
238
 
@@ -242,14 +242,14 @@ describe('EventProvider', () => {
242
242
  const { events, isLoading, error, selectedEvent, setSelectedEvent, refreshEvents } = useEvents();
243
243
 
244
244
  return (
245
- <div>
246
- <div data-testid="hasEvents">{Array.isArray(events) ? 'true' : 'false'}</div>
247
- <div data-testid="hasIsLoading">{typeof isLoading === 'boolean' ? 'true' : 'false'}</div>
248
- <div data-testid="hasError">{error !== null ? 'true' : 'false'}</div>
249
- <div data-testid="hasSelectedEvent">{selectedEvent !== null ? 'true' : 'false'}</div>
250
- <div data-testid="hasSetSelectedEvent">{typeof setSelectedEvent === 'function' ? 'true' : 'false'}</div>
251
- <div data-testid="hasRefreshEvents">{typeof refreshEvents === 'function' ? 'true' : 'false'}</div>
252
- </div>
245
+ <section>
246
+ <p data-testid="hasEvents">{Array.isArray(events) ? 'true' : 'false'}</p>
247
+ <p data-testid="hasIsLoading">{typeof isLoading === 'boolean' ? 'true' : 'false'}</p>
248
+ <p data-testid="hasError">{error !== null ? 'true' : 'false'}</p>
249
+ <p data-testid="hasSelectedEvent">{selectedEvent !== null ? 'true' : 'false'}</p>
250
+ <p data-testid="hasSetSelectedEvent">{typeof setSelectedEvent === 'function' ? 'true' : 'false'}</p>
251
+ <p data-testid="hasRefreshEvents">{typeof refreshEvents === 'function' ? 'true' : 'false'}</p>
252
+ </section>
253
253
  );
254
254
  };
255
255
 
@@ -273,9 +273,9 @@ describe('EventProvider', () => {
273
273
  const TestOutsideProvider = () => {
274
274
  try {
275
275
  useEvents();
276
- return <div data-testid="no-error">No error</div>;
276
+ return <p data-testid="no-error">No error</p>;
277
277
  } catch (error) {
278
- return <div data-testid="error">{error.message}</div>;
278
+ return <p data-testid="error">{error.message}</p>;
279
279
  }
280
280
  };
281
281
 
@@ -293,7 +293,7 @@ describe('EventProvider', () => {
293
293
  </TestWrapper>
294
294
  );
295
295
 
296
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
296
+ expect(screen.getByTestId('test-component')).toBeDefined();
297
297
  expect(screen.getByTestId('events-count')).toHaveTextContent('0');
298
298
  });
299
299
  });
@@ -304,10 +304,10 @@ describe('EventProvider', () => {
304
304
  const { events, isLoading } = useEvents();
305
305
 
306
306
  return (
307
- <div>
308
- <div data-testid="events-list">{events.length}</div>
309
- <div data-testid="loading-state">{isLoading ? 'loading' : 'ready'}</div>
310
- </div>
307
+ <section>
308
+ <p data-testid="events-list">{events.length}</p>
309
+ <p data-testid="loading-state">{isLoading ? 'loading' : 'ready'}</p>
310
+ </section>
311
311
  );
312
312
  };
313
313
 
@@ -318,8 +318,8 @@ describe('EventProvider', () => {
318
318
  );
319
319
 
320
320
  // Initial state should be ready (mocks don't trigger real async)
321
- expect(screen.getByTestId('events-list')).toBeInTheDocument();
322
- expect(screen.getByTestId('loading-state')).toBeInTheDocument();
321
+ expect(screen.getByTestId('events-list')).toBeDefined();
322
+ expect(screen.getByTestId('loading-state')).toBeDefined();
323
323
  });
324
324
 
325
325
  it('handles error states gracefully', () => {
@@ -327,9 +327,9 @@ describe('EventProvider', () => {
327
327
  const { error } = useEvents();
328
328
 
329
329
  return (
330
- <div data-testid="error-state">
330
+ <section data-testid="error-state">
331
331
  {error ? error.message : 'no-error'}
332
- </div>
332
+ </section>
333
333
  );
334
334
  };
335
335
 
@@ -339,7 +339,7 @@ describe('EventProvider', () => {
339
339
  </TestWrapper>
340
340
  );
341
341
 
342
- expect(screen.getByTestId('error-state')).toBeInTheDocument();
342
+ expect(screen.getByTestId('error-state')).toBeDefined();
343
343
  });
344
344
 
345
345
  it('provides refresh functionality', () => {
@@ -347,11 +347,11 @@ describe('EventProvider', () => {
347
347
  const { refreshEvents } = useEvents();
348
348
 
349
349
  return (
350
- <div>
350
+ <section>
351
351
  <button data-testid="refresh-btn" onClick={() => refreshEvents()}>
352
352
  Refresh
353
353
  </button>
354
- </div>
354
+ </section>
355
355
  );
356
356
  };
357
357
 
@@ -362,7 +362,7 @@ describe('EventProvider', () => {
362
362
  );
363
363
 
364
364
  const refreshBtn = screen.getByTestId('refresh-btn');
365
- expect(refreshBtn).toBeInTheDocument();
365
+ expect(refreshBtn).toBeDefined();
366
366
  fireEvent.click(refreshBtn);
367
367
  // Should not throw
368
368
  });
@@ -374,8 +374,8 @@ describe('EventProvider', () => {
374
374
  const { events, selectedEvent, setSelectedEvent } = useEvents();
375
375
 
376
376
  return (
377
- <div>
378
- <div data-testid="current-selection">{selectedEvent?.event_name || 'none'}</div>
377
+ <section>
378
+ <p data-testid="current-selection">{selectedEvent?.event_name || 'none'}</p>
379
379
  <button
380
380
  data-testid="select-btn"
381
381
  onClick={() => setSelectedEvent(events[0] || null)}
@@ -388,7 +388,7 @@ describe('EventProvider', () => {
388
388
  >
389
389
  Clear
390
390
  </button>
391
- </div>
391
+ </section>
392
392
  );
393
393
  };
394
394
 
@@ -399,8 +399,8 @@ describe('EventProvider', () => {
399
399
  );
400
400
 
401
401
  expect(screen.getByTestId('current-selection')).toHaveTextContent('none');
402
- expect(screen.getByTestId('select-btn')).toBeInTheDocument();
403
- expect(screen.getByTestId('clear-btn')).toBeInTheDocument();
402
+ expect(screen.getByTestId('select-btn')).toBeDefined();
403
+ expect(screen.getByTestId('clear-btn')).toBeDefined();
404
404
  });
405
405
 
406
406
  it('maintains event context across interactions', () => {
@@ -408,16 +408,16 @@ describe('EventProvider', () => {
408
408
  const { events, selectedEvent, setSelectedEvent } = useEvents();
409
409
 
410
410
  return (
411
- <div>
412
- <div data-testid="total-events">{events.length}</div>
413
- <div data-testid="has-selection">{selectedEvent ? 'yes' : 'no'}</div>
411
+ <section>
412
+ <p data-testid="total-events">{events.length}</p>
413
+ <p data-testid="has-selection">{selectedEvent ? 'yes' : 'no'}</p>
414
414
  <button
415
415
  data-testid="toggle-selection"
416
416
  onClick={() => setSelectedEvent(events[0] || null)}
417
417
  >
418
418
  Toggle
419
419
  </button>
420
- </div>
420
+ </section>
421
421
  );
422
422
  };
423
423
 
@@ -427,7 +427,7 @@ describe('EventProvider', () => {
427
427
  </TestWrapper>
428
428
  );
429
429
 
430
- expect(screen.getByTestId('total-events')).toBeInTheDocument();
430
+ expect(screen.getByTestId('total-events')).toBeDefined();
431
431
  expect(screen.getByTestId('has-selection')).toHaveTextContent('no');
432
432
  });
433
433
  });
@@ -440,11 +440,11 @@ describe('EventProvider', () => {
440
440
  const { events, selectedEvent } = useEvents();
441
441
 
442
442
  return (
443
- <div>
444
- <div data-testid="render-count">{renderCount}</div>
445
- <div data-testid="events-stable">{events ? 'stable' : 'unstable'}</div>
446
- <div data-testid="selection-stable">{selectedEvent !== undefined ? 'stable' : 'unstable'}</div>
447
- </div>
443
+ <section>
444
+ <p data-testid="render-count">{renderCount}</p>
445
+ <p data-testid="events-stable">{events ? 'stable' : 'unstable'}</p>
446
+ <p data-testid="selection-stable">{selectedEvent !== undefined ? 'stable' : 'unstable'}</p>
447
+ </section>
448
448
  );
449
449
  };
450
450
 
@@ -471,7 +471,7 @@ describe('EventProvider', () => {
471
471
  const { setSelectedEvent, refreshEvents } = useEvents();
472
472
 
473
473
  return (
474
- <div>
474
+ <section>
475
475
  <button
476
476
  data-testid="rapid-change-btn"
477
477
  onClick={() => {
@@ -481,7 +481,7 @@ describe('EventProvider', () => {
481
481
  >
482
482
  Rapid Change
483
483
  </button>
484
- </div>
484
+ </section>
485
485
  );
486
486
  };
487
487
 
@@ -497,7 +497,7 @@ describe('EventProvider', () => {
497
497
  fireEvent.click(btn);
498
498
  fireEvent.click(btn);
499
499
 
500
- expect(btn).toBeInTheDocument();
500
+ expect(btn).toBeDefined();
501
501
  });
502
502
  });
503
503
 
@@ -507,10 +507,10 @@ describe('EventProvider', () => {
507
507
  const { events, selectedEvent } = useEvents();
508
508
 
509
509
  return (
510
- <div>
511
- <div data-testid="has-events">{events.length > 0 ? 'yes' : 'no'}</div>
512
- <div data-testid="org-context-available">context-available</div>
513
- </div>
510
+ <section>
511
+ <p data-testid="has-events">{events.length > 0 ? 'yes' : 'no'}</p>
512
+ <p data-testid="org-context-available">context-available</p>
513
+ </section>
514
514
  );
515
515
  };
516
516
 
@@ -525,7 +525,7 @@ describe('EventProvider', () => {
525
525
  </TestWrapper>
526
526
  );
527
527
 
528
- expect(screen.getByTestId('org-context-available')).toBeInTheDocument();
528
+ expect(screen.getByTestId('org-context-available')).toBeDefined();
529
529
  });
530
530
 
531
531
  it('handles missing organisation context gracefully', () => {
@@ -533,9 +533,9 @@ describe('EventProvider', () => {
533
533
  const { events } = useEvents();
534
534
 
535
535
  return (
536
- <div data-testid="no-org-handled">
536
+ <section data-testid="no-org-handled">
537
537
  Events available: {events.length}
538
- </div>
538
+ </section>
539
539
  );
540
540
  };
541
541
 
@@ -545,7 +545,7 @@ describe('EventProvider', () => {
545
545
  </TestWrapper>
546
546
  );
547
547
 
548
- expect(screen.getByTestId('no-org-handled')).toBeInTheDocument();
548
+ expect(screen.getByTestId('no-org-handled')).toBeDefined();
549
549
  });
550
550
  });
551
551
  });