@jmruthers/pace-core 0.6.6 → 0.6.7

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 (246) hide show
  1. package/{scripts/audit/audit-dependencies.cjs → audit-tool/00-dependencies.cjs} +12 -13
  2. package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
  3. package/audit-tool/audits/02-project-structure.cjs +255 -0
  4. package/audit-tool/audits/03-architecture.cjs +196 -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 +544 -0
  8. package/audit-tool/audits/07-api-tech-stack.cjs +301 -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 +291 -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 +241 -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-7PMH7XN7.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-DlsCaR5v.d.ts} +26 -16
  28. package/dist/{chunk-FENMYN2U.js → chunk-5X4QLXRG.js} +1 -3
  29. package/dist/{chunk-4T7OBVTU.js → chunk-6F3IILHI.js} +1 -1
  30. package/dist/{chunk-SD6WQY43.js → chunk-7ILTDCL2.js} +9 -1
  31. package/dist/{chunk-3QC3KRHK.js → chunk-A3W6LW53.js} +16 -1
  32. package/dist/{chunk-7TYHROIV.js → chunk-BM4CQ5P3.js} +50 -8
  33. package/dist/{chunk-2HGJFNAH.js → chunk-FEJLJNWA.js} +1 -15
  34. package/dist/{chunk-OHIK3MIO.js → chunk-GHYHJTYV.js} +2 -2
  35. package/dist/{chunk-UIYSCEV7.js → chunk-IUBRCBSY.js} +1 -1
  36. package/dist/{chunk-LAZMKTTF.js → chunk-JGWDVX64.js} +281 -347
  37. package/dist/{chunk-MAGBIDNS.js → chunk-L4XMVJKY.js} +2 -2
  38. package/dist/{chunk-A55DK444.js → chunk-OJ4SKRSV.js} +1 -7
  39. package/dist/{chunk-ZS5VO5JB.js → chunk-Q7Q7V5NV.js} +406 -451
  40. package/dist/{chunk-3O3WHILE.js → chunk-VBCS3DUA.js} +236 -60
  41. package/dist/{chunk-BVP2BCJF.js → chunk-ZKAWKYT4.js} +8 -8
  42. package/dist/components.d.ts +5 -4
  43. package/dist/components.js +27 -32
  44. package/dist/eslint-rules/index.cjs +22 -9
  45. package/{src/eslint-rules/rules/compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +184 -23
  46. package/dist/eslint-rules/rules/04-code-quality.cjs +290 -0
  47. package/dist/eslint-rules/rules/05-styling.cjs +61 -0
  48. package/dist/eslint-rules/rules/{rbac.cjs → 06-security-rbac.cjs} +26 -10
  49. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
  50. package/dist/eslint-rules/rules/08-testing.cjs +94 -0
  51. package/dist/hooks.d.ts +5 -5
  52. package/dist/hooks.js +6 -6
  53. package/dist/index.d.ts +6 -6
  54. package/dist/index.js +18 -17
  55. package/dist/rbac/index.js +6 -6
  56. package/dist/theming/runtime.d.ts +14 -1
  57. package/dist/theming/runtime.js +1 -1
  58. package/dist/{types-B-K_5VnO.d.ts → types-DXstZpNI.d.ts} +0 -17
  59. package/dist/{usePublicRouteParams-COZ28Mvq.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +19 -19
  60. package/dist/utils.d.ts +2 -2
  61. package/dist/utils.js +8 -8
  62. package/docs/README.md +1 -1
  63. package/docs/api/modules.md +47 -31
  64. package/docs/api-reference/components.md +18 -20
  65. package/docs/api-reference/hooks.md +80 -80
  66. package/docs/api-reference/types.md +1 -1
  67. package/docs/api-reference/utilities.md +1 -1
  68. package/docs/architecture/README.md +1 -1
  69. package/docs/core-concepts/events.md +3 -3
  70. package/docs/core-concepts/organisations.md +6 -6
  71. package/docs/core-concepts/permissions.md +6 -6
  72. package/docs/documentation-index.md +12 -18
  73. package/docs/getting-started/documentation-index.md +1 -1
  74. package/docs/getting-started/examples/README.md +4 -4
  75. package/docs/getting-started/examples/full-featured-app.md +1 -1
  76. package/docs/getting-started/faq.md +2 -2
  77. package/docs/getting-started/quick-reference.md +4 -4
  78. package/docs/implementation-guides/authentication.md +15 -15
  79. package/docs/implementation-guides/component-styling.md +1 -1
  80. package/docs/implementation-guides/data-tables.md +126 -33
  81. package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
  82. package/docs/implementation-guides/dynamic-colors.md +3 -3
  83. package/docs/implementation-guides/file-upload-storage.md +2 -2
  84. package/docs/implementation-guides/hierarchical-datatable.md +40 -60
  85. package/docs/implementation-guides/inactivity-tracking.md +3 -3
  86. package/docs/implementation-guides/large-datasets.md +3 -2
  87. package/docs/implementation-guides/organisation-security.md +2 -2
  88. package/docs/implementation-guides/performance.md +2 -2
  89. package/docs/implementation-guides/permission-enforcement.md +1 -1
  90. package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
  91. package/docs/migration/V0.4.0_rbac-migration.md +6 -6
  92. package/docs/rbac/README.md +5 -5
  93. package/docs/rbac/advanced-patterns.md +6 -6
  94. package/docs/rbac/api-reference.md +20 -20
  95. package/docs/rbac/event-based-apps.md +3 -3
  96. package/docs/rbac/examples.md +41 -41
  97. package/docs/rbac/getting-started.md +37 -37
  98. package/docs/rbac/performance.md +1 -1
  99. package/docs/rbac/quick-start.md +52 -52
  100. package/docs/rbac/secure-client-protection.md +1 -1
  101. package/docs/rbac/troubleshooting.md +1 -1
  102. package/docs/security/README.md +5 -5
  103. package/docs/standards/0-standards-overview.md +220 -0
  104. package/docs/standards/{00-pace-core-compliance.md → 1-pace-core-compliance-standards.md} +204 -185
  105. package/docs/standards/{02-project-structure.md → 2-project-structure-standards.md} +11 -47
  106. package/docs/standards/3-architecture-standards.md +606 -0
  107. package/docs/standards/4-code-quality-standards.md +728 -0
  108. package/docs/standards/{08-markup-quality.md → 5-styling-standards.md} +12 -9
  109. package/docs/standards/{09-rbac-compliance.md → 6-security-rbac-standards.md} +126 -18
  110. package/docs/standards/7-api-tech-stack-standards.md +662 -0
  111. package/docs/standards/8-testing-documentation-standards.md +401 -0
  112. package/docs/standards/9-operations-standards.md +1102 -0
  113. package/docs/standards/README.md +203 -104
  114. package/docs/troubleshooting/README.md +4 -4
  115. package/docs/troubleshooting/common-issues.md +2 -2
  116. package/docs/troubleshooting/debugging.md +9 -9
  117. package/docs/troubleshooting/migration.md +4 -4
  118. package/eslint-config-pace-core.cjs +21 -10
  119. package/package.json +6 -5
  120. package/scripts/install-cursor-rules.cjs +11 -243
  121. package/scripts/install-eslint-config.cjs +284 -0
  122. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +2 -2
  123. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
  124. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +10 -10
  125. package/src/__tests__/integration/UserProfile.test.tsx +14 -14
  126. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
  127. package/src/__tests__/templates/accessibility.test.template.tsx +9 -9
  128. package/src/__tests__/templates/component.test.template.tsx +18 -15
  129. package/src/components/Calendar/Calendar.tsx +201 -47
  130. package/src/components/ContextSelector/ContextSelector.tsx +137 -153
  131. package/src/components/DataTable/AUDIT_REPORT.md +293 -0
  132. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +10 -2
  133. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +10 -4
  134. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
  135. package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
  136. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
  137. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
  138. package/src/components/DataTable/components/DataTableLayout.tsx +5 -16
  139. package/src/components/DataTable/components/EditableRow.tsx +5 -7
  140. package/src/components/DataTable/components/EmptyState.tsx +10 -9
  141. package/src/components/DataTable/components/FilterRow.tsx +2 -4
  142. package/src/components/DataTable/components/ImportModal.tsx +124 -126
  143. package/src/components/DataTable/components/LoadingState.tsx +5 -6
  144. package/src/components/DataTable/components/SortIndicator.tsx +50 -0
  145. package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
  146. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
  147. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
  148. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
  149. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
  150. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +41 -27
  151. package/src/components/DataTable/components/index.ts +2 -1
  152. package/src/components/DataTable/types.ts +0 -18
  153. package/src/components/DataTable/utils/a11yUtils.ts +17 -0
  154. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +2 -1
  155. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
  156. package/src/components/DateTimeField/DateTimeField.tsx +7 -8
  157. package/src/components/Dialog/Dialog.test.tsx +1 -0
  158. package/src/components/Dialog/Dialog.tsx +25 -8
  159. package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
  160. package/src/components/FileUpload/FileUpload.test.tsx +52 -14
  161. package/src/components/FileUpload/FileUpload.tsx +112 -130
  162. package/src/components/Progress/Progress.tsx +2 -4
  163. package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
  164. package/src/components/Select/Select.tsx +86 -77
  165. package/src/components/Select/types.ts +3 -0
  166. package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
  167. package/src/hooks/__tests__/hooks.integration.test.tsx +49 -49
  168. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
  169. package/src/hooks/public/usePublicEvent.ts +5 -5
  170. package/src/hooks/public/usePublicEventLogo.ts +5 -5
  171. package/src/hooks/public/usePublicFileDisplay.ts +2 -2
  172. package/src/hooks/public/usePublicRouteParams.ts +5 -5
  173. package/src/hooks/useAppConfig.ts +2 -2
  174. package/src/hooks/useEventTheme.test.ts +7 -7
  175. package/src/hooks/useEventTheme.ts +1 -4
  176. package/src/hooks/useFileDisplay.ts +2 -2
  177. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
  178. package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
  179. package/src/providers/__tests__/EventProvider.test.tsx +61 -61
  180. package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
  181. package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
  182. package/src/providers/__tests__/ProviderLifecycle.test.tsx +37 -37
  183. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
  184. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
  185. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +10 -10
  186. package/src/styles/core.css +7 -0
  187. package/src/theming/__tests__/parseEventColours.test.ts +9 -3
  188. package/src/theming/parseEventColours.ts +22 -10
  189. package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
  190. package/src/utils/storage/README.md +1 -1
  191. package/cursor-rules/01-standards-compliance.mdc +0 -285
  192. package/cursor-rules/04-testing-standards.mdc +0 -270
  193. package/cursor-rules/05-bug-reports-and-features.mdc +0 -248
  194. package/cursor-rules/06-code-quality.mdc +0 -311
  195. package/cursor-rules/07-tech-stack-compliance.mdc +0 -216
  196. package/cursor-rules/10-error-handling-patterns.mdc +0 -179
  197. package/cursor-rules/11-performance-optimization.mdc +0 -169
  198. package/cursor-rules/12-ci-cd-integration.mdc +0 -150
  199. package/dist/DataTable-LRJL4IRV.js +0 -15
  200. package/dist/eslint-rules/rules/compliance.cjs +0 -348
  201. package/dist/eslint-rules/rules/components.cjs +0 -113
  202. package/dist/eslint-rules/rules/imports.cjs +0 -102
  203. package/docs/best-practices/README.md +0 -472
  204. package/docs/best-practices/accessibility.md +0 -604
  205. package/docs/best-practices/common-patterns.md +0 -516
  206. package/docs/best-practices/deployment.md +0 -1103
  207. package/docs/best-practices/performance.md +0 -1328
  208. package/docs/best-practices/security.md +0 -940
  209. package/docs/best-practices/testing.md +0 -1034
  210. package/docs/rbac/compliance/compliance-guide.md +0 -544
  211. package/docs/standards/01-standards-compliance.md +0 -188
  212. package/docs/standards/03-solid-principles.md +0 -39
  213. package/docs/standards/04-testing-standards.md +0 -36
  214. package/docs/standards/05-bug-reports-and-features.md +0 -27
  215. package/docs/standards/06-code-quality.md +0 -34
  216. package/docs/standards/07-tech-stack-compliance.md +0 -30
  217. package/docs/standards/10-error-handling-patterns.md +0 -401
  218. package/docs/standards/11-performance-optimization.md +0 -348
  219. package/docs/standards/12-ci-cd-integration.md +0 -370
  220. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +0 -192
  221. package/scripts/audit/audit-compliance.cjs +0 -1295
  222. package/scripts/audit/audit-components.cjs +0 -260
  223. package/scripts/audit/audit-rbac.cjs +0 -954
  224. package/scripts/audit/audit-standards.cjs +0 -1268
  225. package/scripts/audit/index.cjs +0 -1927
  226. package/src/components/DataTable/components/DataTableBody.tsx +0 -478
  227. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
  228. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  229. package/src/components/DataTable/components/GroupHeader.tsx +0 -54
  230. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  231. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
  232. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
  233. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
  234. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
  235. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
  236. package/src/components/DataTable/core/DataTableContext.tsx +0 -216
  237. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
  238. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
  239. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
  240. package/src/components/DataTable/utils/debugTools.ts +0 -514
  241. package/src/eslint-rules/index.cjs +0 -22
  242. package/src/eslint-rules/rules/components.cjs +0 -113
  243. package/src/eslint-rules/rules/imports.cjs +0 -102
  244. package/src/eslint-rules/rules/rbac.cjs +0 -790
  245. package/src/eslint-rules/utils/helpers.cjs +0 -42
  246. package/src/eslint-rules/utils/manifest-loader.cjs +0 -75
@@ -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
  });
@@ -29,11 +29,11 @@ vi.mock('../../hooks/useInactivityTracker', () => ({
29
29
  vi.mock('../../components/InactivityWarningModal/InactivityWarningModal', () => ({
30
30
  InactivityWarningModal: ({ isOpen, timeRemaining, onStaySignedIn, onSignOutNow }: any) => (
31
31
  isOpen ? (
32
- <div data-testid="inactivity-modal">
33
- <div data-testid="time-remaining">{timeRemaining}</div>
32
+ <section data-testid="inactivity-modal">
33
+ <p data-testid="time-remaining">{timeRemaining}</p>
34
34
  <button onClick={onStaySignedIn}>Stay Signed In</button>
35
35
  <button onClick={onSignOutNow}>Sign Out Now</button>
36
- </div>
36
+ </section>
37
37
  ) : null
38
38
  ),
39
39
  }));
@@ -43,18 +43,18 @@ const TestComponent = () => {
43
43
  const inactivity = useInactivity();
44
44
 
45
45
  return (
46
- <div data-testid="test-component">
47
- <div data-testid="showWarning">{inactivity.showInactivityWarning ? 'true' : 'false'}</div>
48
- <div data-testid="timeRemaining">{inactivity.inactivityTimeRemaining}</div>
49
- <div data-testid="isIdle">{inactivity.isIdle ? 'true' : 'false'}</div>
50
- <div data-testid="isTracking">{inactivity.isTracking ? 'true' : 'false'}</div>
46
+ <section data-testid="test-component">
47
+ <p data-testid="showWarning">{inactivity.showInactivityWarning ? 'true' : 'false'}</p>
48
+ <p data-testid="timeRemaining">{inactivity.inactivityTimeRemaining}</p>
49
+ <p data-testid="isIdle">{inactivity.isIdle ? 'true' : 'false'}</p>
50
+ <p data-testid="isTracking">{inactivity.isTracking ? 'true' : 'false'}</p>
51
51
  <button onClick={inactivity.resetActivity}>Reset Activity</button>
52
52
  <button onClick={inactivity.startTracking}>Start Tracking</button>
53
53
  <button onClick={inactivity.stopTracking}>Stop Tracking</button>
54
54
  <button onClick={inactivity.handleIdleLogout}>Idle Logout</button>
55
55
  <button onClick={inactivity.handleStaySignedIn}>Stay Signed In</button>
56
56
  <button onClick={inactivity.handleSignOutNow}>Sign Out Now</button>
57
- </div>
57
+ </section>
58
58
  );
59
59
  };
60
60
 
@@ -90,21 +90,21 @@ describe('InactivityProvider', () => {
90
90
  it('renders children without crashing', () => {
91
91
  render(
92
92
  <TestWrapper supabaseClient={mockSupabaseClient}>
93
- <div>Test content</div>
93
+ <p>Test content</p>
94
94
  </TestWrapper>
95
95
  );
96
96
 
97
- expect(screen.getByText('Test content')).toBeInTheDocument();
97
+ expect(screen.getByText('Test content')).toBeDefined();
98
98
  });
99
99
 
100
100
  it('renders without user and session', () => {
101
101
  render(
102
102
  <TestWrapper user={null} session={null} supabaseClient={mockSupabaseClient}>
103
- <div>Test content</div>
103
+ <p>Test content</p>
104
104
  </TestWrapper>
105
105
  );
106
106
 
107
- expect(screen.getByText('Test content')).toBeInTheDocument();
107
+ expect(screen.getByText('Test content')).toBeDefined();
108
108
  });
109
109
  });
110
110
 
@@ -127,14 +127,14 @@ describe('InactivityProvider', () => {
127
127
  const inactivity = useInactivity();
128
128
 
129
129
  return (
130
- <div>
131
- <div data-testid="hasResetActivity">{typeof inactivity.resetActivity === 'function' ? 'true' : 'false'}</div>
132
- <div data-testid="hasStartTracking">{typeof inactivity.startTracking === 'function' ? 'true' : 'false'}</div>
133
- <div data-testid="hasStopTracking">{typeof inactivity.stopTracking === 'function' ? 'true' : 'false'}</div>
134
- <div data-testid="hasHandleIdleLogout">{typeof inactivity.handleIdleLogout === 'function' ? 'true' : 'false'}</div>
135
- <div data-testid="hasHandleStaySignedIn">{typeof inactivity.handleStaySignedIn === 'function' ? 'true' : 'false'}</div>
136
- <div data-testid="hasHandleSignOutNow">{typeof inactivity.handleSignOutNow === 'function' ? 'true' : 'false'}</div>
137
- </div>
130
+ <section>
131
+ <p data-testid="hasResetActivity">{typeof inactivity.resetActivity === 'function' ? 'true' : 'false'}</p>
132
+ <p data-testid="hasStartTracking">{typeof inactivity.startTracking === 'function' ? 'true' : 'false'}</p>
133
+ <p data-testid="hasStopTracking">{typeof inactivity.stopTracking === 'function' ? 'true' : 'false'}</p>
134
+ <p data-testid="hasHandleIdleLogout">{typeof inactivity.handleIdleLogout === 'function' ? 'true' : 'false'}</p>
135
+ <p data-testid="hasHandleStaySignedIn">{typeof inactivity.handleStaySignedIn === 'function' ? 'true' : 'false'}</p>
136
+ <p data-testid="hasHandleSignOutNow">{typeof inactivity.handleSignOutNow === 'function' ? 'true' : 'false'}</p>
137
+ </section>
138
138
  );
139
139
  };
140
140
 
@@ -162,7 +162,7 @@ describe('InactivityProvider', () => {
162
162
  );
163
163
 
164
164
  // Just verify the component renders - tracking logic is tested in service layer
165
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
165
+ expect(screen.getByTestId('test-component')).toBeDefined();
166
166
  });
167
167
 
168
168
  it('disables tracking when no user or session', () => {
@@ -173,7 +173,7 @@ describe('InactivityProvider', () => {
173
173
  );
174
174
 
175
175
  // Just verify the component renders - tracking logic is tested in service layer
176
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
176
+ expect(screen.getByTestId('test-component')).toBeDefined();
177
177
  });
178
178
 
179
179
  it('disables tracking when dangerously disabled', () => {
@@ -184,7 +184,7 @@ describe('InactivityProvider', () => {
184
184
  );
185
185
 
186
186
  // Just verify the component renders - tracking logic is tested in service layer
187
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
187
+ expect(screen.getByTestId('test-component')).toBeDefined();
188
188
  });
189
189
 
190
190
  it('uses custom timeout values', () => {
@@ -199,7 +199,7 @@ describe('InactivityProvider', () => {
199
199
  );
200
200
 
201
201
  // Just verify the component renders - tracking logic is tested in service layer
202
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
202
+ expect(screen.getByTestId('test-component')).toBeDefined();
203
203
  });
204
204
  });
205
205
 
@@ -214,7 +214,7 @@ describe('InactivityProvider', () => {
214
214
  );
215
215
 
216
216
  // Test that the component renders and the method is available
217
- expect(screen.getByText('Idle Logout')).toBeInTheDocument();
217
+ expect(screen.getByText('Idle Logout')).toBeDefined();
218
218
  });
219
219
 
220
220
  it('handles idle logout without callback', async () => {
@@ -225,7 +225,7 @@ describe('InactivityProvider', () => {
225
225
  );
226
226
 
227
227
  // Test that the component renders
228
- expect(screen.getByText('Idle Logout')).toBeInTheDocument();
228
+ expect(screen.getByText('Idle Logout')).toBeDefined();
229
229
  });
230
230
 
231
231
  it('handles sign out errors gracefully', async () => {
@@ -239,7 +239,7 @@ describe('InactivityProvider', () => {
239
239
  );
240
240
 
241
241
  // Test that the component renders
242
- expect(screen.getByText('Idle Logout')).toBeInTheDocument();
242
+ expect(screen.getByText('Idle Logout')).toBeDefined();
243
243
 
244
244
  consoleErrorSpy.mockRestore();
245
245
  });
@@ -272,7 +272,7 @@ describe('InactivityProvider', () => {
272
272
  );
273
273
 
274
274
  // Service layer handles the actual logic - just verify the UI renders
275
- expect(screen.getByTestId('showWarning')).toBeInTheDocument();
275
+ expect(screen.getByTestId('showWarning')).toBeDefined();
276
276
  });
277
277
 
278
278
  it('handles activity callback', () => {
@@ -317,7 +317,7 @@ describe('InactivityProvider', () => {
317
317
 
318
318
  screen.getByText('Reset Activity').click();
319
319
  // Service layer handles the actual logic - just verify the UI responds
320
- expect(screen.getByText('Reset Activity')).toBeInTheDocument();
320
+ expect(screen.getByText('Reset Activity')).toBeDefined();
321
321
  });
322
322
 
323
323
  it('handles start tracking', () => {
@@ -329,7 +329,7 @@ describe('InactivityProvider', () => {
329
329
 
330
330
  screen.getByText('Start Tracking').click();
331
331
  // Service layer handles the actual logic - just verify the UI responds
332
- expect(screen.getByText('Start Tracking')).toBeInTheDocument();
332
+ expect(screen.getByText('Start Tracking')).toBeDefined();
333
333
  });
334
334
 
335
335
  it('handles stop tracking', () => {
@@ -341,7 +341,7 @@ describe('InactivityProvider', () => {
341
341
 
342
342
  screen.getByText('Stop Tracking').click();
343
343
  // Service layer handles the actual logic - just verify the UI responds
344
- expect(screen.getByText('Stop Tracking')).toBeInTheDocument();
344
+ expect(screen.getByText('Stop Tracking')).toBeDefined();
345
345
  });
346
346
 
347
347
  it('handles manual idle logout', async () => {
@@ -356,7 +356,7 @@ describe('InactivityProvider', () => {
356
356
  screen.getByText('Idle Logout').click();
357
357
 
358
358
  // Test that the button is clickable
359
- expect(screen.getByText('Idle Logout')).toBeInTheDocument();
359
+ expect(screen.getByText('Idle Logout')).toBeDefined();
360
360
  });
361
361
 
362
362
  it('handles stay signed in', () => {
@@ -368,7 +368,7 @@ describe('InactivityProvider', () => {
368
368
 
369
369
  screen.getByText('Stay Signed In').click();
370
370
  // Service layer handles the actual logic - just verify the UI responds
371
- expect(screen.getByText('Stay Signed In')).toBeInTheDocument();
371
+ expect(screen.getByText('Stay Signed In')).toBeDefined();
372
372
  });
373
373
 
374
374
  it('handles sign out now', async () => {
@@ -383,7 +383,7 @@ describe('InactivityProvider', () => {
383
383
  screen.getByText('Sign Out Now').click();
384
384
 
385
385
  // Test that the button is clickable
386
- expect(screen.getByText('Sign Out Now')).toBeInTheDocument();
386
+ expect(screen.getByText('Sign Out Now')).toBeDefined();
387
387
  });
388
388
  });
389
389
 
@@ -403,16 +403,16 @@ describe('InactivityProvider', () => {
403
403
  );
404
404
 
405
405
  // Test that the component renders
406
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
406
+ expect(screen.getByTestId('test-component')).toBeDefined();
407
407
  });
408
408
 
409
409
  it('renders custom warning modal when provided', () => {
410
410
  const customRenderer = vi.fn(({ timeRemaining, onStaySignedIn, onSignOutNow }) => (
411
- <div data-testid="custom-modal">
412
- <div data-testid="custom-time">{timeRemaining}</div>
411
+ <section data-testid="custom-modal">
412
+ <p data-testid="custom-time">{timeRemaining}</p>
413
413
  <button onClick={onStaySignedIn}>Custom Stay</button>
414
414
  <button onClick={onSignOutNow}>Custom Sign Out</button>
415
- </div>
415
+ </section>
416
416
  ));
417
417
 
418
418
  // Mock tracker with warning state
@@ -429,15 +429,15 @@ describe('InactivityProvider', () => {
429
429
  );
430
430
 
431
431
  // Test that the component renders
432
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
432
+ expect(screen.getByTestId('test-component')).toBeDefined();
433
433
  });
434
434
 
435
435
  it('handles custom modal actions', async () => {
436
436
  const customRenderer = vi.fn(({ onStaySignedIn, onSignOutNow }) => (
437
- <div>
437
+ <section>
438
438
  <button onClick={onStaySignedIn}>Custom Stay</button>
439
439
  <button onClick={onSignOutNow}>Custom Sign Out</button>
440
- </div>
440
+ </section>
441
441
  ));
442
442
 
443
443
  // Mock tracker with warning state
@@ -454,7 +454,7 @@ describe('InactivityProvider', () => {
454
454
  );
455
455
 
456
456
  // Test that the component renders
457
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
457
+ expect(screen.getByTestId('test-component')).toBeDefined();
458
458
  });
459
459
  });
460
460
 
@@ -469,7 +469,7 @@ describe('InactivityProvider', () => {
469
469
  );
470
470
 
471
471
  // Service layer may log different messages - just verify component renders
472
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
472
+ expect(screen.getByTestId('test-component')).toBeDefined();
473
473
 
474
474
  consoleErrorSpy.mockRestore();
475
475
  });
@@ -484,7 +484,7 @@ describe('InactivityProvider', () => {
484
484
  );
485
485
 
486
486
  // Service layer may log different messages - just verify component renders
487
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
487
+ expect(screen.getByTestId('test-component')).toBeDefined();
488
488
 
489
489
  consoleWarnSpy.mockRestore();
490
490
  });
@@ -507,14 +507,14 @@ describe('InactivityProvider', () => {
507
507
  const inactivity = useInactivity();
508
508
 
509
509
  return (
510
- <div>
511
- <div data-testid="hasShowWarning">{typeof inactivity.showInactivityWarning === 'boolean' ? 'true' : 'false'}</div>
512
- <div data-testid="hasTimeRemaining">{typeof inactivity.inactivityTimeRemaining === 'number' ? 'true' : 'false'}</div>
513
- <div data-testid="hasIsIdle">{typeof inactivity.isIdle === 'boolean' ? 'true' : 'false'}</div>
514
- <div data-testid="hasTimeRemaining2">{typeof inactivity.timeRemaining === 'number' ? 'true' : 'false'}</div>
515
- <div data-testid="hasShowWarning2">{typeof inactivity.showWarning === 'boolean' ? 'true' : 'false'}</div>
516
- <div data-testid="hasIsTracking">{typeof inactivity.isTracking === 'boolean' ? 'true' : 'false'}</div>
517
- </div>
510
+ <section>
511
+ <p data-testid="hasShowWarning">{typeof inactivity.showInactivityWarning === 'boolean' ? 'true' : 'false'}</p>
512
+ <p data-testid="hasTimeRemaining">{typeof inactivity.inactivityTimeRemaining === 'number' ? 'true' : 'false'}</p>
513
+ <p data-testid="hasIsIdle">{typeof inactivity.isIdle === 'boolean' ? 'true' : 'false'}</p>
514
+ <p data-testid="hasTimeRemaining2">{typeof inactivity.timeRemaining === 'number' ? 'true' : 'false'}</p>
515
+ <p data-testid="hasShowWarning2">{typeof inactivity.showWarning === 'boolean' ? 'true' : 'false'}</p>
516
+ <p data-testid="hasIsTracking">{typeof inactivity.isTracking === 'boolean' ? 'true' : 'false'}</p>
517
+ </section>
518
518
  );
519
519
  };
520
520
 
@@ -542,7 +542,7 @@ describe('InactivityProvider', () => {
542
542
  );
543
543
 
544
544
  // Service layer handles time conversion - just verify the UI renders
545
- expect(screen.getByTestId('timeRemaining')).toBeInTheDocument();
545
+ expect(screen.getByTestId('timeRemaining')).toBeDefined();
546
546
  });
547
547
 
548
548
  it('handles fractional seconds correctly', () => {
@@ -553,7 +553,7 @@ describe('InactivityProvider', () => {
553
553
  );
554
554
 
555
555
  // Service layer handles time conversion - just verify the UI renders
556
- expect(screen.getByTestId('timeRemaining')).toBeInTheDocument();
556
+ expect(screen.getByTestId('timeRemaining')).toBeDefined();
557
557
  });
558
558
  });
559
559
 
@@ -561,7 +561,7 @@ describe('InactivityProvider', () => {
561
561
  it('handles component unmount gracefully', () => {
562
562
  const { unmount } = render(
563
563
  <TestWrapper>
564
- <div>Test content</div>
564
+ <p>Test content</p>
565
565
  </TestWrapper>
566
566
  );
567
567