@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
@@ -21,15 +21,15 @@
21
21
  * function PublicEventPage() {
22
22
  * const { eventCode, eventId, event, error, isLoading } = usePublicRouteParams();
23
23
  *
24
- * if (isLoading) return <div>Loading...</div>;
25
- * if (error) return <div>Error: {error.message}</div>;
26
- * if (!event) return <div>Event not found</div>;
24
+ * if (isLoading) return <p>Loading...</p>;
25
+ * if (error) return <p>Error: {error.message}</p>;
26
+ * if (!event) return <p>Event not found</p>;
27
27
  *
28
28
  * return (
29
- * <div>
29
+ * <section>
30
30
  * <h1>{event.event_name}</h1>
31
31
  * <p>Event Code: {eventCode}</p>
32
- * </div>
32
+ * </section>
33
33
  * );
34
34
  * }
35
35
  * ```
@@ -14,9 +14,9 @@
14
14
  * function MyComponent() {
15
15
  * const { appName, isLoading } = useAppConfig();
16
16
  *
17
- * if (isLoading) return <div>Loading...</div>;
17
+ * if (isLoading) return <p>Loading...</p>;
18
18
  *
19
- * return <div>App: {appName}</div>;
19
+ * return <p>App: {appName}</p>;
20
20
  * }
21
21
  * ```
22
22
  */
@@ -283,13 +283,13 @@ describe('useEventTheme', () => {
283
283
  throw new Error('Palette application failed');
284
284
  });
285
285
 
286
- renderHook(() => useEventTheme(), { wrapper });
287
-
288
- const logger = getMockLogger();
289
- expect(vi.mocked(logger.error)).toHaveBeenCalledWith(
290
- 'Failed to apply event palette:',
291
- expect.any(Error)
292
- );
286
+ // The hook should not throw - errors are caught silently
287
+ expect(() => {
288
+ renderHook(() => useEventTheme(), { wrapper });
289
+ }).not.toThrow();
290
+
291
+ // Verify that applyPalette was called (even though it threw)
292
+ expect(mockApplyPalette).toHaveBeenCalled();
293
293
  });
294
294
  });
295
295
 
@@ -44,9 +44,6 @@ import { EventServiceContext } from '../providers/services/EventServiceProvider'
44
44
  import { applyPalette, clearPalette } from '../theming/runtime';
45
45
  import { parseAndNormalizeEventColours } from '../theming/parseEventColours';
46
46
  import type { Event } from '../types/event';
47
- import { createLogger } from '../utils/core/logger';
48
-
49
- const log = createLogger('useEventTheme');
50
47
 
51
48
  /**
52
49
  * Hook that automatically applies event-specific theming
@@ -147,7 +144,7 @@ export function useEventTheme(event?: Event | null): void {
147
144
  try {
148
145
  applyPalette(normalized);
149
146
  } catch (error) {
150
- log.error('Failed to apply event palette:', error);
147
+ // Silently fail - theming is not critical
151
148
  }
152
149
 
153
150
  // Cleanup function to clear palette when component unmounts or event changes
@@ -26,8 +26,8 @@
26
26
  * FileCategory.EVENT_LOGOS
27
27
  * );
28
28
  *
29
- * if (isLoading) return <div>Loading...</div>;
30
- * if (error) return <div>Error: {error.message}</div>;
29
+ * if (isLoading) return <p>Loading...</p>;
30
+ * if (error) return <p>Error: {error.message}</p>;
31
31
  *
32
32
  * return fileUrl ? <img src={fileUrl} alt="File" /> : null;
33
33
  * }
@@ -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
  });