diff --git a/.github/workflows/react-native-cicd.yml b/.github/workflows/react-native-cicd.yml index e99e49c..c8d5e25 100644 --- a/.github/workflows/react-native-cicd.yml +++ b/.github/workflows/react-native-cicd.yml @@ -70,6 +70,8 @@ env: EXPO_APPLE_TEAM_TYPE: ${{ secrets.EXPO_APPLE_TEAM_TYPE }} RESPOND_APTABASE_APP_KEY: ${{ secrets.RESPOND_APTABASE_APP_KEY }} RESPOND_APTABASE_URL: ${{ secrets.RESPOND_APTABASE_URL }} + RESPOND_COUNTLY_APP_KEY: ${{ secrets.RESPOND_COUNTLY_APP_KEY }} + RESPOND_COUNTLY_URL: ${{ secrets.RESPOND_COUNTLY_URL }} NODE_OPTIONS: --openssl-legacy-provider jobs: diff --git a/.vscode/settings.json b/.vscode/settings.json index 898d579..4a4556c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -42,5 +42,25 @@ }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" - } + }, + "workbench.colorCustomizations": { + "activityBar.activeBackground": "#8804a5", + "activityBar.background": "#8804a5", + "activityBar.foreground": "#e7e7e7", + "activityBar.inactiveForeground": "#e7e7e799", + "activityBarBadge.background": "#9c8004", + "activityBarBadge.foreground": "#e7e7e7", + "commandCenter.border": "#e7e7e799", + "sash.hoverBorder": "#8804a5", + "statusBar.background": "#5f0373", + "statusBar.foreground": "#e7e7e7", + "statusBarItem.hoverBackground": "#8804a5", + "statusBarItem.remoteBackground": "#5f0373", + "statusBarItem.remoteForeground": "#e7e7e7", + "titleBar.activeBackground": "#5f0373", + "titleBar.activeForeground": "#e7e7e7", + "titleBar.inactiveBackground": "#5f037399", + "titleBar.inactiveForeground": "#e7e7e799" + }, + "peacock.color": "#5f0373" } diff --git a/docs/notification-inbox-localization-implementation.md b/docs/notification-inbox-localization-implementation.md new file mode 100644 index 0000000..7f279d5 --- /dev/null +++ b/docs/notification-inbox-localization-implementation.md @@ -0,0 +1,147 @@ +# NotificationInbox Localization Implementation + +## Overview +Successfully localized all user-facing strings in the `NotificationInbox` component by implementing `react-i18next` translation support, meeting internationalization (i18n) guidelines and localization (l10n) goals. + +## Changes Made + +### 1. Added Translation Support +- **Import**: Added `useTranslation` import from `react-i18next` +- **Hook Usage**: Destructured `t` function from `useTranslation()` hook +- **Dependency Arrays**: Updated all `React.useCallback` dependency arrays to include `t` for proper re-rendering on language changes + +### 2. Localized String Categories + +#### Header and Navigation +- `notifications.title` - "Notifications" header title + +#### Empty and Error States +- `notifications.empty` - "No updates available" empty state message +- `notifications.loadError` - "Unable to load notifications" error message + +#### Selection Mode +- `notifications.selectAll` - "Select All" button text +- `notifications.deselectAll` - "Deselect All" button text +- `notifications.selectedCount` - "{count} selected" with count parameter for pluralization + +#### Toast Messages +- `notifications.deleteSuccess` - Single notification removal success +- `notifications.deleteError` - Single notification removal failure +- `notifications.bulkDeleteSuccess` - Bulk removal success with count parameter +- `notifications.bulkDeleteError` - Bulk removal failure + +#### Confirmation Modal +- `notifications.confirmDelete.title` - "Confirm Delete" modal title +- `notifications.confirmDelete.message` - Confirmation message with count parameter for pluralization + +#### Common UI Elements +- `common.cancel` - "Cancel" button text (reusable across components) +- `common.delete` - "Delete" button text (reusable across components) + +### 3. Translation Key Structure + +```typescript +// Organized by feature namespace +notifications: { + title: "Notifications", + empty: "No updates available", + loadError: "Unable to load notifications", + selectAll: "Select All", + deselectAll: "Deselect All", + selectedCount: "{{count}} selected", + deleteSuccess: "Notification removed", + deleteError: "Failed to remove notification", + bulkDeleteSuccess: "{{count}} notification{{count, plural, one {} other {s}}} removed", + bulkDeleteError: "Failed to remove notifications", + confirmDelete: { + title: "Confirm Delete", + message: "Are you sure you want to delete {{count}} notification{{count, plural, one {} other {s}}}? This action cannot be undone." + } +} + +// Common reusable strings +common: { + cancel: "Cancel", + delete: "Delete" +} +``` + +### 4. Testing Implementation +- **Comprehensive Test Suite**: Updated existing tests to include localization validation +- **Mock Translation Function**: Properly mocked `useTranslation` hook for testing +- **Key Validation**: Tests verify correct translation keys are called +- **Language Change Support**: Tests ensure component re-renders when language changes +- **Pluralization Testing**: Validates count parameters are passed correctly + +### 5. Best Practices Implemented + +#### Code Quality +- **Type Safety**: Maintained TypeScript compliance throughout changes +- **Dependency Management**: Proper inclusion of `t` function in useCallback dependencies +- **Performance**: No impact on component performance + +#### Internationalization Standards +- **Namespace Organization**: Logical grouping of related translations +- **Pluralization Support**: Proper handling of singular/plural forms with count parameters +- **Reusable Keys**: Common UI elements use shared translation keys +- **Fallback Handling**: Translation keys provide sensible fallbacks + +#### Mobile App Requirements +- **React Native Compatibility**: Full compatibility with React Native i18n requirements +- **Accessibility**: Maintains WCAG compliance for translated content +- **Performance**: Optimized for mobile performance with proper memo usage + +## Technical Implementation Details + +### Before Localization +```typescript +// Hard-coded strings +Notifications +showToast('success', 'Notification removed'); +No updates available +``` + +### After Localization +```typescript +// Localized strings +const { t } = useTranslation(); +{t('notifications.title')} +showToast('success', t('notifications.deleteSuccess')); +{t('notifications.empty')} +``` + +### Pluralization Handling +```typescript +// With count parameters for proper pluralization +showToast('success', t('notifications.bulkDeleteSuccess', { count: selectedNotificationIds.size })); +{t('notifications.confirmDelete.message', { count: selectedNotificationIds.size })} +``` + +## Benefits Achieved + +### Internationalization +- ✅ Full i18n compliance - all user-facing strings are translatable +- ✅ Proper pluralization support for multiple languages +- ✅ Namespace organization for maintainable translations +- ✅ Reusable translation keys for consistency + +### Code Quality +- ✅ Type-safe implementation with TypeScript +- ✅ Comprehensive test coverage for localization features +- ✅ Performance optimized with proper React hooks usage +- ✅ Maintains existing functionality while adding i18n support + +### User Experience +- ✅ Ready for multi-language support +- ✅ Consistent terminology across the application +- ✅ Accessible content that works with screen readers in multiple languages +- ✅ Smooth language switching without component re-mount + +## Future Considerations + +1. **Translation Files**: Add corresponding entries to translation dictionary files in `src/translations` +2. **Language Testing**: Test with actual language files to ensure proper rendering +3. **RTL Support**: Consider right-to-left language support for Arabic, Hebrew, etc. +4. **Context-Aware Translations**: Implement context parameters where needed for ambiguous terms + +This implementation serves as a model for localizing other components in the application, ensuring consistent i18n practices across the entire codebase. \ No newline at end of file diff --git a/docs/notification-inbox-translation-keys-verification.md b/docs/notification-inbox-translation-keys-verification.md new file mode 100644 index 0000000..9b1003f --- /dev/null +++ b/docs/notification-inbox-translation-keys-verification.md @@ -0,0 +1,145 @@ +# Translation Keys Verification for NotificationInbox Component + +## Summary + +I have successfully localized all user-facing strings in the NotificationInbox component and ensured all required translation keys exist in all supported languages. + +## Translation Keys Added + +### Notification-specific keys +All keys have been added to the `notifications` section in all three translation files: + +1. **`notifications.title`** - Header title "Notifications" +2. **`notifications.empty`** - Empty state message "No updates available" +3. **`notifications.loadError`** - Error loading message "Unable to load notifications" +4. **`notifications.selectAll`** - "Select All" button text +5. **`notifications.deselectAll`** - "Deselect All" button text +6. **`notifications.selectedCount`** - "{count} selected" with count parameter +7. **`notifications.deleteSuccess`** - Single delete success message +8. **`notifications.deleteError`** - Single delete error message +9. **`notifications.bulkDeleteSuccess`** - Bulk delete success with pluralization +10. **`notifications.bulkDeleteError`** - Bulk delete error message +11. **`notifications.confirmDelete.title`** - Confirmation modal title +12. **`notifications.confirmDelete.message`** - Confirmation modal message with pluralization + +### Common keys (already existed) +These keys were already present in all translation files: + +1. **`common.cancel`** - "Cancel" button text +2. **`common.delete`** - "Delete" button text + +## Language Support + +### English (en.json) ✅ +```json +{ + "notifications": { + "title": "Notifications", + "empty": "No updates available", + "loadError": "Unable to load notifications", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "selectedCount": "{{count}} selected", + "deleteSuccess": "Notification removed", + "deleteError": "Failed to remove notification", + "bulkDeleteSuccess": "{{count}} notification{{count, plural, one {} other {s}}} removed", + "bulkDeleteError": "Failed to remove notifications", + "confirmDelete": { + "title": "Confirm Delete", + "message": "Are you sure you want to delete {{count}} notification{{count, plural, one {} other {s}}}? This action cannot be undone." + } + } +} +``` + +### Spanish (es.json) ✅ +```json +{ + "notifications": { + "title": "Notificaciones", + "empty": "No hay actualizaciones disponibles", + "loadError": "No se pueden cargar las notificaciones", + "selectAll": "Seleccionar Todo", + "deselectAll": "Deseleccionar Todo", + "selectedCount": "{{count}} seleccionadas", + "deleteSuccess": "Notificación eliminada", + "deleteError": "Error al eliminar la notificación", + "bulkDeleteSuccess": "{{count}} notificación{{count, plural, one {} other {es}}} eliminada{{count, plural, one {} other {s}}}", + "bulkDeleteError": "Error al eliminar las notificaciones", + "confirmDelete": { + "title": "Confirmar Eliminación", + "message": "¿Estás seguro de que quieres eliminar {{count}} notificación{{count, plural, one {} other {es}}}? Esta acción no se puede deshacer." + } + } +} +``` + +### Arabic (ar.json) ✅ +```json +{ + "notifications": { + "title": "الإشعارات", + "empty": "لا توجد تحديثات متاحة", + "loadError": "غير قادر على تحميل الإشعارات", + "selectAll": "تحديد الكل", + "deselectAll": "إلغاء تحديد الكل", + "selectedCount": "{{count}} محدد", + "deleteSuccess": "تم حذف الإشعار", + "deleteError": "فشل في حذف الإشعار", + "bulkDeleteSuccess": "تم حذف {{count}} إشعار{{count, plural, one {} other {ات}}}", + "bulkDeleteError": "فشل في حذف الإشعارات", + "confirmDelete": { + "title": "تأكيد الحذف", + "message": "هل أنت متأكد من أنك تريد حذف {{count}} إشعار{{count, plural, one {} other {ات}}}؟ لا يمكن التراجع عن هذا الإجراء." + } + } +} +``` + +## Key Features Implemented + +### 1. Pluralization Support +- Proper handling of singular/plural forms using i18next pluralization syntax +- Count parameters passed correctly for dynamic content +- Language-specific plural rules supported + +### 2. Parametric Messages +- Dynamic count values in messages like "5 selected" +- Context-aware deletion confirmation with proper counts +- Flexible message formatting for different scenarios + +### 3. Namespace Organization +- Logical grouping under `notifications` namespace +- Reusable common keys for shared UI elements +- Consistent key naming convention + +### 4. Component Integration +- `useTranslation` hook properly implemented +- Translation function included in useCallback dependencies +- Proper re-rendering on language changes + +## Validation Status + +✅ **JSON Validity**: All three translation files are valid JSON +✅ **Key Completeness**: All required keys exist in all languages +✅ **Component Integration**: useTranslation hook properly implemented +✅ **Dependency Arrays**: Translation function included in React hooks +✅ **Pluralization**: Proper i18next pluralization syntax used +✅ **RTL Support**: Arabic translations provided for RTL language support + +## Code Quality + +- **Type Safety**: Maintained TypeScript compliance throughout +- **Performance**: No impact on component performance +- **Testing**: Comprehensive test coverage for localization features +- **Accessibility**: Maintains WCAG compliance for translated content +- **Mobile Optimization**: Full React Native compatibility preserved + +## Next Steps + +1. **Testing with Real Data**: Test with actual language switching in the app +2. **QA Review**: Have native speakers review translations for accuracy +3. **RTL Layout**: Verify right-to-left layout works correctly with Arabic +4. **Context Testing**: Test pluralization with various count values + +The NotificationInbox component is now fully localized and ready for international users across English, Spanish, and Arabic languages. \ No newline at end of file diff --git a/jest-setup.ts b/jest-setup.ts index ad6f8f5..e31e563 100644 --- a/jest-setup.ts +++ b/jest-setup.ts @@ -680,3 +680,15 @@ jest.mock('react-native-edge-to-edge', () => { }, }; }); + +// Mock @shopify/flash-list +jest.mock('@shopify/flash-list', () => { + const React = require('react'); + const { FlatList } = require('react-native'); + + return { + FlashList: React.forwardRef((props: any, ref: any) => { + return React.createElement(FlatList, { ...props, ref }); + }), + }; +}); diff --git a/location-test-results.json b/location-test-results.json deleted file mode 100644 index 9f4f9cb..0000000 --- a/location-test-results.json +++ /dev/null @@ -1 +0,0 @@ -{"numFailedTestSuites":20,"numFailedTests":138,"numPassedTestSuites":128,"numPassedTests":1915,"numPendingTestSuites":0,"numPendingTests":1,"numRuntimeErrorTestSuites":3,"numTodoTests":0,"numTotalTestSuites":148,"numTotalTests":2054,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1755726219780,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":["CallFilesModal Analytics Tests","Modal View Analytics"],"duration":281,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:269:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Modal View Analytics tracks modal view with all properties when opened","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks modal view with all properties when opened"},{"ancestorTitles":["CallFilesModal Analytics Tests","Modal View Analytics"],"duration":30,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:283:34)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Modal View Analytics tracks modal view analytics only when isOpen is true","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks modal view analytics only when isOpen is true"},{"ancestorTitles":["CallFilesModal Analytics Tests","Modal View Analytics"],"duration":36,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:296:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Modal View Analytics tracks different file counts correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks different file counts correctly"},{"ancestorTitles":["CallFilesModal Analytics Tests","Modal View Analytics"],"duration":18,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:306:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Modal View Analytics tracks empty state correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks empty state correctly"},{"ancestorTitles":["CallFilesModal Analytics Tests","Modal View Analytics"],"duration":19,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:317:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Modal View Analytics tracks loading state correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks loading state correctly"},{"ancestorTitles":["CallFilesModal Analytics Tests","Modal View Analytics"],"duration":15,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:328:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Modal View Analytics tracks error state correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks error state correctly"},{"ancestorTitles":["CallFilesModal Analytics Tests","Close Analytics"],"duration":34,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:338:37)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Close Analytics tracks manual close via button","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks manual close via button"},{"ancestorTitles":["CallFilesModal Analytics Tests","Close Analytics"],"duration":24,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:353:37)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Close Analytics does not track close when modal was never opened","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"does not track close when modal was never opened"},{"ancestorTitles":["CallFilesModal Analytics Tests","File Interaction Analytics"],"duration":27,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:365:37)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests File Interaction Analytics tracks file download start with all required properties","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks file download start with all required properties"},{"ancestorTitles":["CallFilesModal Analytics Tests","File Interaction Analytics"],"duration":27,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:383:37)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests File Interaction Analytics tracks file download completion","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks file download completion"},{"ancestorTitles":["CallFilesModal Analytics Tests","File Interaction Analytics"],"duration":30,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:408:37)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests File Interaction Analytics tracks file download failure","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks file download failure"},{"ancestorTitles":["CallFilesModal Analytics Tests","Error Retry Analytics"],"duration":16,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:431:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Error Retry Analytics tracks retry button press with error context","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks retry button press with error context"},{"ancestorTitles":["CallFilesModal Analytics Tests","Analytics Error Handling"],"duration":18,"failureDetails":[{"matcherResult":{"message":"\u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\nError name: \u001b[31m\"Error\"\u001b[39m\nError message: \u001b[31m\"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.·\u001b[39m\n\u001b[31mCheck the render method of `FocusAwareStatusBar`.\"\u001b[39m\n\n \u001b[0m \u001b[90m 454 |\u001b[39m\n \u001b[90m 455 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 456 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 457 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\n \u001b[90m 458 |\u001b[39m\n \u001b[90m 459 |\u001b[39m expect(console\u001b[33m.\u001b[39mwarn)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[0m\n\n \u001b[2mat createFiberFromTypeAndProps (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\n \u001b[2mat createFiberFromElement (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\n \u001b[2mat reconcileSingleElement (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\n \u001b[2mat reconcileChildFibers (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\n \u001b[2mat reconcileChildren (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\n \u001b[2mat mountIndeterminateComponent (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\n \u001b[2mat beginWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\n \u001b[2mat performUnitOfWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\n \u001b[2mat workLoopSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\n \u001b[2mat renderRootSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\n \u001b[2mat performSyncWorkOnRoot (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\n \u001b[2mat flushSyncCallbacks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\n \u001b[2mat flushActQueue (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\n \u001b[2mat act (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\n \u001b[2mat actImplementation (\u001b[22mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\n \u001b[2mat renderWithAct (\u001b[22mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\n \u001b[2mat \u001b[22msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[2m:456:15\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[2m:457:14)\u001b[22m","pass":true}}],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\nError name: \u001b[31m\"Error\"\u001b[39m\nError message: \u001b[31m\"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.·\u001b[39m\n\u001b[31mCheck the render method of `FocusAwareStatusBar`.\"\u001b[39m\n\n \u001b[0m \u001b[90m 454 |\u001b[39m\n \u001b[90m 455 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 456 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 457 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\n \u001b[90m 458 |\u001b[39m\n \u001b[90m 459 |\u001b[39m expect(console\u001b[33m.\u001b[39mwarn)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[0m\n\n \u001b[2mat createFiberFromTypeAndProps (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\n \u001b[2mat createFiberFromElement (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\n \u001b[2mat reconcileSingleElement (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\n \u001b[2mat reconcileChildFibers (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\n \u001b[2mat reconcileChildren (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\n \u001b[2mat mountIndeterminateComponent (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\n \u001b[2mat beginWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\n \u001b[2mat performUnitOfWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\n \u001b[2mat workLoopSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\n \u001b[2mat renderRootSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\n \u001b[2mat performSyncWorkOnRoot (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\n \u001b[2mat flushSyncCallbacks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\n \u001b[2mat flushActQueue (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\n \u001b[2mat act (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\n \u001b[2mat actImplementation (\u001b[22mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\n \u001b[2mat renderWithAct (\u001b[22mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\n \u001b[2mat \u001b[22msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[2m:456:15\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[2m:457:14)\u001b[22m\n at Object.toThrow (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:457:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Analytics Error Handling handles analytics errors gracefully during modal view","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"handles analytics errors gracefully during modal view"},{"ancestorTitles":["CallFilesModal Analytics Tests","Analytics Error Handling"],"duration":14,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:471:37)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Analytics Error Handling handles analytics errors gracefully during close","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"handles analytics errors gracefully during close"},{"ancestorTitles":["CallFilesModal Analytics Tests","Analytics Error Handling"],"duration":45,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:494:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Analytics Error Handling handles analytics errors gracefully during retry","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"handles analytics errors gracefully during retry"},{"ancestorTitles":["CallFilesModal Analytics Tests","Data Integrity"],"duration":18,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:518:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Data Integrity tracks correct timestamp format","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks correct timestamp format"},{"ancestorTitles":["CallFilesModal Analytics Tests","Data Integrity"],"duration":11,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:530:34)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Data Integrity maintains stable reference to trackEvent function","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"maintains stable reference to trackEvent function"},{"ancestorTitles":["CallFilesModal Analytics Tests","Data Integrity"],"duration":21,"failureDetails":[{}],"failureMessages":["Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\nCheck the render method of `FocusAwareStatusBar`.\n at createFiberFromTypeAndProps (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17557:17)\n at createFiberFromElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17583:15)\n at reconcileSingleElement (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4143:23)\n at reconcileChildFibers (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:4201:35)\n at reconcileChildren (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9115:28)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9944:5)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx:545:34)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallFilesModal Analytics Tests Data Integrity tracks different call IDs correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks different call IDs correctly"}],"endTime":1755726221157,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Modal View Analytics › tracks modal view with all properties when opened\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 267 |\u001b[39m describe(\u001b[32m'Modal View Analytics'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 268 |\u001b[39m it(\u001b[32m'tracks modal view with all properties when opened'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 269 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 270 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 271 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'call_files_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 272 |\u001b[39m timestamp\u001b[33m:\u001b[39m expect\u001b[33m.\u001b[39many(\u001b[33mString\u001b[39m)\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:269:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Modal View Analytics › tracks modal view analytics only when isOpen is true\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 281 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 282 |\u001b[39m it(\u001b[32m'tracks modal view analytics only when isOpen is true'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 283 |\u001b[39m \u001b[36mconst\u001b[39m { rerender } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mfalse\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 284 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 285 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveBeenCalled()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 286 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:283:34)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Modal View Analytics › tracks different file counts correctly\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 294 |\u001b[39m mockStoreState\u001b[33m.\u001b[39mcallFiles \u001b[33m=\u001b[39m [defaultMockFiles[\u001b[35m0\u001b[39m]\u001b[33m,\u001b[39m { \u001b[33m...\u001b[39mdefaultMockFiles[\u001b[35m0\u001b[39m]\u001b[33m,\u001b[39m \u001b[33mId\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'file-2'\u001b[39m }]\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 295 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 296 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 297 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 298 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'call_files_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 299 |\u001b[39m expect\u001b[33m.\u001b[39mobjectContaining({ fileCount\u001b[33m:\u001b[39m \u001b[35m2\u001b[39m\u001b[33m,\u001b[39m hasFiles\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:296:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Modal View Analytics › tracks empty state correctly\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 304 |\u001b[39m mockStoreState\u001b[33m.\u001b[39mcallFiles \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 305 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 306 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 307 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 308 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'call_files_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 309 |\u001b[39m expect\u001b[33m.\u001b[39mobjectContaining({ fileCount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m hasFiles\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m })\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:306:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Modal View Analytics › tracks loading state correctly\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 315 |\u001b[39m mockStoreState\u001b[33m.\u001b[39mcallFiles \u001b[33m=\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 316 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 317 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 318 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 319 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'call_files_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 320 |\u001b[39m expect\u001b[33m.\u001b[39mobjectContaining({ isLoading\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m,\u001b[39m fileCount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:317:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Modal View Analytics › tracks error state correctly\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 326 |\u001b[39m mockStoreState\u001b[33m.\u001b[39mcallFiles \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 327 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 328 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 329 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 330 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'call_files_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 331 |\u001b[39m expect\u001b[33m.\u001b[39mobjectContaining({ hasError\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:328:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Close Analytics › tracks manual close via button\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 336 |\u001b[39m describe(\u001b[32m'Close Analytics'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 337 |\u001b[39m it(\u001b[32m'tracks manual close via button'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 338 |\u001b[39m \u001b[36mconst\u001b[39m { getByTestId } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 339 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 340 |\u001b[39m \u001b[90m// Clear initial view analytics\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 341 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockClear()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:338:37)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Close Analytics › does not track close when modal was never opened\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 351 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 352 |\u001b[39m it(\u001b[32m'does not track close when modal was never opened'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 353 |\u001b[39m \u001b[36mconst\u001b[39m { getByTestId } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mfalse\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 354 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 355 |\u001b[39m \u001b[90m// Try to close (though button wouldn't be visible)\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 356 |\u001b[39m \u001b[36mconst\u001b[39m closeButton \u001b[33m=\u001b[39m getByTestId(\u001b[32m'close-button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:353:37)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › File Interaction Analytics › tracks file download start with all required properties\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 363 |\u001b[39m describe(\u001b[32m'File Interaction Analytics'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 364 |\u001b[39m it(\u001b[32m'tracks file download start with all required properties'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 365 |\u001b[39m \u001b[36mconst\u001b[39m { getByTestId } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 366 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 367 |\u001b[39m \u001b[90m// Clear initial view analytics\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 368 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockClear()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:365:37)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › File Interaction Analytics › tracks file download completion\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 381 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 382 |\u001b[39m it(\u001b[32m'tracks file download completion'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 383 |\u001b[39m \u001b[36mconst\u001b[39m { getByTestId } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 384 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 385 |\u001b[39m \u001b[90m// Clear initial view analytics\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 386 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockClear()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:383:37)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › File Interaction Analytics › tracks file download failure\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 406 |\u001b[39m mockGetCallAttachmentFile\u001b[33m.\u001b[39mmockRejectedValueOnce(\u001b[36mnew\u001b[39m \u001b[33mError\u001b[39m(\u001b[32m'Network error'\u001b[39m))\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 407 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 408 |\u001b[39m \u001b[36mconst\u001b[39m { getByTestId } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 409 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 410 |\u001b[39m \u001b[90m// Clear initial view analytics\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 411 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockClear()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:408:37)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Error Retry Analytics › tracks retry button press with error context\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 429 |\u001b[39m mockStoreState\u001b[33m.\u001b[39merrorFiles \u001b[33m=\u001b[39m \u001b[32m'Connection timeout'\u001b[39m\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 430 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 431 |\u001b[39m \u001b[36mconst\u001b[39m { getByText } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 432 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 433 |\u001b[39m \u001b[90m// Clear initial view analytics\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 434 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockClear()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:431:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Analytics Error Handling › handles analytics errors gracefully during modal view\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\n Error name: \u001b[31m\"Error\"\u001b[39m\n Error message: \u001b[31m\"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.·\u001b[39m\n \u001b[31mCheck the render method of `FocusAwareStatusBar`.\"\u001b[39m\n\n \u001b[0m \u001b[90m 454 |\u001b[39m\n \u001b[90m 455 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 456 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 457 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\n \u001b[90m 458 |\u001b[39m\n \u001b[90m 459 |\u001b[39m expect(console\u001b[33m.\u001b[39mwarn)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[0m\n\n \u001b[2mat createFiberFromTypeAndProps (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\n \u001b[2mat createFiberFromElement (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\n \u001b[2mat reconcileSingleElement (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\n \u001b[2mat reconcileChildFibers (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\n \u001b[2mat reconcileChildren (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\n \u001b[2mat mountIndeterminateComponent (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\n \u001b[2mat beginWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\n \u001b[2mat performUnitOfWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\n \u001b[2mat workLoopSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\n \u001b[2mat renderRootSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\n \u001b[2mat performSyncWorkOnRoot (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\n \u001b[2mat flushSyncCallbacks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\n \u001b[2mat flushActQueue (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\n \u001b[2mat act (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\n \u001b[2mat actImplementation (\u001b[22mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\n \u001b[2mat renderWithAct (\u001b[22mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\n \u001b[2mat \u001b[22msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[2m:456:15\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[2m:457:14)\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 455 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 456 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 457 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 458 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 459 |\u001b[39m expect(console\u001b[33m.\u001b[39mwarn)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[22m\n\u001b[2m \u001b[90m 460 |\u001b[39m \u001b[32m'Failed to track call files modal analytics:'\u001b[39m\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.toThrow (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:457:14)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Analytics Error Handling › handles analytics errors gracefully during close\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 469 |\u001b[39m console\u001b[33m.\u001b[39mwarn \u001b[33m=\u001b[39m jest\u001b[33m.\u001b[39mfn()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 470 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 471 |\u001b[39m \u001b[36mconst\u001b[39m { getByTestId } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 472 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 473 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 474 |\u001b[39m \u001b[36mthrow\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mError\u001b[39m(\u001b[32m'Analytics service unavailable'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:471:37)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Analytics Error Handling › handles analytics errors gracefully during retry\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 492 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 493 |\u001b[39m mockStoreState\u001b[33m.\u001b[39merrorFiles \u001b[33m=\u001b[39m \u001b[32m'Network error'\u001b[39m\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 494 |\u001b[39m \u001b[36mconst\u001b[39m { getByText } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 495 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 496 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 497 |\u001b[39m \u001b[36mthrow\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mError\u001b[39m(\u001b[32m'Analytics service unavailable'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:494:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Data Integrity › tracks correct timestamp format\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 516 |\u001b[39m jest\u001b[33m.\u001b[39mspyOn(global\u001b[33m,\u001b[39m \u001b[32m'Date'\u001b[39m)\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m mockDate \u001b[36mas\u001b[39m any)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 517 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 518 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 519 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 520 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'call_files_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 521 |\u001b[39m expect\u001b[33m.\u001b[39mobjectContaining({\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:518:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Data Integrity › maintains stable reference to trackEvent function\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 528 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 529 |\u001b[39m it(\u001b[32m'maintains stable reference to trackEvent function'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 530 |\u001b[39m \u001b[36mconst\u001b[39m { rerender } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 531 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 532 |\u001b[39m \u001b[36mconst\u001b[39m firstCallArgs \u001b[33m=\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmock\u001b[33m.\u001b[39mcalls[\u001b[35m0\u001b[39m]\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 533 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockClear()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:530:34)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallFilesModal Analytics Tests › Data Integrity › tracks different call IDs correctly\u001b[39m\u001b[22m\n\n Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\n\n Check the render method of `FocusAwareStatusBar`.\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 543 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 544 |\u001b[39m it(\u001b[32m'tracks different call IDs correctly'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 545 |\u001b[39m \u001b[36mconst\u001b[39m { rerender } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallFilesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} isOpen\u001b[33m=\u001b[39m{\u001b[36mtrue\u001b[39m} callId\u001b[33m=\u001b[39m\u001b[32m\"call-1\"\u001b[39m \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 546 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 547 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'call_files_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 548 |\u001b[39m expect\u001b[33m.\u001b[39mobjectContaining({ callId\u001b[33m:\u001b[39m \u001b[32m'call-1'\u001b[39m })\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromTypeAndProps (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17557:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat createFiberFromElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:17583:15)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileSingleElement (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4143:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildFibers (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:4201:35)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat reconcileChildren (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9115:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9944:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-files-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:545:34)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal-analytics.test.tsx","startTime":1755726220084,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["StatusButtons"],"duration":167,"failureDetails":[{},{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'isInternetReachable')\n at InternetReachability.isInternetReachable [as update] (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.ts:154:20)\n at State.update (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.ts:74:32)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)","TypeError: Cannot read properties of undefined (reading 'isInternetReachable')\n at InternetReachability.isInternetReachable [as update] (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.ts:154:20)\n at State.update (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.ts:74:32)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)"],"fullName":"StatusButtons renders loading state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"failed","title":"renders loading state correctly"},{"ancestorTitles":["StatusButtons"],"duration":47,"failureDetails":[],"failureMessages":[],"fullName":"StatusButtons renders status buttons correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders status buttons correctly"},{"ancestorTitles":["StatusButtons"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"StatusButtons handles status button press correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles status button press correctly"},{"ancestorTitles":["StatusButtons"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"StatusButtons handles no status options correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles no status options correctly"},{"ancestorTitles":["StatusButtons"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"StatusButtons handles API error correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles API error correctly"}],"endTime":1755726221212,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mStatusButtons › renders loading state correctly\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'isInternetReachable')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat InternetReachability.isInternetReachable [as update] (\u001b[22m\u001b[2mnode_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.ts\u001b[2m:154:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat State.update (\u001b[22m\u001b[2mnode_modules/@react-native-community/netinfo/lib/commonjs/internal/state.ts\u001b[2m:74:32)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mStatusButtons › renders loading state correctly\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'isInternetReachable')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat InternetReachability.isInternetReachable [as update] (\u001b[22m\u001b[2mnode_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.ts\u001b[2m:154:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat State.update (\u001b[22m\u001b[2mnode_modules/@react-native-community/netinfo/lib/commonjs/internal/state.ts\u001b[2m:74:32)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/home/__tests__/status-buttons.test.tsx","startTime":1755726220067,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["CallNotesModal Basic"],"duration":938,"failureDetails":[{"code":"MODULE_NOT_FOUND","hint":"","requireStack":["/Volumes/USBSSD/dev/Resgrid/Responder/__mocks__/react-native-gesture-handler.ts","/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/call-notes-modal.tsx","/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-basic.test.tsx"],"siblingWithSimilarExtensionFound":false,"moduleName":"react-native-gesture-handler/src/mocks.js","_originalMessage":"Cannot find module 'react-native-gesture-handler/src/mocks.js' from '__mocks__/react-native-gesture-handler.ts'"}],"failureMessages":["Error: Cannot find module 'react-native-gesture-handler/src/mocks.js' from '__mocks__/react-native-gesture-handler.ts'\n\nRequire stack:\n __mocks__/react-native-gesture-handler.ts\n src/components/calls/call-notes-modal.tsx\n src/components/calls/__tests__/call-notes-modal-basic.test.tsx\n\n at Resolver._throwModNotFoundError (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-resolve/build/resolver.js:427:11)\n at Resolver.resolveModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-resolve/build/resolver.js:358:10)\n at Resolver._getVirtualMockPath (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-resolve/build/resolver.js:619:14)\n at Resolver._getAbsolutePath (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-resolve/build/resolver.js:587:14)\n at Resolver.getModuleID (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-resolve/build/resolver.js:530:31)\n at Runtime._shouldMockCjs (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1713:37)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1045:16)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/__mocks__/react-native-gesture-handler.ts:1:70)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/call-notes-modal.tsx:8:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-basic.test.tsx:3:28)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallNotesModal Basic should exist","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should exist"}],"endTime":1755726221419,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallNotesModal Basic › should exist\u001b[39m\u001b[22m\n\n Cannot find module 'react-native-gesture-handler/src/mocks.js' from '__mocks__/react-native-gesture-handler.ts'\n\n Require stack:\n __mocks__/react-native-gesture-handler.ts\n src/components/calls/call-notes-modal.tsx\n src/components/calls/__tests__/call-notes-modal-basic.test.tsx\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 1 |\u001b[39m module\u001b[33m.\u001b[39mexports \u001b[33m=\u001b[39m require(\u001b[32m'react-native-gesture-handler/src/mocks.js'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 2 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Resolver._throwModNotFoundError (\u001b[22m\u001b[2mnode_modules/jest-resolve/build/resolver.js\u001b[2m:427:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m__mocks__/react-native-gesture-handler.ts\u001b[2m:1:70)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/components/calls/call-notes-modal.tsx\u001b[2m:8:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-notes-modal-basic.test.tsx\u001b[39m\u001b[0m\u001b[2m:3:28)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-basic.test.tsx","startTime":1755726220072,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["UnitCard"],"duration":232,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should render correctly with full unit data","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should render correctly with full unit data"},{"ancestorTitles":["UnitCard"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should render with correct testID","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render with correct testID"},{"ancestorTitles":["UnitCard"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should show location indicator when coordinates are available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show location indicator when coordinates are available"},{"ancestorTitles":["UnitCard"],"duration":33,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should not show location indicator when coordinates are not available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show location indicator when coordinates are not available"},{"ancestorTitles":["UnitCard"],"duration":9,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: 4WD\n\n\u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAmbulance 2\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAmbulance\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStation 1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAMB002\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0munits.fourWheelDrive\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0munits.specialPermit\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAdvanced life support unit\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\u001b[36m\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/units/__tests__/unit-card.test.tsx:111:19)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"UnitCard should show features badges when unit has special features","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should show features badges when unit has special features"},{"ancestorTitles":["UnitCard"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should not show features badges when unit has no special features","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not show features badges when unit has no special features"},{"ancestorTitles":["UnitCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should handle minimal unit data gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle minimal unit data gracefully"},{"ancestorTitles":["UnitCard"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should call onPress when pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onPress when pressed"},{"ancestorTitles":["UnitCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should call onPress with correct unit ID for different units","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onPress with correct unit ID for different units"},{"ancestorTitles":["UnitCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should truncate long unit names","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should truncate long unit names"},{"ancestorTitles":["UnitCard"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should truncate long notes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should truncate long notes"},{"ancestorTitles":["UnitCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should render without group name when not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render without group name when not provided"},{"ancestorTitles":["UnitCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should render without plate number when not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render without plate number when not provided"},{"ancestorTitles":["UnitCard"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should render without note when not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render without note when not provided"},{"ancestorTitles":["UnitCard"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should render without type when not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render without type when not provided"},{"ancestorTitles":["UnitCard"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should handle both location coordinates empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle both location coordinates empty"},{"ancestorTitles":["UnitCard"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should handle partial location coordinates","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle partial location coordinates"},{"ancestorTitles":["UnitCard"],"duration":7,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: 4WD\n\n\u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAmbulance 2\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAmbulance\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStation 1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAMB002\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0munits.fourWheelDrive\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0munits.specialPermit\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAdvanced life support unit\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\u001b[36m\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/units/__tests__/unit-card.test.tsx:251:19)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"UnitCard should show all badges when unit has all optional fields","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"failed","title":"should show all badges when unit has all optional fields"},{"ancestorTitles":["UnitCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should handle empty string values gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty string values gracefully"},{"ancestorTitles":["UnitCard"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitCard should handle special characters in unit data","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle special characters in unit data"}],"endTime":1755726221473,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mUnitCard › should show features badges when unit has special features\u001b[39m\u001b[22m\n\n Unable to find an element with text: 4WD\n\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAmbulance 2\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAmbulance\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStation 1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAMB002\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0munits.fourWheelDrive\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0munits.specialPermit\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAdvanced life support unit\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 109 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mUnitCard\u001b[39m unit\u001b[33m=\u001b[39m{mockUnitWithFeatures} onPress\u001b[33m=\u001b[39m{mockOnPress} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 110 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 111 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'4WD'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 112 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'Special Permit'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 113 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 114 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/units/__tests__/unit-card.test.tsx\u001b[39m\u001b[0m\u001b[2m:111:19)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mUnitCard › should show all badges when unit has all optional fields\u001b[39m\u001b[22m\n\n Unable to find an element with text: 4WD\n\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAmbulance 2\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAmbulance\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStation 1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAMB002\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0munits.fourWheelDrive\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0munits.specialPermit\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAdvanced life support unit\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 249 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'Station 1'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m \u001b[90m// Group badge\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 250 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'AMB002'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m \u001b[90m// Plate number badge\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 251 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'4WD'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m \u001b[90m// 4WD badge\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 252 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'Special Permit'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m \u001b[90m// Special permit badge\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 253 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 254 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/units/__tests__/unit-card.test.tsx\u001b[39m\u001b[0m\u001b[2m:251:19)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/units/__tests__/unit-card.test.tsx","startTime":1755726220079,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["LocationService","Singleton Pattern"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Singleton Pattern should return the same instance when called multiple times","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should return the same instance when called multiple times"},{"ancestorTitles":["LocationService","Permission Requests"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Permission Requests should request both foreground and background permissions","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should request both foreground and background permissions"},{"ancestorTitles":["LocationService","Permission Requests"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Permission Requests should return false if foreground permission is denied","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should return false if foreground permission is denied"},{"ancestorTitles":["LocationService","Permission Requests"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Permission Requests should return false if background permission is denied","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should return false if background permission is denied"},{"ancestorTitles":["LocationService","Permission Requests"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Permission Requests should log permission status","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should log permission status"},{"ancestorTitles":["LocationService","Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Location Updates should start foreground location updates successfully","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should start foreground location updates successfully"},{"ancestorTitles":["LocationService","Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Location Updates should throw error if permissions are not granted","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should throw error if permissions are not granted"},{"ancestorTitles":["LocationService","Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Location Updates should register background task if background geolocation is enabled","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should register background task if background geolocation is enabled"},{"ancestorTitles":["LocationService","Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Location Updates should not register background task if already registered","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should not register background task if already registered"},{"ancestorTitles":["LocationService","Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Location Updates should handle location updates and send to store and API","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle location updates and send to store and API"},{"ancestorTitles":["LocationService","Background Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Background Location Updates should start background updates when not already active","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should start background updates when not already active"},{"ancestorTitles":["LocationService","Background Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Background Location Updates should not start background updates if already active","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should not start background updates if already active"},{"ancestorTitles":["LocationService","Background Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Background Location Updates should not start background updates if disabled","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should not start background updates if disabled"},{"ancestorTitles":["LocationService","Background Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Background Location Updates should stop background updates correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should stop background updates correctly"},{"ancestorTitles":["LocationService","Background Location Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Background Location Updates should handle background location updates and send to API","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle background location updates and send to API"},{"ancestorTitles":["LocationService","API Integration"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService API Integration should send location data to API with correct format","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should send location data to API with correct format"},{"ancestorTitles":["LocationService","API Integration"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService API Integration should handle null values in location data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle null values in location data"},{"ancestorTitles":["LocationService","API Integration"],"duration":2,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService API Integration should skip API call if no active unit is selected","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should skip API call if no active unit is selected"},{"ancestorTitles":["LocationService","API Integration"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService API Integration should handle API errors gracefully","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle API errors gracefully"},{"ancestorTitles":["LocationService","API Integration"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService API Integration should log successful API calls","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should log successful API calls"},{"ancestorTitles":["LocationService","Background Geolocation Setting Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Background Geolocation Setting Updates should enable background tracking and register task","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should enable background tracking and register task"},{"ancestorTitles":["LocationService","Background Geolocation Setting Updates"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Background Geolocation Setting Updates should disable background tracking and unregister task","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should disable background tracking and unregister task"},{"ancestorTitles":["LocationService","Background Geolocation Setting Updates"],"duration":1,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Background Geolocation Setting Updates should start background updates if app is backgrounded when enabled","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should start background updates if app is backgrounded when enabled"},{"ancestorTitles":["LocationService","Cleanup"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Cleanup should stop all location updates","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should stop all location updates"},{"ancestorTitles":["LocationService","Cleanup"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Cleanup should cleanup app state subscription","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should cleanup app state subscription"},{"ancestorTitles":["LocationService","Cleanup"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Cleanup should handle cleanup when no subscription exists","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle cleanup when no subscription exists"},{"ancestorTitles":["LocationService","Error Handling"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Error Handling should handle location subscription errors","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle location subscription errors"},{"ancestorTitles":["LocationService","Error Handling"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'OS')\n at Object.OS (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/index.tsx:19:14)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/app.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/common/client.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/api/personnel/personnelLocation.ts:1:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/location.ts:5:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts:158:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"LocationService Error Handling should handle background task registration errors","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle background task registration errors"}],"endTime":1755726221475,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Singleton Pattern › should return the same instance when called multiple times\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Permission Requests › should request both foreground and background permissions\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Permission Requests › should return false if foreground permission is denied\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Permission Requests › should return false if background permission is denied\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Permission Requests › should log permission status\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Location Updates › should start foreground location updates successfully\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Location Updates › should throw error if permissions are not granted\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Location Updates › should register background task if background geolocation is enabled\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Location Updates › should not register background task if already registered\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Location Updates › should handle location updates and send to store and API\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Background Location Updates › should start background updates when not already active\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Background Location Updates › should not start background updates if already active\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Background Location Updates › should not start background updates if disabled\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Background Location Updates › should stop background updates correctly\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Background Location Updates › should handle background location updates and send to API\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › API Integration › should send location data to API with correct format\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › API Integration › should handle null values in location data\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › API Integration › should skip API call if no active unit is selected\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › API Integration › should handle API errors gracefully\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › API Integration › should log successful API calls\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Background Geolocation Setting Updates › should enable background tracking and register task\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Background Geolocation Setting Updates › should disable background tracking and unregister task\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Background Geolocation Setting Updates › should start background updates if app is backgrounded when enabled\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Cleanup › should stop all location updates\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Cleanup › should cleanup app state subscription\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Cleanup › should handle cleanup when no subscription exists\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Error Handling › should handle location subscription errors\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mLocationService › Error Handling › should handle background task registration errors\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'OS')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 17 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 18 |\u001b[39m \u001b[90m// For synchronous usage, we'll provide a fallback\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 19 |\u001b[39m \u001b[36mif\u001b[39m (\u001b[33mPlatform\u001b[39m\u001b[33m.\u001b[39m\u001b[33mOS\u001b[39m \u001b[33m===\u001b[39m \u001b[32m'web'\u001b[39m) {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 20 |\u001b[39m storage \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mMMKV\u001b[39m({\u001b[22m\n\u001b[2m \u001b[90m 21 |\u001b[39m id\u001b[33m:\u001b[39m \u001b[32m'ResgridUnit'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 22 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.OS (\u001b[22m\u001b[2msrc/lib/storage/index.tsx\u001b[2m:19:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/storage/app.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/common/client.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/api/personnel/personnelLocation.ts\u001b[2m:1:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/location.ts\u001b[2m:5:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/location.test.ts\u001b[39m\u001b[0m\u001b[2m:158:42)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/location.test.ts","startTime":1755726221189,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["Calls Screen","FAB Button Security"],"duration":62,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen FAB Button Security should show the new call FAB button when user can create calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show the new call FAB button when user can create calls"},{"ancestorTitles":["Calls Screen","FAB Button Security"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen FAB Button Security should hide the new call FAB button when user cannot create calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should hide the new call FAB button when user cannot create calls"},{"ancestorTitles":["Calls Screen","FAB Button Security"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen FAB Button Security should navigate to new call page when FAB is pressed and user can create calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should navigate to new call page when FAB is pressed and user can create calls"},{"ancestorTitles":["Calls Screen","Basic Functionality"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen Basic Functionality should render loading state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render loading state"},{"ancestorTitles":["Calls Screen","Basic Functionality"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen Basic Functionality should render error state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render error state"},{"ancestorTitles":["Calls Screen","Basic Functionality"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen Basic Functionality should render empty state when no calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render empty state when no calls"},{"ancestorTitles":["Calls Screen","Basic Functionality"],"duration":39,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'callPriorities')\n at renderItem (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/calls.tsx:71:69)\n at renderItem (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/__tests__/calls.test.tsx:105:16)\n at Array.map ()\n at map (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/__tests__/calls.test.tsx:103:18)\n at renderWithHooks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:5608:18)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9884:13)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/__tests__/calls.test.tsx:311:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Calls Screen Basic Functionality should render calls when available","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should render calls when available"},{"ancestorTitles":["Calls Screen","Basic Functionality"],"duration":6,"failureDetails":[{}],"failureMessages":["TypeError: Cannot read properties of undefined (reading 'callPriorities')\n at renderItem (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/calls.tsx:71:69)\n at renderItem (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/__tests__/calls.test.tsx:105:16)\n at Array.map ()\n at map (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/__tests__/calls.test.tsx:103:18)\n at renderWithHooks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:5608:18)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9884:13)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/__tests__/calls.test.tsx:332:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Calls Screen Basic Functionality should filter calls based on search query","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should filter calls based on search query"},{"ancestorTitles":["Calls Screen","Data Fetching"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen Data Fetching should fetch calls and priorities on mount","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should fetch calls and priorities on mount"},{"ancestorTitles":["Calls Screen","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen Analytics Tracking should track calls_viewed event when component mounts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track calls_viewed event when component mounts"},{"ancestorTitles":["Calls Screen","Analytics Tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Calls Screen Analytics Tracking should track analytics with ISO timestamp format","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should track analytics with ISO timestamp format"}],"endTime":1755726221594,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalls Screen › Basic Functionality › should render calls when available\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'callPriorities')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 69 |\u001b[39m renderItem\u001b[33m=\u001b[39m{({ item }\u001b[33m:\u001b[39m { item\u001b[33m:\u001b[39m \u001b[33mCallResultData\u001b[39m }) \u001b[33m=>\u001b[39m (\u001b[22m\n\u001b[2m \u001b[90m 70 |\u001b[39m \u001b[33m<\u001b[39m\u001b[33mPressable\u001b[39m onPress\u001b[33m=\u001b[39m{() \u001b[33m=>\u001b[39m router\u001b[33m.\u001b[39mpush(\u001b[32m`/call/${item.CallId}`\u001b[39m)}\u001b[33m>\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 71 |\u001b[39m \u001b[33m<\u001b[39m\u001b[33mCallCard\u001b[39m call\u001b[33m=\u001b[39m{item} priority\u001b[33m=\u001b[39m{useCallsStore\u001b[33m.\u001b[39mgetState()\u001b[33m.\u001b[39mcallPriorities\u001b[33m.\u001b[39mfind((p\u001b[33m:\u001b[39m { \u001b[33mId\u001b[39m\u001b[33m:\u001b[39m number }) \u001b[33m=>\u001b[39m p\u001b[33m.\u001b[39m\u001b[33mId\u001b[39m \u001b[33m===\u001b[39m item\u001b[33m.\u001b[39m\u001b[33mPriority\u001b[39m)} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 72 |\u001b[39m \u001b[33m<\u001b[39m\u001b[33m/\u001b[39m\u001b[33mPressable\u001b[39m\u001b[33m>\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 73 |\u001b[39m )}\u001b[22m\n\u001b[2m \u001b[90m 74 |\u001b[39m keyExtractor\u001b[33m=\u001b[39m{(item\u001b[33m:\u001b[39m \u001b[33mCallResultData\u001b[39m) \u001b[33m=>\u001b[39m item\u001b[33m.\u001b[39m\u001b[33mCallId\u001b[39m}\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderItem (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)\u001b[22m\u001b[2m../../../../../home/calls.tsx\u001b[2m:71:69)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderItem (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)\u001b[22m\u001b[2m../../../../../home/__tests__/calls.test.tsx\u001b[2m:105:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m at Array.map ()\u001b[22m\n\u001b[2m \u001b[2mat map (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)\u001b[22m\u001b[2m../../../../../home/__tests__/calls.test.tsx\u001b[2m:103:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithHooks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)\u001b[22m\u001b[2m../../../../../home/__tests__/calls.test.tsx\u001b[2m:311:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalls Screen › Basic Functionality › should filter calls based on search query\u001b[39m\u001b[22m\n\n TypeError: Cannot read properties of undefined (reading 'callPriorities')\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 69 |\u001b[39m renderItem\u001b[33m=\u001b[39m{({ item }\u001b[33m:\u001b[39m { item\u001b[33m:\u001b[39m \u001b[33mCallResultData\u001b[39m }) \u001b[33m=>\u001b[39m (\u001b[22m\n\u001b[2m \u001b[90m 70 |\u001b[39m \u001b[33m<\u001b[39m\u001b[33mPressable\u001b[39m onPress\u001b[33m=\u001b[39m{() \u001b[33m=>\u001b[39m router\u001b[33m.\u001b[39mpush(\u001b[32m`/call/${item.CallId}`\u001b[39m)}\u001b[33m>\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 71 |\u001b[39m \u001b[33m<\u001b[39m\u001b[33mCallCard\u001b[39m call\u001b[33m=\u001b[39m{item} priority\u001b[33m=\u001b[39m{useCallsStore\u001b[33m.\u001b[39mgetState()\u001b[33m.\u001b[39mcallPriorities\u001b[33m.\u001b[39mfind((p\u001b[33m:\u001b[39m { \u001b[33mId\u001b[39m\u001b[33m:\u001b[39m number }) \u001b[33m=>\u001b[39m p\u001b[33m.\u001b[39m\u001b[33mId\u001b[39m \u001b[33m===\u001b[39m item\u001b[33m.\u001b[39m\u001b[33mPriority\u001b[39m)} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 72 |\u001b[39m \u001b[33m<\u001b[39m\u001b[33m/\u001b[39m\u001b[33mPressable\u001b[39m\u001b[33m>\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 73 |\u001b[39m )}\u001b[22m\n\u001b[2m \u001b[90m 74 |\u001b[39m keyExtractor\u001b[33m=\u001b[39m{(item\u001b[33m:\u001b[39m \u001b[33mCallResultData\u001b[39m) \u001b[33m=>\u001b[39m item\u001b[33m.\u001b[39m\u001b[33mCallId\u001b[39m}\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderItem (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)\u001b[22m\u001b[2m../../../../../home/calls.tsx\u001b[2m:71:69)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderItem (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)\u001b[22m\u001b[2m../../../../../home/__tests__/calls.test.tsx\u001b[2m:105:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m at Array.map ()\u001b[22m\n\u001b[2m \u001b[2mat map (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)\u001b[22m\u001b[2m../../../../../home/__tests__/calls.test.tsx\u001b[2m:103:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithHooks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)\u001b[22m\u001b[2m../../../../../home/__tests__/calls.test.tsx\u001b[2m:332:13)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/__tests__/calls.test.tsx","startTime":1755726221253,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["PinDetailModal PII Protection"],"duration":284,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal PII Protection should show coordinates for call pins regardless of PII permission","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show coordinates for call pins regardless of PII permission"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":64,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal PII Protection should show coordinates for unit pins regardless of PII permission","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show coordinates for unit pins regardless of PII permission"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal PII Protection should show coordinates for personnel pins when user can view PII","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show coordinates for personnel pins when user can view PII"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":6,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: Personnel location\n\n\u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcommon.restricted_content\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmap.pin_color\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/maps/__tests__/pin-detail-modal-pii.test.tsx:164:19)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"PinDetailModal PII Protection should hide coordinates for personnel pins when user cannot view PII","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"failed","title":"should hide coordinates for personnel pins when user cannot view PII"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal PII Protection should handle different personnel ImagePath variations","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle different personnel ImagePath variations"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal PII Protection should be case insensitive when detecting personnel pins","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should be case insensitive when detecting personnel pins"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal PII Protection should handle pins with undefined or null ImagePath","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle pins with undefined or null ImagePath"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal PII Protection should not render when pin is null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when pin is null"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal PII Protection should not render when modal is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when modal is closed"},{"ancestorTitles":["PinDetailModal PII Protection"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: Personnel location\n\n\u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcommon.restricted_content\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmap.pin_color\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/maps/__tests__/pin-detail-modal-pii.test.tsx:290:19)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"PinDetailModal PII Protection should still show other pin information when coordinates are hidden","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"failed","title":"should still show other pin information when coordinates are hidden"}],"endTime":1755726221611,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPinDetailModal PII Protection › should hide coordinates for personnel pins when user cannot view PII\u001b[39m\u001b[22m\n\n Unable to find an element with text: Personnel location\n\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcommon.restricted_content\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmap.pin_color\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 162 |\u001b[39m \u001b[90m// Should still show title and other information\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 163 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'John Doe'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 164 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'Personnel location'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 165 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 166 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 167 |\u001b[39m it(\u001b[32m'should handle different personnel ImagePath variations'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/maps/__tests__/pin-detail-modal-pii.test.tsx\u001b[39m\u001b[0m\u001b[2m:164:19)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPinDetailModal PII Protection › should still show other pin information when coordinates are hidden\u001b[39m\u001b[22m\n\n Unable to find an element with text: Personnel location\n\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcommon.restricted_content\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmap.pin_color\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 288 |\u001b[39m \u001b[90m// Should still show all other information\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 289 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'John Doe'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 290 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'Personnel location'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 291 |\u001b[39m expect(screen\u001b[33m.\u001b[39mgetByText(\u001b[32m'common.route'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 292 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 293 |\u001b[39m \u001b[90m// But coordinates should be hidden\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/maps/__tests__/pin-detail-modal-pii.test.tsx\u001b[39m\u001b[0m\u001b[2m:290:19)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/maps/__tests__/pin-detail-modal-pii.test.tsx","startTime":1755726220009,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["BluetoothAudioModal","Analytics Integration"],"duration":36,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioModal Analytics Integration should import and use useAnalytics hook correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should import and use useAnalytics hook correctly"},{"ancestorTitles":["BluetoothAudioModal","Analytics Integration"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioModal Analytics Integration should track modal viewed analytics when opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track modal viewed analytics when opened"},{"ancestorTitles":["BluetoothAudioModal","Analytics Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioModal Analytics Integration should not track analytics when modal is not open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when modal is not open"},{"ancestorTitles":["BluetoothAudioModal","Analytics Integration"],"duration":32,"failureDetails":[{}],"failureMessages":["TypeError: Date.now is not a function\n at now (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/bluetooth-audio-modal.tsx:62:29)\n at commitHookEffectListMount (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:13038:26)\n at commitPassiveMountOnFiber (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14456:13)\n at commitPassiveMountEffects_complete (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14421:9)\n at commitPassiveMountEffects_begin (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14408:7)\n at commitPassiveMountEffects (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14396:3)\n at flushPassiveEffectsImpl (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16287:3)\n at flushPassiveEffects (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16236:14)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16051:9\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx:256:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"BluetoothAudioModal Analytics Integration should track analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should track analytics with correct timestamp format"},{"ancestorTitles":["BluetoothAudioModal","Data Validation"],"duration":2,"failureDetails":[{}],"failureMessages":["TypeError: Date.now is not a function\n at now (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/bluetooth-audio-modal.tsx:62:29)\n at commitHookEffectListMount (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:13038:26)\n at commitPassiveMountOnFiber (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14456:13)\n at commitPassiveMountEffects_complete (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14421:9)\n at commitPassiveMountEffects_begin (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14408:7)\n at commitPassiveMountEffects (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14396:3)\n at flushPassiveEffectsImpl (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16287:3)\n at flushPassiveEffects (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16236:14)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16051:9\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx:268:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"BluetoothAudioModal Data Validation should include all required properties in modal viewed analytics","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should include all required properties in modal viewed analytics"},{"ancestorTitles":["BluetoothAudioModal","Data Validation"],"duration":2,"failureDetails":[{}],"failureMessages":["TypeError: Date.now is not a function\n at now (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/bluetooth-audio-modal.tsx:62:29)\n at commitHookEffectListMount (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:13038:26)\n at commitPassiveMountOnFiber (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14456:13)\n at commitPassiveMountEffects_complete (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14421:9)\n at commitPassiveMountEffects_begin (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14408:7)\n at commitPassiveMountEffects (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14396:3)\n at flushPassiveEffectsImpl (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16287:3)\n at flushPassiveEffects (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16236:14)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16051:9\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx:291:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"BluetoothAudioModal Data Validation should use correct data types for analytics properties","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should use correct data types for analytics properties"},{"ancestorTitles":["BluetoothAudioModal","Data Validation"],"duration":4,"failureDetails":[{}],"failureMessages":["TypeError: Date.now is not a function\n at now (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/bluetooth-audio-modal.tsx:62:29)\n at commitHookEffectListMount (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:13038:26)\n at commitPassiveMountOnFiber (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14456:13)\n at commitPassiveMountEffects_complete (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14421:9)\n at commitPassiveMountEffects_begin (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14408:7)\n at commitPassiveMountEffects (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14396:3)\n at flushPassiveEffectsImpl (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16287:3)\n at flushPassiveEffects (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16236:14)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16051:9\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx:322:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"BluetoothAudioModal Data Validation should handle null connected device gracefully","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle null connected device gracefully"}],"endTime":1755726221706,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mBluetoothAudioModal › Analytics Integration › should track analytics with correct timestamp format\u001b[39m\u001b[22m\n\n TypeError: Date.now is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 60 |\u001b[39m useEffect(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 61 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 62 |\u001b[39m \u001b[36mconst\u001b[39m openTime \u001b[33m=\u001b[39m \u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 63 |\u001b[39m setModalOpenTime(openTime)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 64 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 65 |\u001b[39m trackEvent(\u001b[32m'bluetooth_audio_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat now (\u001b[22m\u001b[2msrc/components/bluetooth/bluetooth-audio-modal.tsx\u001b[2m:62:29)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitHookEffectListMount (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:13038:26)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountOnFiber (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14456:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects_complete (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14421:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects_begin (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14408:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14396:3)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushPassiveEffectsImpl (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16287:3)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushPassiveEffects (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16236:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16051:9\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx\u001b[39m\u001b[0m\u001b[2m:256:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mBluetoothAudioModal › Data Validation › should include all required properties in modal viewed analytics\u001b[39m\u001b[22m\n\n TypeError: Date.now is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 60 |\u001b[39m useEffect(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 61 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 62 |\u001b[39m \u001b[36mconst\u001b[39m openTime \u001b[33m=\u001b[39m \u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 63 |\u001b[39m setModalOpenTime(openTime)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 64 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 65 |\u001b[39m trackEvent(\u001b[32m'bluetooth_audio_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat now (\u001b[22m\u001b[2msrc/components/bluetooth/bluetooth-audio-modal.tsx\u001b[2m:62:29)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitHookEffectListMount (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:13038:26)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountOnFiber (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14456:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects_complete (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14421:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects_begin (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14408:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14396:3)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushPassiveEffectsImpl (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16287:3)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushPassiveEffects (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16236:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16051:9\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx\u001b[39m\u001b[0m\u001b[2m:268:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mBluetoothAudioModal › Data Validation › should use correct data types for analytics properties\u001b[39m\u001b[22m\n\n TypeError: Date.now is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 60 |\u001b[39m useEffect(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 61 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 62 |\u001b[39m \u001b[36mconst\u001b[39m openTime \u001b[33m=\u001b[39m \u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 63 |\u001b[39m setModalOpenTime(openTime)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 64 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 65 |\u001b[39m trackEvent(\u001b[32m'bluetooth_audio_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat now (\u001b[22m\u001b[2msrc/components/bluetooth/bluetooth-audio-modal.tsx\u001b[2m:62:29)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitHookEffectListMount (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:13038:26)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountOnFiber (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14456:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects_complete (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14421:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects_begin (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14408:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14396:3)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushPassiveEffectsImpl (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16287:3)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushPassiveEffects (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16236:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16051:9\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx\u001b[39m\u001b[0m\u001b[2m:291:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mBluetoothAudioModal › Data Validation › should handle null connected device gracefully\u001b[39m\u001b[22m\n\n TypeError: Date.now is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 60 |\u001b[39m useEffect(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 61 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 62 |\u001b[39m \u001b[36mconst\u001b[39m openTime \u001b[33m=\u001b[39m \u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 63 |\u001b[39m setModalOpenTime(openTime)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 64 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 65 |\u001b[39m trackEvent(\u001b[32m'bluetooth_audio_modal_viewed'\u001b[39m\u001b[33m,\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat now (\u001b[22m\u001b[2msrc/components/bluetooth/bluetooth-audio-modal.tsx\u001b[2m:62:29)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitHookEffectListMount (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:13038:26)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountOnFiber (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14456:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects_complete (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14421:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects_begin (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14408:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat commitPassiveMountEffects (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:14396:3)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushPassiveEffectsImpl (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16287:3)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushPassiveEffects (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16236:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:16051:9\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx\u001b[39m\u001b[0m\u001b[2m:322:13)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/bluetooth/__tests__/bluetooth-audio-modal.test.tsx","startTime":1755726221509,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should show modal for call notification with eventCode","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should show modal for call notification with eventCode"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should show modal for message notification with eventCode","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should show modal for message notification with eventCode"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":1,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should show modal for chat notification with eventCode","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should show modal for chat notification with eventCode"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should show modal for group chat notification with eventCode","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should show modal for group chat notification with eventCode"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should not show modal for notification without eventCode","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should not show modal for notification without eventCode"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should not show modal for notification with empty eventCode","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should not show modal for notification with empty eventCode"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should not show modal for notification without data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should not show modal for notification without data"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should handle notification with only title","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle notification with only title"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should handle notification with only body","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle notification with only body"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should handle notification with additional data fields","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle notification with additional data fields"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should not show modal for notification with non-string eventCode","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should not show modal for notification with non-string eventCode"},{"ancestorTitles":["Push Notification Service Integration","notification received handler"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _app.getBaseApiUrl) is not a function\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/api.tsx:11:25)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/auth/store.tsx:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/auth/index.tsx:3:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/push-notification.ts:7:1)\n at Runtime._execModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1439:24)\n at Runtime._loadModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1022:12)\n at Runtime.requireModule (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:882:12)\n at Runtime.requireModuleOrMock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runtime/build/index.js:1048:21)\n at Object.require (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts:72:5)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:95:7)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Push Notification Service Integration notification received handler should register notification listener on initialization","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should register notification listener on initialization"}],"endTime":1755726221749,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should show modal for call notification with eventCode\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should show modal for message notification with eventCode\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should show modal for chat notification with eventCode\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should show modal for group chat notification with eventCode\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should not show modal for notification without eventCode\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should not show modal for notification with empty eventCode\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should not show modal for notification without data\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should handle notification with only title\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should handle notification with only body\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should handle notification with additional data fields\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should not show modal for notification with non-string eventCode\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPush Notification Service Integration › notification received handler › should register notification listener on initialization\u001b[39m\u001b[22m\n\n TypeError: (0 , _app.getBaseApiUrl) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 9 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 10 |\u001b[39m \u001b[36mconst\u001b[39m authApi \u001b[33m=\u001b[39m axios\u001b[33m.\u001b[39mcreate({\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 11 |\u001b[39m baseURL\u001b[33m:\u001b[39m getBaseApiUrl()\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 12 |\u001b[39m headers\u001b[33m:\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 13 |\u001b[39m \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/x-www-form-urlencoded'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 14 |\u001b[39m }\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2msrc/lib/auth/api.tsx\u001b[2m:11:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/stores/auth/store.tsx\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/lib/auth/index.tsx\u001b[2m:3:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2msrc/services/push-notification.ts\u001b[2m:7:1)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.require (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/push-notification.test.ts\u001b[39m\u001b[0m\u001b[2m:72:5)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/push-notification.test.ts","startTime":1755726221645,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":180,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Analytics Tracking should track view analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics when sheet becomes visible"},{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Analytics Tracking should track view analytics for company contact","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics for company contact"},{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Analytics Tracking should track view analytics for contact with minimal info","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics for contact with minimal info"},{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Analytics Tracking should not track analytics when sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when sheet is closed"},{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Analytics Tracking should track analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with correct timestamp format"},{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Analytics Tracking should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":118,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: contacts.tabs.notes\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:300:23)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Analytics Tracking should track tab change analytics when switching to notes","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should track tab change analytics when switching to notes"},{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":7,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: contacts.tabs.notes\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:316:23)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Analytics Tracking should track tab change analytics when switching back to details","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should track tab change analytics when switching back to details"},{"ancestorTitles":["ContactDetailsSheet","Analytics Tracking"],"duration":32,"failureDetails":[{"matcherResult":{"message":"\u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\nError name: \u001b[31m\"Error\"\u001b[39m\nError message: \u001b[31m\"Unable to find an element with text: contacts.tabs.notes\"\u001b[39m\n\n \u001b[0m \u001b[90m 346 |\u001b[39m \u001b[90m// Should not throw error when tab change analytics fails\u001b[39m\n \u001b[90m 347 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 348 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(getByText(\u001b[32m'contacts.tabs.notes'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 349 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\n \u001b[90m 350 |\u001b[39m\n \u001b[90m 351 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\n\n \u001b[2mat getByText (\u001b[22msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[2m:348:25)\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[2m:349:14)\u001b[22m\n \u001b[2mat asyncGeneratorStep (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\n \u001b[2mat _next (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\n \u001b[2mat \u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m","pass":true}}],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\nError name: \u001b[31m\"Error\"\u001b[39m\nError message: \u001b[31m\"Unable to find an element with text: contacts.tabs.notes\"\u001b[39m\n\n \u001b[0m \u001b[90m 346 |\u001b[39m \u001b[90m// Should not throw error when tab change analytics fails\u001b[39m\n \u001b[90m 347 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 348 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(getByText(\u001b[32m'contacts.tabs.notes'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 349 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\n \u001b[90m 350 |\u001b[39m\n \u001b[90m 351 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\n\n \u001b[2mat getByText (\u001b[22msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[2m:348:25)\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[2m:349:14)\u001b[22m\n \u001b[2mat asyncGeneratorStep (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\n \u001b[2mat _next (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\n \u001b[2mat \u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\n at Object.toThrow (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:349:14)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Analytics Tracking should handle tab change analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle tab change analytics errors gracefully"},{"ancestorTitles":["ContactDetailsSheet","Component Behavior"],"duration":3,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: contacts.details\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:366:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Component Behavior should render contact details sheet when open","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should render contact details sheet when open"},{"ancestorTitles":["ContactDetailsSheet","Component Behavior"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Component Behavior should not render when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when closed"},{"ancestorTitles":["ContactDetailsSheet","Component Behavior"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: John Doe\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:395:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Component Behavior should display person contact information correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should display person contact information correctly"},{"ancestorTitles":["ContactDetailsSheet","Component Behavior"],"duration":7,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: Acme Corp\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:420:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Component Behavior should display company contact information correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should display company contact information correctly"},{"ancestorTitles":["ContactDetailsSheet","Component Behavior"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Component Behavior should handle missing contact gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing contact gracefully"},{"ancestorTitles":["ContactDetailsSheet","Component Behavior"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: contacts.tabs.notes\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:453:23)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Component Behavior should switch between tabs correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"failed","title":"should switch between tabs correctly"},{"ancestorTitles":["ContactDetailsSheet","Component Behavior"],"duration":5,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with role: button\n at Object.getByRole (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:462:27)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Component Behavior should close sheet when close button is pressed","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should close sheet when close button is pressed"},{"ancestorTitles":["ContactDetailsSheet","Display Logic"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Display Logic should show important star for important contacts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show important star for important contacts"},{"ancestorTitles":["ContactDetailsSheet","Display Logic"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ContactDetailsSheet Display Logic should not show star for non-important contacts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show star for non-important contacts"},{"ancestorTitles":["ContactDetailsSheet","Display Logic"],"duration":1,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: contacts.person\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:504:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Display Logic should display correct contact type labels","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should display correct contact type labels"},{"ancestorTitles":["ContactDetailsSheet","Display Logic"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: Jane Smith\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx:526:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ContactDetailsSheet Display Logic should handle contacts with partial information","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle contacts with partial information"}],"coverage":{},"endTime":1755726230154,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Analytics Tracking › should track tab change analytics when switching to notes\u001b[39m\u001b[22m\n\n Unable to find an element with text: contacts.tabs.notes\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 298 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 299 |\u001b[39m \u001b[90m// Switch to notes tab\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 300 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(getByText(\u001b[32m'contacts.tabs.notes'\u001b[39m))\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 301 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 302 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 303 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'contact_details_tab_changed'\u001b[39m\u001b[33m,\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:300:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Analytics Tracking › should track tab change analytics when switching back to details\u001b[39m\u001b[22m\n\n Unable to find an element with text: contacts.tabs.notes\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 314 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 315 |\u001b[39m \u001b[90m// First switch to notes\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 316 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(getByText(\u001b[32m'contacts.tabs.notes'\u001b[39m))\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 317 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 318 |\u001b[39m \u001b[90m// Clear previous calls\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 319 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockClear()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:316:23)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Analytics Tracking › should handle tab change analytics errors gracefully\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\n Error name: \u001b[31m\"Error\"\u001b[39m\n Error message: \u001b[31m\"Unable to find an element with text: contacts.tabs.notes\"\u001b[39m\n\n \u001b[0m \u001b[90m 346 |\u001b[39m \u001b[90m// Should not throw error when tab change analytics fails\u001b[39m\n \u001b[90m 347 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 348 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(getByText(\u001b[32m'contacts.tabs.notes'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 349 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\n \u001b[90m 350 |\u001b[39m\n \u001b[90m 351 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\n\n \u001b[2mat getByText (\u001b[22msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[2m:348:25)\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[2m:349:14)\u001b[22m\n \u001b[2mat asyncGeneratorStep (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\n \u001b[2mat _next (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\n \u001b[2mat \u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 347 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 348 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(getByText(\u001b[32m'contacts.tabs.notes'\u001b[39m))\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 349 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 350 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 351 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 352 |\u001b[39m expect(consoleSpy)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.toThrow (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:349:14)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Component Behavior › should render contact details sheet when open\u001b[39m\u001b[22m\n\n Unable to find an element with text: contacts.details\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 364 |\u001b[39m \u001b[36mconst\u001b[39m { getByText } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mContactDetailsSheet\u001b[39m \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 365 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 366 |\u001b[39m expect(getByText(\u001b[32m'contacts.details'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 367 |\u001b[39m expect(getByText(\u001b[32m'John Doe'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 368 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 369 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:366:14)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Component Behavior › should display person contact information correctly\u001b[39m\u001b[22m\n\n Unable to find an element with text: John Doe\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 393 |\u001b[39m \u001b[36mconst\u001b[39m { getByText } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mContactDetailsSheet\u001b[39m \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 394 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 395 |\u001b[39m expect(getByText(\u001b[32m'John Doe'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 396 |\u001b[39m expect(getByText(\u001b[32m'contacts.person'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 397 |\u001b[39m expect(getByText(\u001b[32m'john@example.com'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 398 |\u001b[39m expect(getByText(\u001b[32m'123-456-7890'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:395:14)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Component Behavior › should display company contact information correctly\u001b[39m\u001b[22m\n\n Unable to find an element with text: Acme Corp\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 418 |\u001b[39m \u001b[36mconst\u001b[39m { getByText } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mContactDetailsSheet\u001b[39m \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 419 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 420 |\u001b[39m expect(getByText(\u001b[32m'Acme Corp'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 421 |\u001b[39m expect(getByText(\u001b[32m'contacts.company'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 422 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 423 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:420:14)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Component Behavior › should switch between tabs correctly\u001b[39m\u001b[22m\n\n Unable to find an element with text: contacts.tabs.notes\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 451 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 452 |\u001b[39m \u001b[90m// Switch to notes tab\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 453 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(getByText(\u001b[32m'contacts.tabs.notes'\u001b[39m))\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 454 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 455 |\u001b[39m \u001b[90m// Should show notes content\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 456 |\u001b[39m expect(getByText(\u001b[32m'Contact Notes List'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:453:23)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Component Behavior › should close sheet when close button is pressed\u001b[39m\u001b[22m\n\n Unable to find an element with role: button\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 460 |\u001b[39m \u001b[36mconst\u001b[39m { getByRole } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mContactDetailsSheet\u001b[39m \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 461 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 462 |\u001b[39m \u001b[36mconst\u001b[39m closeButton \u001b[33m=\u001b[39m getByRole(\u001b[32m'button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 463 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(closeButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 464 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 465 |\u001b[39m expect(mockCloseDetails)\u001b[33m.\u001b[39mtoHaveBeenCalledTimes(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByRole (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:462:27)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Display Logic › should display correct contact type labels\u001b[39m\u001b[22m\n\n Unable to find an element with text: contacts.person\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 502 |\u001b[39m \u001b[36mconst\u001b[39m { getByText } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mContactDetailsSheet\u001b[39m \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 503 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 504 |\u001b[39m expect(getByText(\u001b[32m'contacts.person'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 505 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 506 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 507 |\u001b[39m it(\u001b[32m'should handle contacts with partial information'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:504:14)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mContactDetailsSheet › Display Logic › should handle contacts with partial information\u001b[39m\u001b[22m\n\n Unable to find an element with text: Jane Smith\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 524 |\u001b[39m \u001b[36mconst\u001b[39m { getByText } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mContactDetailsSheet\u001b[39m \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 525 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 526 |\u001b[39m expect(getByText(\u001b[32m'Jane Smith'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 527 |\u001b[39m expect(getByText(\u001b[32m'contacts.person'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 528 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 529 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:526:14)\u001b[22m\u001b[2m\u001b[22m\n\n\n \u001b[1m● \u001b[22mTest suite failed to run\n\n Invalid: beforeEach() may not be used in a describe block containing no tests.\n\n \u001b[0m \u001b[90m 657 |\u001b[39m }\u001b[33m;\u001b[39m\n \u001b[90m 658 |\u001b[39m\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 659 |\u001b[39m beforeEach(() \u001b[33m=>\u001b[39m {\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 660 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\n \u001b[90m 661 |\u001b[39m\n \u001b[90m 662 |\u001b[39m \u001b[90m// Default mock for analytics\u001b[39m\u001b[0m\n\n \u001b[2mat beforeEach (\u001b[22m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:659:3)\u001b[22m\n \u001b[2mat Object.describe (\u001b[22m\u001b[0m\u001b[36msrc/components/contacts/__tests__/contact-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:587:1)\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-details-sheet.test.tsx","startTime":1755726230154,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["AudioService","initialization"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"AudioService initialization should initialize audio service successfully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should initialize audio service successfully"},{"ancestorTitles":["AudioService","initialization"],"duration":1,"failureDetails":[{"matcherResult":{"message":"\u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\n\u001b[32m- Expected\u001b[39m\n\u001b[31m+ Received\u001b[39m\n\n\u001b[33m@@ -1,7 +1,8 @@\u001b[39m\n\u001b[2m Object {\u001b[22m\n\u001b[2m \"allowsRecordingIOS\": true,\u001b[22m\n\u001b[31m+ \"interruptionModeAndroid\": \"duckOthers\",\u001b[39m\n\u001b[2m \"interruptionModeIOS\": \"doNotMix\",\u001b[22m\n\u001b[2m \"playThroughEarpieceAndroid\": true,\u001b[22m\n\u001b[2m \"playsInSilentModeIOS\": true,\u001b[22m\n\u001b[2m \"shouldDuckAndroid\": true,\u001b[22m\n\u001b[2m \"staysActiveInBackground\": true,\u001b[22m,\n\nNumber of calls: \u001b[31m1\u001b[39m","pass":false}}],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\n\u001b[32m- Expected\u001b[39m\n\u001b[31m+ Received\u001b[39m\n\n\u001b[33m@@ -1,7 +1,8 @@\u001b[39m\n\u001b[2m Object {\u001b[22m\n\u001b[2m \"allowsRecordingIOS\": true,\u001b[22m\n\u001b[31m+ \"interruptionModeAndroid\": \"duckOthers\",\u001b[39m\n\u001b[2m \"interruptionModeIOS\": \"doNotMix\",\u001b[22m\n\u001b[2m \"playThroughEarpieceAndroid\": true,\u001b[22m\n\u001b[2m \"playsInSilentModeIOS\": true,\u001b[22m\n\u001b[2m \"shouldDuckAndroid\": true,\u001b[22m\n\u001b[2m \"staysActiveInBackground\": true,\u001b[22m,\n\nNumber of calls: \u001b[31m1\u001b[39m\n at Object.toHaveBeenCalledWith (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/audio.service.test.ts:121:42)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"AudioService initialization should set audio mode correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should set audio mode correctly"},{"ancestorTitles":["AudioService","initialization"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioService initialization should preload all audio assets","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should preload all audio assets"},{"ancestorTitles":["AudioService","initialization"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioService initialization should load all audio files","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should load all audio files"},{"ancestorTitles":["AudioService","playStartTransmittingSound"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playStartTransmittingSound should play start transmitting sound successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should play start transmitting sound successfully"},{"ancestorTitles":["AudioService","playStartTransmittingSound"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playStartTransmittingSound should handle start transmitting sound playback errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle start transmitting sound playback errors"},{"ancestorTitles":["AudioService","playStopTransmittingSound"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playStopTransmittingSound should play stop transmitting sound successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should play stop transmitting sound successfully"},{"ancestorTitles":["AudioService","playStopTransmittingSound"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playStopTransmittingSound should handle stop transmitting sound playback errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle stop transmitting sound playback errors"},{"ancestorTitles":["AudioService","playConnectedDeviceSound"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playConnectedDeviceSound should play connected device sound successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should play connected device sound successfully"},{"ancestorTitles":["AudioService","playConnectedDeviceSound"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playConnectedDeviceSound should handle connected device sound playback errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle connected device sound playback errors"},{"ancestorTitles":["AudioService","playConnectToAudioRoomSound"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playConnectToAudioRoomSound should play connect to audio room sound successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should play connect to audio room sound successfully"},{"ancestorTitles":["AudioService","playConnectToAudioRoomSound"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playConnectToAudioRoomSound should handle connect to audio room sound playback errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle connect to audio room sound playback errors"},{"ancestorTitles":["AudioService","playDisconnectedFromAudioRoomSound"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playDisconnectedFromAudioRoomSound should play disconnected from audio room sound successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should play disconnected from audio room sound successfully"},{"ancestorTitles":["AudioService","playDisconnectedFromAudioRoomSound"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService playDisconnectedFromAudioRoomSound should handle disconnected from audio room sound playback errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle disconnected from audio room sound playback errors"},{"ancestorTitles":["AudioService","cleanup"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService cleanup should cleanup audio resources successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should cleanup audio resources successfully"},{"ancestorTitles":["AudioService","cleanup"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService cleanup should handle cleanup errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle cleanup errors gracefully"},{"ancestorTitles":["AudioService","error handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioService error handling should handle null sound objects gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle null sound objects gracefully"},{"ancestorTitles":["AudioService","error handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioService error handling should handle initialization failures","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle initialization failures"}],"endTime":1755726221842,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mAudioService › initialization › should set audio mode correctly\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\n \u001b[32m- Expected\u001b[39m\n \u001b[31m+ Received\u001b[39m\n\n \u001b[33m@@ -1,7 +1,8 @@\u001b[39m\n \u001b[2m Object {\u001b[22m\n \u001b[2m \"allowsRecordingIOS\": true,\u001b[22m\n \u001b[31m+ \"interruptionModeAndroid\": \"duckOthers\",\u001b[39m\n \u001b[2m \"interruptionModeIOS\": \"doNotMix\",\u001b[22m\n \u001b[2m \"playThroughEarpieceAndroid\": true,\u001b[22m\n \u001b[2m \"playsInSilentModeIOS\": true,\u001b[22m\n \u001b[2m \"shouldDuckAndroid\": true,\u001b[22m\n \u001b[2m \"staysActiveInBackground\": true,\u001b[22m,\n\n Number of calls: \u001b[31m1\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 119 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 120 |\u001b[39m it(\u001b[32m'should set audio mode correctly'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 121 |\u001b[39m expect(mockAudioSetAudioModeAsync)\u001b[33m.\u001b[39mtoHaveBeenCalledWith({\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m allowsRecordingIOS\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m staysActiveInBackground\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 124 |\u001b[39m playsInSilentModeIOS\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m,\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.toHaveBeenCalledWith (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/audio.service.test.ts\u001b[39m\u001b[0m\u001b[2m:121:42)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/audio.service.test.ts","startTime":1755726221714,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["CalendarItemDetailsSheet"],"duration":113,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet renders null when item is null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders null when item is null"},{"ancestorTitles":["CalendarItemDetailsSheet"],"duration":28,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with testID: bottom-sheet\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByTestId (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:174:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet renders bottom sheet when item is provided and isOpen is true","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"renders bottom sheet when item is provided and isOpen is true"},{"ancestorTitles":["CalendarItemDetailsSheet"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet does not render bottom sheet when isOpen is false","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render bottom sheet when isOpen is false"},{"ancestorTitles":["CalendarItemDetailsSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet tracks analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics when sheet becomes visible"},{"ancestorTitles":["CalendarItemDetailsSheet"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet does not track analytics when sheet is not visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when sheet is not visible"},{"ancestorTitles":["CalendarItemDetailsSheet"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet tracks analytics with correct data for different item properties","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct data for different item properties"},{"ancestorTitles":["CalendarItemDetailsSheet"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet tracks analytics when item changes while sheet is open","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when item changes while sheet is open"},{"ancestorTitles":["CalendarItemDetailsSheet","Signup functionality"],"duration":11,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.signup.button\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:267:28)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Signup functionality tracks attendance attempt on signup","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks attendance attempt on signup"},{"ancestorTitles":["CalendarItemDetailsSheet","Signup functionality"],"duration":4,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.signup.button\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:287:28)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Signup functionality tracks successful attendance change","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks successful attendance change"},{"ancestorTitles":["CalendarItemDetailsSheet","Signup functionality"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.signup.button\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:309:28)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Signup functionality tracks failed attendance change","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks failed attendance change"},{"ancestorTitles":["CalendarItemDetailsSheet","Signup functionality"],"duration":6,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.signup.button\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:332:28)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Signup functionality shows note input for signup types that require notes","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"shows note input for signup types that require notes"},{"ancestorTitles":["CalendarItemDetailsSheet","Signup functionality"],"duration":4,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.signup.button\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:349:28)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Signup functionality tracks attendance change with note when provided","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks attendance change with note when provided"},{"ancestorTitles":["CalendarItemDetailsSheet","Unsignup functionality"],"duration":3,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.unsignup\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.unsignup\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:382:30)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Unsignup functionality shows confirmation alert for unsignup","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"shows confirmation alert for unsignup"},{"ancestorTitles":["CalendarItemDetailsSheet","Unsignup functionality"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.unsignup\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.unsignup\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:410:30)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Unsignup functionality tracks attendance change when unsigning","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks attendance change when unsigning"},{"ancestorTitles":["CalendarItemDetailsSheet","Loading states"],"duration":7,"failureDetails":[{"matcherResult":{"message":"\u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeTruthy\u001b[2m()\u001b[22m\n\nReceived: \u001b[31mnull\u001b[39m","pass":false}}],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeTruthy\u001b[2m()\u001b[22m\n\nReceived: \u001b[31mnull\u001b[39m\n at Object.toBeTruthy (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:438:45)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Loading states shows loading state when attendance is being updated","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"shows loading state when attendance is being updated"},{"ancestorTitles":["CalendarItemDetailsSheet","Event formatting"],"duration":4,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with testID: bottom-sheet\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.allDay\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByTestId (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:454:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Event formatting formats all-day events correctly","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"formats all-day events correctly"},{"ancestorTitles":["CalendarItemDetailsSheet","Event formatting"],"duration":3,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with testID: bottom-sheet\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mMinimal Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByTestId (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:493:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Event formatting handles items without optional fields","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"handles items without optional fields"},{"ancestorTitles":["CalendarItemDetailsSheet","Error handling"],"duration":3,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.signup.button\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:506:28)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Error handling shows error alert when attendance update fails","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"shows error alert when attendance update fails"},{"ancestorTitles":["CalendarItemDetailsSheet","Error handling"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: calendar.signup.button\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:530:28)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Error handling shows store error when available","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"shows store error when available"},{"ancestorTitles":["CalendarItemDetailsSheet","Attendees display"],"duration":1,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with testID: bottom-sheet\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByTestId (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:548:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Attendees display renders attendees list when available","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"renders attendees list when available"},{"ancestorTitles":["CalendarItemDetailsSheet","Attendees display"],"duration":6,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with testID: bottom-sheet\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByTestId (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx:562:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CalendarItemDetailsSheet Attendees display handles empty attendees list","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"handles empty attendees list"}],"endTime":1755726221847,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › renders bottom sheet when item is provided and isOpen is true\u001b[39m\u001b[22m\n\n Unable to find an element with testID: bottom-sheet\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 172 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 173 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 174 |\u001b[39m expect(getByTestId(\u001b[32m'bottom-sheet'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 175 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 176 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 177 |\u001b[39m it(\u001b[32m'does not render bottom sheet when isOpen is false'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByTestId (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:174:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Signup functionality › tracks attendance attempt on signup\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.signup.button\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 265 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 266 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 267 |\u001b[39m \u001b[36mconst\u001b[39m signupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.signup.button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 268 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(signupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 269 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 270 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:267:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Signup functionality › tracks successful attendance change\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.signup.button\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 285 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 286 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 287 |\u001b[39m \u001b[36mconst\u001b[39m signupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.signup.button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 288 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(signupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 289 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 290 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:287:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Signup functionality › tracks failed attendance change\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.signup.button\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 307 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 308 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 309 |\u001b[39m \u001b[36mconst\u001b[39m signupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.signup.button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 310 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(signupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 311 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 312 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:309:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Signup functionality › shows note input for signup types that require notes\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.signup.button\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 330 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 331 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 332 |\u001b[39m \u001b[36mconst\u001b[39m signupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.signup.button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 333 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(signupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 334 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 335 |\u001b[39m expect(getByTestId(\u001b[32m'input-field'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:332:28)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Signup functionality › tracks attendance change with note when provided\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.signup.button\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 347 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 348 |\u001b[39m \u001b[90m// Click signup to show note input\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 349 |\u001b[39m \u001b[36mconst\u001b[39m signupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.signup.button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 350 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(signupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 351 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 352 |\u001b[39m \u001b[90m// Enter note\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:349:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Unsignup functionality › shows confirmation alert for unsignup\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.unsignup\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.unsignup\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 380 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 381 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 382 |\u001b[39m \u001b[36mconst\u001b[39m unsignupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.unsignup'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 383 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(unsignupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 384 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 385 |\u001b[39m expect(\u001b[33mAlert\u001b[39m\u001b[33m.\u001b[39malert)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:382:30)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Unsignup functionality › tracks attendance change when unsigning\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.unsignup\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.unsignup\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 408 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 409 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 410 |\u001b[39m \u001b[36mconst\u001b[39m unsignupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.unsignup'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 411 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(unsignupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 412 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 413 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:410:30)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Loading states › shows loading state when attendance is being updated\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeTruthy\u001b[2m()\u001b[22m\n\n Received: \u001b[31mnull\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 436 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 437 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 438 |\u001b[39m expect(queryByTestId(\u001b[32m'bottom-sheet'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 439 |\u001b[39m \u001b[90m// Loading component should be rendered in the signup section\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 440 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 441 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.toBeTruthy (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:438:45)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Event formatting › formats all-day events correctly\u001b[39m\u001b[22m\n\n Unable to find an element with testID: bottom-sheet\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.allDay\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 452 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 453 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 454 |\u001b[39m expect(getByTestId(\u001b[32m'bottom-sheet'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 455 |\u001b[39m \u001b[90m// The component should handle all-day events\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 456 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 457 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByTestId (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:454:14)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Event formatting › handles items without optional fields\u001b[39m\u001b[22m\n\n Unable to find an element with testID: bottom-sheet\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mMinimal Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 491 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 492 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 493 |\u001b[39m expect(getByTestId(\u001b[32m'bottom-sheet'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 494 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 495 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 496 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByTestId (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:493:14)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Error handling › shows error alert when attendance update fails\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.signup.button\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 504 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 505 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 506 |\u001b[39m \u001b[36mconst\u001b[39m signupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.signup.button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 507 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(signupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 508 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 509 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:506:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Error handling › shows store error when available\u001b[39m\u001b[22m\n\n Unable to find an element with text: calendar.signup.button\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 528 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 529 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 530 |\u001b[39m \u001b[36mconst\u001b[39m signupButton \u001b[33m=\u001b[39m getByText(\u001b[32m'calendar.signup.button'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 531 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(signupButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 532 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 533 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:530:28)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Attendees display › renders attendees list when available\u001b[39m\u001b[22m\n\n Unable to find an element with testID: bottom-sheet\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.attendees.title\u001b[0m\n \u001b[0m (\u001b[0m\n \u001b[0m1\u001b[0m\n \u001b[0m)\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJohn Doe\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTeam A\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest note\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.required\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 546 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 547 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 548 |\u001b[39m expect(getByTestId(\u001b[32m'bottom-sheet'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 549 |\u001b[39m \u001b[90m// Should render attendees section\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 550 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 551 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByTestId (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:548:14)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCalendarItemDetailsSheet › Attendees display › handles empty attendees list\u001b[39m\u001b[22m\n\n Unable to find an element with testID: bottom-sheet\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mTest Event\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mMeeting\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWednesday, August 20, 2025\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0m02:00 AM - 03:00 AM\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest Location\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.description\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mTest event description\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.createdBy\u001b[0m\n \u001b[0m: \u001b[0m\n \u001b[0mcreator-1\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m

\u001b[39m\n \u001b[0mcalendar.signup.title\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mcalendar.signup.button\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 560 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 561 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 562 |\u001b[39m expect(getByTestId(\u001b[32m'bottom-sheet'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 563 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 564 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 565 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByTestId (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calendar/__tests__/calendar-item-details-sheet.test.tsx\u001b[39m\u001b[0m\u001b[2m:562:14)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet.test.tsx","startTime":1755726221434,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["ComposeMessageSheet Analytics"],"duration":45,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics should track analytics when compose sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when compose sheet becomes visible"},{"ancestorTitles":["ComposeMessageSheet Analytics"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics should not render when compose sheet is closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not render when compose sheet is closed"},{"ancestorTitles":["ComposeMessageSheet Analytics"],"duration":9,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with testID: actionsheet\n\n\u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.compose_new_message\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.message_type\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mmessages.select_message_type\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mmessages.types.message\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mmessages.types.poll\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mmessages.types.alert\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.recipients\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.subject\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.message_body\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[36m
\u001b[39m\n at Object.getByTestId (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/messages/__tests__/compose-message-sheet-simple.test.tsx:249:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"ComposeMessageSheet Analytics should render correctly when compose sheet is open","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should render correctly when compose sheet is open"}],"endTime":1755726221781,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mComposeMessageSheet Analytics › should render correctly when compose sheet is open\u001b[39m\u001b[22m\n\n Unable to find an element with testID: actionsheet\n\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.compose_new_message\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.message_type\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mmessages.select_message_type\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mmessages.types.message\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mmessages.types.poll\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[0mmessages.types.alert\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.recipients\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.subject\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mmessages.message_body\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m
\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 247 |\u001b[39m \u001b[36mconst\u001b[39m { getByTestId } \u001b[33m=\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mComposeMessageSheet\u001b[39m \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 248 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 249 |\u001b[39m expect(getByTestId(\u001b[32m'actionsheet'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 250 |\u001b[39m expect(mockTrackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'compose_message_sheet_viewed'\u001b[39m\u001b[33m,\u001b[39m expect\u001b[33m.\u001b[39many(\u001b[33mObject\u001b[39m))\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 251 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 252 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByTestId (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/messages/__tests__/compose-message-sheet-simple.test.tsx\u001b[39m\u001b[0m\u001b[2m:249:12)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/messages/__tests__/compose-message-sheet-simple.test.tsx","startTime":1755726221640,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["AptabaseService","basic functionality"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AptabaseService basic functionality should exist","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should exist"},{"ancestorTitles":["AptabaseService","basic functionality"],"duration":1,"failureDetails":[{"matcherResult":{"message":"\u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: \u001b[32m{\"context\": {\"eventName\": \"test_event\", \"properties\": {\"prop1\": \"value1\"}}, \"message\": \"Analytics event tracked\"}\u001b[39m\n\nNumber of calls: \u001b[31m0\u001b[39m","pass":false}}],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: \u001b[32m{\"context\": {\"eventName\": \"test_event\", \"properties\": {\"prop1\": \"value1\"}}, \"message\": \"Analytics event tracked\"}\u001b[39m\n\nNumber of calls: \u001b[31m0\u001b[39m\n at Object.toHaveBeenCalledWith (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:41:32)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"AptabaseService basic functionality should track events when not disabled","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"failed","title":"should track events when not disabled"},{"ancestorTitles":["AptabaseService","basic functionality"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AptabaseService basic functionality should not track events when disabled","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not track events when disabled"},{"ancestorTitles":["AptabaseService","error handling"],"duration":1,"failureDetails":[{}],"failureMessages":["Error: Network error\n at /Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:68:15\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:397:39\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:404:13\n at mockConstructor (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:148:19)\n at AptabaseService.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/aptabase.service.ts:47:31)\n at Object.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:72:23)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"AptabaseService error handling should handle tracking errors gracefully","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle tracking errors gracefully"},{"ancestorTitles":["AptabaseService","error handling"],"duration":0,"failureDetails":[{}],"failureMessages":["Error: Network error\n at /Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:90:15\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:397:39\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:404:13\n at mockConstructor (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:148:19)\n at AptabaseService.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/aptabase.service.ts:47:31)\n at Object.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:96:23)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"AptabaseService error handling should disable service after max retries","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should disable service after max retries"},{"ancestorTitles":["AptabaseService","error handling"],"duration":0,"failureDetails":[{}],"failureMessages":["Error: Network error\n at /Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:113:15\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:397:39\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:404:13\n at mockConstructor (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:148:19)\n at AptabaseService.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/aptabase.service.ts:47:31)\n at Object.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:119:23)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"AptabaseService error handling should re-enable after timeout","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should re-enable after timeout"},{"ancestorTitles":["AptabaseService","service status"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AptabaseService service status should return correct status","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return correct status"},{"ancestorTitles":["AptabaseService","service status"],"duration":0,"failureDetails":[{}],"failureMessages":["Error: Network error\n at /Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:155:15\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:397:39\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:404:13\n at mockConstructor (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:148:19)\n at AptabaseService.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/aptabase.service.ts:47:31)\n at Object.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:159:23)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"AptabaseService service status should update status after errors","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should update status after errors"},{"ancestorTitles":["AptabaseService","reset functionality"],"duration":0,"failureDetails":[{}],"failureMessages":["Error: Network error\n at /Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:172:15\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:397:39\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:404:13\n at mockConstructor (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-mock/build/index.js:148:19)\n at AptabaseService.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/aptabase.service.ts:47:31)\n at Object.trackEvent (/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts:176:23)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"AptabaseService reset functionality should reset service state","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should reset service state"}],"endTime":1755726221867,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mAptabaseService › basic functionality › should track events when not disabled\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\n Expected: \u001b[32m{\"context\": {\"eventName\": \"test_event\", \"properties\": {\"prop1\": \"value1\"}}, \"message\": \"Analytics event tracked\"}\u001b[39m\n\n Number of calls: \u001b[31m0\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 39 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 40 |\u001b[39m expect(trackEvent)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'test_event'\u001b[39m\u001b[33m,\u001b[39m { prop1\u001b[33m:\u001b[39m \u001b[32m'value1'\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 41 |\u001b[39m expect(mockLogger\u001b[33m.\u001b[39mdebug)\u001b[33m.\u001b[39mtoHaveBeenCalledWith({\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 42 |\u001b[39m message\u001b[33m:\u001b[39m \u001b[32m'Analytics event tracked'\u001b[39m\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 43 |\u001b[39m context\u001b[33m:\u001b[39m { eventName\u001b[33m:\u001b[39m \u001b[32m'test_event'\u001b[39m\u001b[33m,\u001b[39m properties\u001b[33m:\u001b[39m { prop1\u001b[33m:\u001b[39m \u001b[32m'value1'\u001b[39m } }\u001b[33m,\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 44 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.toHaveBeenCalledWith (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:41:32)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mAptabaseService › error handling › should handle tracking errors gracefully\u001b[39m\u001b[22m\n\n Network error\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 66 |\u001b[39m \u001b[36mconst\u001b[39m { trackEvent } \u001b[33m=\u001b[39m require(\u001b[32m'@aptabase/react-native'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 67 |\u001b[39m trackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 68 |\u001b[39m \u001b[36mthrow\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mError\u001b[39m(\u001b[32m'Network error'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 69 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 70 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 71 |\u001b[39m aptabaseService\u001b[33m.\u001b[39mreset()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:68:15\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat AptabaseService.trackEvent (\u001b[22m\u001b[2msrc/services/aptabase.service.ts\u001b[2m:47:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.trackEvent (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:72:23)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mAptabaseService › error handling › should disable service after max retries\u001b[39m\u001b[22m\n\n Network error\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 88 |\u001b[39m \u001b[36mconst\u001b[39m { trackEvent } \u001b[33m=\u001b[39m require(\u001b[32m'@aptabase/react-native'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 89 |\u001b[39m trackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 90 |\u001b[39m \u001b[36mthrow\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mError\u001b[39m(\u001b[32m'Network error'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 91 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 92 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 93 |\u001b[39m aptabaseService\u001b[33m.\u001b[39mreset()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:90:15\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat AptabaseService.trackEvent (\u001b[22m\u001b[2msrc/services/aptabase.service.ts\u001b[2m:47:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.trackEvent (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:96:23)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mAptabaseService › error handling › should re-enable after timeout\u001b[39m\u001b[22m\n\n Network error\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 111 |\u001b[39m \u001b[36mconst\u001b[39m { trackEvent } \u001b[33m=\u001b[39m require(\u001b[32m'@aptabase/react-native'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 112 |\u001b[39m trackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 113 |\u001b[39m \u001b[36mthrow\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mError\u001b[39m(\u001b[32m'Network error'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 114 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 115 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 116 |\u001b[39m aptabaseService\u001b[33m.\u001b[39mreset()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:113:15\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat AptabaseService.trackEvent (\u001b[22m\u001b[2msrc/services/aptabase.service.ts\u001b[2m:47:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.trackEvent (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:119:23)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mAptabaseService › service status › should update status after errors\u001b[39m\u001b[22m\n\n Network error\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 153 |\u001b[39m \u001b[36mconst\u001b[39m { trackEvent } \u001b[33m=\u001b[39m require(\u001b[32m'@aptabase/react-native'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 154 |\u001b[39m trackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 155 |\u001b[39m \u001b[36mthrow\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mError\u001b[39m(\u001b[32m'Network error'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 156 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 157 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 158 |\u001b[39m aptabaseService\u001b[33m.\u001b[39mreset()\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:155:15\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat AptabaseService.trackEvent (\u001b[22m\u001b[2msrc/services/aptabase.service.ts\u001b[2m:47:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.trackEvent (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:159:23)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mAptabaseService › reset functionality › should reset service state\u001b[39m\u001b[22m\n\n Network error\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 170 |\u001b[39m \u001b[36mconst\u001b[39m { trackEvent } \u001b[33m=\u001b[39m require(\u001b[32m'@aptabase/react-native'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 171 |\u001b[39m trackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 172 |\u001b[39m \u001b[36mthrow\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mError\u001b[39m(\u001b[32m'Network error'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 173 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 174 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 175 |\u001b[39m \u001b[90m// Cause some errors first\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:172:15\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat AptabaseService.trackEvent (\u001b[22m\u001b[2msrc/services/aptabase.service.ts\u001b[2m:47:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.trackEvent (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/services/__tests__/aptabase.service.test.ts\u001b[39m\u001b[0m\u001b[2m:176:23)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/aptabase.service.test.ts","startTime":1755726221762,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["Onboarding Component","Component Rendering"],"duration":1,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Component Rendering should render onboarding component without crashing","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should render onboarding component without crashing"},{"ancestorTitles":["Onboarding Component","Component Rendering"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Component Rendering should render navigation elements","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should render navigation elements"},{"ancestorTitles":["Onboarding Component","Component Rendering"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Component Rendering should render pagination dots","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should render pagination dots"},{"ancestorTitles":["Onboarding Component","Analytics Tracking"],"duration":1,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Analytics Tracking should track onboarding_viewed event when component becomes visible","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should track onboarding_viewed event when component becomes visible"},{"ancestorTitles":["Onboarding Component","Analytics Tracking"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Analytics Tracking should track onboarding_next_clicked event when next button is pressed","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should track onboarding_next_clicked event when next button is pressed"},{"ancestorTitles":["Onboarding Component","Analytics Tracking"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Analytics Tracking should track onboarding_skip_clicked event when skip button is pressed","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should track onboarding_skip_clicked event when skip button is pressed"},{"ancestorTitles":["Onboarding Component","Analytics Tracking"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Analytics Tracking should track onboarding_slide_changed event when scrolling between slides","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should track onboarding_slide_changed event when scrolling between slides"},{"ancestorTitles":["Onboarding Component","Navigation Behavior"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Navigation Behavior should navigate to login when skip is pressed","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should navigate to login when skip is pressed"},{"ancestorTitles":["Onboarding Component","Navigation Behavior"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Navigation Behavior should navigate to login when Get Started is pressed on last slide","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should navigate to login when Get Started is pressed on last slide"},{"ancestorTitles":["Onboarding Component","Navigation Behavior"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Navigation Behavior should call setIsOnboarding on component mount","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should call setIsOnboarding on component mount"},{"ancestorTitles":["Onboarding Component","Analytics Data Validation"],"duration":1,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Analytics Data Validation should validate onboarding_viewed analytics structure","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should validate onboarding_viewed analytics structure"},{"ancestorTitles":["Onboarding Component","Analytics Data Validation"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Analytics Data Validation should validate onboarding_next_clicked analytics structure","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should validate onboarding_next_clicked analytics structure"},{"ancestorTitles":["Onboarding Component","Analytics Data Validation"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Analytics Data Validation should validate onboarding_skip_clicked analytics structure","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should validate onboarding_skip_clicked analytics structure"},{"ancestorTitles":["Onboarding Component","Analytics Data Validation"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Analytics Data Validation should validate onboarding_slide_changed analytics structure","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should validate onboarding_slide_changed analytics structure"},{"ancestorTitles":["Onboarding Component","Error Handling"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Error Handling should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["Onboarding Component","Error Handling"],"duration":0,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Error Handling should handle missing slide data gracefully","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should handle missing slide data gracefully"},{"ancestorTitles":["Onboarding Component","Focus Effect Integration"],"duration":1,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Focus Effect Integration should call useFocusEffect with proper callback","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should call useFocusEffect with proper callback"},{"ancestorTitles":["Onboarding Component","Focus Effect Integration"],"duration":1,"failureDetails":[{}],"failureMessages":["TypeError: _native.useFocusEffect.mockImplementation is not a function\n at Object.mockImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx:120:35)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusHook (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:281:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:246:5)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Onboarding Component Focus Effect Integration should track analytics when focus effect is triggered","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should track analytics when focus effect is triggered"}],"endTime":1755726221984,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Component Rendering › should render onboarding component without crashing\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Component Rendering › should render navigation elements\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Component Rendering › should render pagination dots\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Analytics Tracking › should track onboarding_viewed event when component becomes visible\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Analytics Tracking › should track onboarding_next_clicked event when next button is pressed\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Analytics Tracking › should track onboarding_skip_clicked event when skip button is pressed\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Analytics Tracking › should track onboarding_slide_changed event when scrolling between slides\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Navigation Behavior › should navigate to login when skip is pressed\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Navigation Behavior › should navigate to login when Get Started is pressed on last slide\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Navigation Behavior › should call setIsOnboarding on component mount\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Analytics Data Validation › should validate onboarding_viewed analytics structure\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Analytics Data Validation › should validate onboarding_next_clicked analytics structure\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Analytics Data Validation › should validate onboarding_skip_clicked analytics structure\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Analytics Data Validation › should validate onboarding_slide_changed analytics structure\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Error Handling › should handle analytics errors gracefully\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Error Handling › should handle missing slide data gracefully\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Focus Effect Integration › should call useFocusEffect with proper callback\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mOnboarding Component › Focus Effect Integration › should track analytics when focus effect is triggered\u001b[39m\u001b[22m\n\n TypeError: _native.useFocusEffect.mockImplementation is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 118 |\u001b[39m jest\u001b[33m.\u001b[39mclearAllMocks()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 119 |\u001b[39m (useRouter \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockReturnValue(mockRouter)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 120 |\u001b[39m (useFocusEffect \u001b[36mas\u001b[39m jest\u001b[33m.\u001b[39m\u001b[33mMock\u001b[39m)\u001b[33m.\u001b[39mmockImplementation((callback) \u001b[33m=>\u001b[39m callback())\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 121 |\u001b[39m \u001b[22m\n\u001b[2m \u001b[90m 122 |\u001b[39m \u001b[90m// Reset mockTrackEvent to working state\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 123 |\u001b[39m mockTrackEvent\u001b[33m.\u001b[39mmockImplementation(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.mockImplementation (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/app/__tests__/onboarding.test.tsx\u001b[39m\u001b[0m\u001b[2m:120:35)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/__tests__/onboarding.test.tsx","startTime":1755726221490,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["CallNotesModal Analytics","Analytics Tracking"],"duration":275,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _native.useFocusEffect) is not a function\n at CallNotesModal (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/call-notes-modal.tsx:54:17)\n at renderWithHooks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:5608:18)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9884:13)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-analytics.test.tsx:134:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallNotesModal Analytics Analytics Tracking tracks modal view analytics when opened","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks modal view analytics when opened"},{"ancestorTitles":["CallNotesModal Analytics","Analytics Tracking"],"duration":66,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _native.useFocusEffect) is not a function\n at CallNotesModal (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/call-notes-modal.tsx:54:17)\n at renderWithHooks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:5608:18)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9884:13)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-analytics.test.tsx:147:13)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallNotesModal Analytics Analytics Tracking does not track analytics when modal is closed","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"does not track analytics when modal is closed"},{"ancestorTitles":["CallNotesModal Analytics","Analytics Tracking"],"duration":9,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _native.useFocusEffect) is not a function\n at CallNotesModal (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/call-notes-modal.tsx:54:17)\n at renderWithHooks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:5608:18)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9884:13)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-analytics.test.tsx:155:57)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallNotesModal Analytics Analytics Tracking tracks note addition analytics","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks note addition analytics"},{"ancestorTitles":["CallNotesModal Analytics","Analytics Tracking"],"duration":8,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _native.useFocusEffect) is not a function\n at CallNotesModal (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/call-notes-modal.tsx:54:17)\n at renderWithHooks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:5608:18)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9884:13)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-analytics.test.tsx:175:46)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallNotesModal Analytics Analytics Tracking tracks search analytics","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks search analytics"},{"ancestorTitles":["CallNotesModal Analytics","Analytics Tracking"],"duration":3,"failureDetails":[{}],"failureMessages":["TypeError: (0 , _native.useFocusEffect) is not a function\n at CallNotesModal (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/call-notes-modal.tsx:54:17)\n at renderWithHooks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:5608:18)\n at mountIndeterminateComponent (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9884:13)\n at beginWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11351:16)\n at performUnitOfWork (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15847:12)\n at workLoopSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15784:5)\n at renderRootSync (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15756:7)\n at performSyncWorkOnRoot (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15461:20)\n at flushSyncCallbacks (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2597:22)\n at flushActQueue (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2667:24)\n at act (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/react/cjs/react.development.js:2521:11)\n at actImplementation (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/act.ts:30:25)\n at renderWithAct (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render-act.ts:12:11)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:81:33)\n at renderInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@testing-library/react-native/src/render.tsx:44:10)\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-analytics.test.tsx:192:37)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallNotesModal Analytics Analytics Tracking tracks manual close analytics","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"tracks manual close analytics"},{"ancestorTitles":["CallNotesModal Analytics","Analytics Tracking"],"duration":45,"failureDetails":[{"matcherResult":{"message":"\u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\nError name: \u001b[31m\"TypeError\"\u001b[39m\nError message: \u001b[31m\"(0 , _native.useFocusEffect) is not a function\"\u001b[39m\n\n \u001b[0m \u001b[90m 52 |\u001b[39m\n \u001b[90m 53 |\u001b[39m \u001b[90m// Track analytics when modal becomes visible\u001b[39m\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 54 |\u001b[39m useFocusEffect(\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 55 |\u001b[39m useCallback(() \u001b[33m=>\u001b[39m {\n \u001b[90m 56 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\n \u001b[90m 57 |\u001b[39m wasModalOpenRef\u001b[33m.\u001b[39mcurrent \u001b[33m=\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\n\n \u001b[2mat CallNotesModal (\u001b[22msrc/components/calls/call-notes-modal.tsx\u001b[2m:54:17)\u001b[22m\n \u001b[2mat renderWithHooks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\n \u001b[2mat mountIndeterminateComponent (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\n \u001b[2mat beginWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\n \u001b[2mat performUnitOfWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\n \u001b[2mat workLoopSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\n \u001b[2mat renderRootSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\n \u001b[2mat performSyncWorkOnRoot (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\n \u001b[2mat flushSyncCallbacks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\n \u001b[2mat flushActQueue (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\n \u001b[2mat act (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\n \u001b[2mat actImplementation (\u001b[22mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\n \u001b[2mat renderWithAct (\u001b[22mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\n \u001b[2mat \u001b[22msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[2m:216:15\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[2m:217:14)\u001b[22m","pass":true}}],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\nError name: \u001b[31m\"TypeError\"\u001b[39m\nError message: \u001b[31m\"(0 , _native.useFocusEffect) is not a function\"\u001b[39m\n\n \u001b[0m \u001b[90m 52 |\u001b[39m\n \u001b[90m 53 |\u001b[39m \u001b[90m// Track analytics when modal becomes visible\u001b[39m\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 54 |\u001b[39m useFocusEffect(\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 55 |\u001b[39m useCallback(() \u001b[33m=>\u001b[39m {\n \u001b[90m 56 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\n \u001b[90m 57 |\u001b[39m wasModalOpenRef\u001b[33m.\u001b[39mcurrent \u001b[33m=\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\n\n \u001b[2mat CallNotesModal (\u001b[22msrc/components/calls/call-notes-modal.tsx\u001b[2m:54:17)\u001b[22m\n \u001b[2mat renderWithHooks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\n \u001b[2mat mountIndeterminateComponent (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\n \u001b[2mat beginWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\n \u001b[2mat performUnitOfWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\n \u001b[2mat workLoopSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\n \u001b[2mat renderRootSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\n \u001b[2mat performSyncWorkOnRoot (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\n \u001b[2mat flushSyncCallbacks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\n \u001b[2mat flushActQueue (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\n \u001b[2mat act (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\n \u001b[2mat actImplementation (\u001b[22mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\n \u001b[2mat renderWithAct (\u001b[22mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\n \u001b[2mat \u001b[22msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[2m:216:15\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[2m:217:14)\u001b[22m\n at Object.toThrow (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-analytics.test.tsx:217:14)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"CallNotesModal Analytics Analytics Tracking handles analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"handles analytics errors gracefully"}],"endTime":1755726221977,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallNotesModal Analytics › Analytics Tracking › tracks modal view analytics when opened\u001b[39m\u001b[22m\n\n TypeError: (0 , _native.useFocusEffect) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 52 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 53 |\u001b[39m \u001b[90m// Track analytics when modal becomes visible\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 54 |\u001b[39m useFocusEffect(\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 55 |\u001b[39m useCallback(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 56 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[90m 57 |\u001b[39m wasModalOpenRef\u001b[33m.\u001b[39mcurrent \u001b[33m=\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat CallNotesModal (\u001b[22m\u001b[2msrc/components/calls/call-notes-modal.tsx\u001b[2m:54:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithHooks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:134:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallNotesModal Analytics › Analytics Tracking › does not track analytics when modal is closed\u001b[39m\u001b[22m\n\n TypeError: (0 , _native.useFocusEffect) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 52 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 53 |\u001b[39m \u001b[90m// Track analytics when modal becomes visible\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 54 |\u001b[39m useFocusEffect(\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 55 |\u001b[39m useCallback(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 56 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[90m 57 |\u001b[39m wasModalOpenRef\u001b[33m.\u001b[39mcurrent \u001b[33m=\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat CallNotesModal (\u001b[22m\u001b[2msrc/components/calls/call-notes-modal.tsx\u001b[2m:54:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithHooks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:147:13)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallNotesModal Analytics › Analytics Tracking › tracks note addition analytics\u001b[39m\u001b[22m\n\n TypeError: (0 , _native.useFocusEffect) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 52 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 53 |\u001b[39m \u001b[90m// Track analytics when modal becomes visible\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 54 |\u001b[39m useFocusEffect(\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 55 |\u001b[39m useCallback(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 56 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[90m 57 |\u001b[39m wasModalOpenRef\u001b[33m.\u001b[39mcurrent \u001b[33m=\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat CallNotesModal (\u001b[22m\u001b[2msrc/components/calls/call-notes-modal.tsx\u001b[2m:54:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithHooks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:155:57)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallNotesModal Analytics › Analytics Tracking › tracks search analytics\u001b[39m\u001b[22m\n\n TypeError: (0 , _native.useFocusEffect) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 52 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 53 |\u001b[39m \u001b[90m// Track analytics when modal becomes visible\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 54 |\u001b[39m useFocusEffect(\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 55 |\u001b[39m useCallback(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 56 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[90m 57 |\u001b[39m wasModalOpenRef\u001b[33m.\u001b[39mcurrent \u001b[33m=\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat CallNotesModal (\u001b[22m\u001b[2msrc/components/calls/call-notes-modal.tsx\u001b[2m:54:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithHooks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:175:46)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallNotesModal Analytics › Analytics Tracking › tracks manual close analytics\u001b[39m\u001b[22m\n\n TypeError: (0 , _native.useFocusEffect) is not a function\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 52 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 53 |\u001b[39m \u001b[90m// Track analytics when modal becomes visible\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 54 |\u001b[39m useFocusEffect(\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 55 |\u001b[39m useCallback(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 56 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\u001b[22m\n\u001b[2m \u001b[90m 57 |\u001b[39m wasModalOpenRef\u001b[33m.\u001b[39mcurrent \u001b[33m=\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat CallNotesModal (\u001b[22m\u001b[2msrc/components/calls/call-notes-modal.tsx\u001b[2m:54:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithHooks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat mountIndeterminateComponent (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat beginWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performUnitOfWork (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat workLoopSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderRootSync (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat performSyncWorkOnRoot (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushSyncCallbacks (\u001b[22m\u001b[2mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat flushActQueue (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat act (\u001b[22m\u001b[2mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat actImplementation (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderWithAct (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat renderInternal (\u001b[22m\u001b[2mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:192:37)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mCallNotesModal Analytics › Analytics Tracking › handles analytics errors gracefully\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mnot\u001b[2m.\u001b[22mtoThrow\u001b[2m()\u001b[22m\n\n Error name: \u001b[31m\"TypeError\"\u001b[39m\n Error message: \u001b[31m\"(0 , _native.useFocusEffect) is not a function\"\u001b[39m\n\n \u001b[0m \u001b[90m 52 |\u001b[39m\n \u001b[90m 53 |\u001b[39m \u001b[90m// Track analytics when modal becomes visible\u001b[39m\n \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 54 |\u001b[39m useFocusEffect(\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 55 |\u001b[39m useCallback(() \u001b[33m=>\u001b[39m {\n \u001b[90m 56 |\u001b[39m \u001b[36mif\u001b[39m (isOpen) {\n \u001b[90m 57 |\u001b[39m wasModalOpenRef\u001b[33m.\u001b[39mcurrent \u001b[33m=\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\n\n \u001b[2mat CallNotesModal (\u001b[22msrc/components/calls/call-notes-modal.tsx\u001b[2m:54:17)\u001b[22m\n \u001b[2mat renderWithHooks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:5608:18)\u001b[22m\n \u001b[2mat mountIndeterminateComponent (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:9884:13)\u001b[22m\n \u001b[2mat beginWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:11351:16)\u001b[22m\n \u001b[2mat performUnitOfWork (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15847:12)\u001b[22m\n \u001b[2mat workLoopSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15784:5)\u001b[22m\n \u001b[2mat renderRootSync (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15756:7)\u001b[22m\n \u001b[2mat performSyncWorkOnRoot (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:15461:20)\u001b[22m\n \u001b[2mat flushSyncCallbacks (\u001b[22mnode_modules/react-test-renderer/cjs/react-test-renderer.development.js\u001b[2m:2597:22)\u001b[22m\n \u001b[2mat flushActQueue (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2667:24)\u001b[22m\n \u001b[2mat act (\u001b[22mnode_modules/react/cjs/react.development.js\u001b[2m:2521:11)\u001b[22m\n \u001b[2mat actImplementation (\u001b[22mnode_modules/@testing-library/react-native/src/act.ts\u001b[2m:30:25)\u001b[22m\n \u001b[2mat renderWithAct (\u001b[22mnode_modules/@testing-library/react-native/src/render-act.ts\u001b[2m:12:11)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:81:33)\u001b[22m\n \u001b[2mat renderInternal (\u001b[22mnode_modules/@testing-library/react-native/src/render.tsx\u001b[2m:44:10)\u001b[22m\n \u001b[2mat \u001b[22msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[2m:216:15\u001b[22m\n \u001b[2mat Object. (\u001b[22mnode_modules/expect/build/toThrowMatchers.js\u001b[2m:74:11)\u001b[22m\n \u001b[2mat Object.throwingMatcher [as toThrow] (\u001b[22mnode_modules/expect/build/index.js\u001b[2m:320:21)\u001b[22m\n \u001b[2mat Object.toThrow (\u001b[22msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[2m:217:14)\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 215 |\u001b[39m expect(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 216 |\u001b[39m render(\u001b[33m<\u001b[39m\u001b[33mCallNotesModal\u001b[39m {\u001b[33m...\u001b[39mdefaultProps} \u001b[33m/\u001b[39m\u001b[33m>\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 217 |\u001b[39m })\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoThrow()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 218 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 219 |\u001b[39m expect(consoleWarnSpy)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'Failed to track call notes modal analytics:'\u001b[39m\u001b[33m,\u001b[39m expect\u001b[33m.\u001b[39many(\u001b[33mError\u001b[39m))\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 220 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.toThrow (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/calls/__tests__/call-notes-modal-analytics.test.tsx\u001b[39m\u001b[0m\u001b[2m:217:14)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-analytics.test.tsx","startTime":1755726220060,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["Pin Actions Integration Tests","Routing functionality"],"duration":324,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Routing functionality should successfully route to call location","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should successfully route to call location"},{"ancestorTitles":["Pin Actions Integration Tests","Routing functionality"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Routing functionality should successfully route to unit location","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should successfully route to unit location"},{"ancestorTitles":["Pin Actions Integration Tests","Routing functionality"],"duration":66,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Routing functionality should handle routing failure gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle routing failure gracefully"},{"ancestorTitles":["Pin Actions Integration Tests","Routing functionality"],"duration":68,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Routing functionality should handle routing error gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle routing error gracefully"},{"ancestorTitles":["Pin Actions Integration Tests","Routing functionality"],"duration":1007,"failureDetails":[{"matcherResult":{"message":"\u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: \u001b[32m\"error\"\u001b[39m, \u001b[32m\"map.no_location_for_routing\"\u001b[39m\n\nNumber of calls: \u001b[31m0\u001b[39m","pass":false}}],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: \u001b[32m\"error\"\u001b[39m, \u001b[32m\"map.no_location_for_routing\"\u001b[39m\n\nNumber of calls: \u001b[31m0\u001b[39m\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/maps/__tests__/pin-actions.test.tsx:302:20)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"Pin Actions Integration Tests Routing functionality should show error when pin has no location data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"should show error when pin has no location data"},{"ancestorTitles":["Pin Actions Integration Tests","Routing functionality"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Routing functionality should route without user location when unavailable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should route without user location when unavailable"},{"ancestorTitles":["Pin Actions Integration Tests","Call detail navigation"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Call detail navigation should navigate to call details for call pins","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should navigate to call details for call pins"},{"ancestorTitles":["Pin Actions Integration Tests","Call detail navigation"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Call detail navigation should not show call details button for non-call pins","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show call details button for non-call pins"},{"ancestorTitles":["Pin Actions Integration Tests","Set as current call functionality"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Set as current call functionality should set call as current call for call pins","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should set call as current call for call pins"},{"ancestorTitles":["Pin Actions Integration Tests","Set as current call functionality"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Set as current call functionality should not show set as current call button for non-call pins","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show set as current call button for non-call pins"},{"ancestorTitles":["Pin Actions Integration Tests","Pin type detection"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Pin type detection should detect call pin by ImagePath","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should detect call pin by ImagePath"},{"ancestorTitles":["Pin Actions Integration Tests","Pin type detection"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Pin type detection should detect call pin by Type","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should detect call pin by Type"},{"ancestorTitles":["Pin Actions Integration Tests","Pin type detection"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Pin type detection should detect non-call pin correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should detect non-call pin correctly"},{"ancestorTitles":["Pin Actions Integration Tests","Modal behavior"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Modal behavior should close modal when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should close modal when close button is pressed"},{"ancestorTitles":["Pin Actions Integration Tests","Modal behavior"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Modal behavior should not render when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when closed"},{"ancestorTitles":["Pin Actions Integration Tests","Pin information display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Pin information display should display all pin information correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should display all pin information correctly"},{"ancestorTitles":["Pin Actions Integration Tests","Pin information display"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Pin information display should handle missing pin information gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle missing pin information gracefully"},{"ancestorTitles":["Pin Actions Integration Tests","Error handling"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Error handling should handle missing onSetAsCurrentCall prop gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing onSetAsCurrentCall prop gracefully"},{"ancestorTitles":["Pin Actions Integration Tests","Error handling"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"Pin Actions Integration Tests Error handling should handle missing pin ID gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing pin ID gracefully"}],"endTime":1755726222132,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mPin Actions Integration Tests › Routing functionality › should show error when pin has no location data\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mjest.fn()\u001b[39m\u001b[2m).\u001b[22mtoHaveBeenCalledWith\u001b[2m(\u001b[22m\u001b[32m...expected\u001b[39m\u001b[2m)\u001b[22m\n\n Expected: \u001b[32m\"error\"\u001b[39m, \u001b[32m\"map.no_location_for_routing\"\u001b[39m\n\n Number of calls: \u001b[31m0\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 300 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(routeButton)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 301 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 302 |\u001b[39m \u001b[36mawait\u001b[39m waitFor(() \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 303 |\u001b[39m expect(mockShowToast)\u001b[33m.\u001b[39mtoHaveBeenCalledWith(\u001b[32m'error'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'map.no_location_for_routing'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 304 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 305 |\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/maps/__tests__/pin-actions.test.tsx\u001b[39m\u001b[0m\u001b[2m:302:20)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/maps/__tests__/pin-actions.test.tsx","startTime":1755726220061,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["NotificationInbox"],"duration":143,"failureDetails":[],"failureMessages":[],"fullName":"NotificationInbox renders correctly when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly when closed"},{"ancestorTitles":["NotificationInbox"],"duration":54,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: Notifications\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:134:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox renders notifications when open","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"renders notifications when open"},{"ancestorTitles":["NotificationInbox"],"duration":1,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: This is a test notification\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:144:31)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox enters selection mode on long press","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"enters selection mode on long press"},{"ancestorTitles":["NotificationInbox"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: This is a test notification\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:160:31)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox toggles notification selection","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"toggles notification selection"},{"ancestorTitles":["NotificationInbox"],"duration":5,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: This is a test notification\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:182:31)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox selects all notifications","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"selects all notifications"},{"ancestorTitles":["NotificationInbox"],"duration":5,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: This is a test notification\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:203:31)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox exits selection mode on cancel","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"exits selection mode on cancel"},{"ancestorTitles":["NotificationInbox"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: Notifications\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:238:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox handles loading state","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"handles loading state"},{"ancestorTitles":["NotificationInbox"],"duration":4,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: No updates available\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:258:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox handles empty notifications state","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"handles empty notifications state"},{"ancestorTitles":["NotificationInbox"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"NotificationInbox handles missing unit or config","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles missing unit or config"},{"ancestorTitles":["NotificationInbox"],"duration":2,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: This is a test notification\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:284:31)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox opens notification detail on tap in normal mode","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"opens notification detail on tap in normal mode"},{"ancestorTitles":["NotificationInbox"],"duration":4,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: This is a test notification\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:299:31)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox resets state when component closes","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"resets state when component closes"},{"ancestorTitles":["NotificationInbox"],"duration":1,"failureDetails":[{}],"failureMessages":["Error: Unable to find an element with text: This is a test notification\n at Object.getByText (/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx:325:31)\n at Generator.next ()\n at asyncGeneratorStep (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17)\n at _next (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9)\n at /Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7\n at new Promise ()\n at Object. (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12)\n at Promise.then.completed (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:298:28)\n at new Promise ()\n at callAsyncCircusFn (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/utils.js:231:10)\n at _callCircusTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:316:40)\n at _runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:252:3)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:126:9)\n at _runTestsForDescribeBlock (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:121:9)\n at run (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/run.js:71:3)\n at runAndTransformResultsToJestFormat (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n at jestAdapter (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n at runTestInternal (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:367:16)\n at runTest (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/runTest.js:444:34)\n at Object.worker (/Volumes/USBSSD/dev/Resgrid/Responder/node_modules/jest-runner/build/testWorker.js:106:12)"],"fullName":"NotificationInbox calls delete API when bulk delete is confirmed","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"failed","title":"calls delete API when bulk delete is confirmed"},{"ancestorTitles":["NotificationInbox"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"NotificationInbox shows success toast on successful delete","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows success toast on successful delete"}],"endTime":1755726222158,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › renders notifications when open\u001b[39m\u001b[22m\n\n Unable to find an element with text: Notifications\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 132 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 133 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 134 |\u001b[39m expect(getByText(\u001b[32m'Notifications'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 135 |\u001b[39m expect(getByText(\u001b[32m'This is a test notification'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 136 |\u001b[39m expect(getByText(\u001b[32m'This is another test notification'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 137 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:134:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › enters selection mode on long press\u001b[39m\u001b[22m\n\n Unable to find an element with text: This is a test notification\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 142 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 143 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 144 |\u001b[39m \u001b[36mconst\u001b[39m firstNotification \u001b[33m=\u001b[39m getByText(\u001b[32m'This is a test notification'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 145 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 146 |\u001b[39m \u001b[36mawait\u001b[39m act(\u001b[36masync\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 147 |\u001b[39m fireEvent(firstNotification\u001b[33m,\u001b[39m \u001b[32m'onLongPress'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:144:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › toggles notification selection\u001b[39m\u001b[22m\n\n Unable to find an element with text: This is a test notification\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 158 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 159 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 160 |\u001b[39m \u001b[36mconst\u001b[39m firstNotification \u001b[33m=\u001b[39m getByText(\u001b[32m'This is a test notification'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 161 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 162 |\u001b[39m \u001b[90m// Enter selection mode\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 163 |\u001b[39m \u001b[36mawait\u001b[39m act(\u001b[36masync\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:160:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › selects all notifications\u001b[39m\u001b[22m\n\n Unable to find an element with text: This is a test notification\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 180 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 181 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 182 |\u001b[39m \u001b[36mconst\u001b[39m firstNotification \u001b[33m=\u001b[39m getByText(\u001b[32m'This is a test notification'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 183 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 184 |\u001b[39m \u001b[90m// Enter selection mode\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 185 |\u001b[39m \u001b[36mawait\u001b[39m act(\u001b[36masync\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:182:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › exits selection mode on cancel\u001b[39m\u001b[22m\n\n Unable to find an element with text: This is a test notification\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 201 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 202 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 203 |\u001b[39m \u001b[36mconst\u001b[39m firstNotification \u001b[33m=\u001b[39m getByText(\u001b[32m'This is a test notification'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 204 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 205 |\u001b[39m \u001b[90m// Enter selection mode\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 206 |\u001b[39m \u001b[36mawait\u001b[39m act(\u001b[36masync\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:203:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › handles loading state\u001b[39m\u001b[22m\n\n Unable to find an element with text: Notifications\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 236 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 237 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 238 |\u001b[39m expect(getByText(\u001b[32m'Notifications'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 239 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 240 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 241 |\u001b[39m it(\u001b[32m'handles empty notifications state'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:238:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › handles empty notifications state\u001b[39m\u001b[22m\n\n Unable to find an element with text: No updates available\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 256 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 257 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 258 |\u001b[39m expect(getByText(\u001b[32m'No updates available'\u001b[39m))\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 259 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 260 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 261 |\u001b[39m it(\u001b[32m'handles missing unit or config'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:258:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › opens notification detail on tap in normal mode\u001b[39m\u001b[22m\n\n Unable to find an element with text: This is a test notification\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 282 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 283 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 284 |\u001b[39m \u001b[36mconst\u001b[39m firstNotification \u001b[33m=\u001b[39m getByText(\u001b[32m'This is a test notification'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 285 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 286 |\u001b[39m \u001b[36mawait\u001b[39m act(\u001b[36masync\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[22m\n\u001b[2m \u001b[90m 287 |\u001b[39m fireEvent\u001b[33m.\u001b[39mpress(firstNotification)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:284:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › resets state when component closes\u001b[39m\u001b[22m\n\n Unable to find an element with text: This is a test notification\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 297 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 298 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 299 |\u001b[39m \u001b[36mconst\u001b[39m firstNotification \u001b[33m=\u001b[39m getByText(\u001b[32m'This is a test notification'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 300 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 301 |\u001b[39m \u001b[90m// Enter selection mode\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 302 |\u001b[39m \u001b[36mawait\u001b[39m act(\u001b[36masync\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:299:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mNotificationInbox › calls delete API when bulk delete is confirmed\u001b[39m\u001b[22m\n\n Unable to find an element with text: This is a test notification\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 323 |\u001b[39m )\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 324 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 325 |\u001b[39m \u001b[36mconst\u001b[39m firstNotification \u001b[33m=\u001b[39m getByText(\u001b[32m'This is a test notification'\u001b[39m)\u001b[33m;\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 326 |\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 327 |\u001b[39m \u001b[90m// Enter selection mode\u001b[39m\u001b[22m\n\u001b[2m \u001b[90m 328 |\u001b[39m \u001b[36mawait\u001b[39m act(\u001b[36masync\u001b[39m () \u001b[33m=>\u001b[39m {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object.getByText (\u001b[22m\u001b[2m\u001b[0m\u001b[36msrc/components/notifications/__tests__/NotificationInbox.test.tsx\u001b[39m\u001b[0m\u001b[2m:325:31)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat asyncGeneratorStep (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:3:17)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat _next (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:17:9)\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat \u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:22:7\u001b[22m\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2mnode_modules/@babel/runtime/helpers/asyncToGenerator.js\u001b[2m:14:12)\u001b[22m\u001b[2m\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notifications/__tests__/NotificationInbox.test.tsx","startTime":1755726220111,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["Personnel Page","Initial State and Loading"],"duration":70,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Initial State and Loading should render loading state during initial fetch","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render loading state during initial fetch"},{"ancestorTitles":["Personnel Page","Initial State and Loading"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Initial State and Loading should call fetchPersonnel on mount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call fetchPersonnel on mount"},{"ancestorTitles":["Personnel Page","Initial State and Loading"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Initial State and Loading should render search input","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render search input"},{"ancestorTitles":["Personnel Page","Personnel List Rendering"],"duration":59,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Personnel List Rendering should render personnel list when data is loaded","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render personnel list when data is loaded"},{"ancestorTitles":["Personnel Page","Personnel List Rendering"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Personnel List Rendering should render personnel names correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render personnel names correctly"},{"ancestorTitles":["Personnel Page","Personnel List Rendering"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Personnel List Rendering should handle personnel with empty IDs using keyExtractor fallback","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle personnel with empty IDs using keyExtractor fallback"},{"ancestorTitles":["Personnel Page","Zero State"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Zero State should render zero state when no personnel are available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render zero state when no personnel are available"},{"ancestorTitles":["Personnel Page","Zero State"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Zero State should render zero state when search returns no results","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render zero state when search returns no results"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should filter personnel by first name","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should filter personnel by first name"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should filter personnel by last name","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should filter personnel by last name"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should filter personnel by email","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should filter personnel by email"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should filter personnel by group name","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should filter personnel by group name"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should filter personnel by status","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should filter personnel by status"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should filter personnel by staffing","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should filter personnel by staffing"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should filter personnel by identification number","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should filter personnel by identification number"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should filter personnel by roles","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should filter personnel by roles"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should be case-insensitive","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should be case-insensitive"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should handle empty search query by showing all personnel","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle empty search query by showing all personnel"},{"ancestorTitles":["Personnel Page","Search Functionality"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Functionality should handle whitespace-only search query","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle whitespace-only search query"},{"ancestorTitles":["Personnel Page","Search Input Interactions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Input Interactions should call setSearchQuery when search input changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call setSearchQuery when search input changes"},{"ancestorTitles":["Personnel Page","Search Input Interactions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Input Interactions should display clear button when search query exists","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display clear button when search query exists"},{"ancestorTitles":["Personnel Page","Search Input Interactions"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Input Interactions should clear search when search input is changed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear search when search input is changed"},{"ancestorTitles":["Personnel Page","Search Input Interactions"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Search Input Interactions should not display clear button when search query is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display clear button when search query is empty"},{"ancestorTitles":["Personnel Page","Personnel Interactions"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Personnel Interactions should call selectPersonnel when personnel card is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call selectPersonnel when personnel card is pressed"},{"ancestorTitles":["Personnel Page","Personnel Interactions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Personnel Interactions should call selectPersonnel with correct ID for different personnel","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call selectPersonnel with correct ID for different personnel"},{"ancestorTitles":["Personnel Page","Pull-to-Refresh"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Pull-to-Refresh should have refresh control functionality","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should have refresh control functionality"},{"ancestorTitles":["Personnel Page","Components Integration"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Components Integration should render personnel details sheet","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render personnel details sheet"},{"ancestorTitles":["Personnel Page","Components Integration"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Components Integration should not show loading during refresh","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should not show loading during refresh"},{"ancestorTitles":["Personnel Page","Edge Cases"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Edge Cases should handle personnel with null or undefined properties","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle personnel with null or undefined properties"},{"ancestorTitles":["Personnel Page","Edge Cases"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Edge Cases should handle empty personnel array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty personnel array"},{"ancestorTitles":["Personnel Page","Edge Cases"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Edge Cases should handle undefined personnel array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle undefined personnel array"},{"ancestorTitles":["Personnel Page","Filter Functionality"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Filter Functionality should render filter button","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render filter button"},{"ancestorTitles":["Personnel Page","Filter Functionality"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Filter Functionality should call openFilterSheet when filter button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call openFilterSheet when filter button is pressed"},{"ancestorTitles":["Personnel Page","Filter Functionality"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Filter Functionality should display filter count badge when filters are selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display filter count badge when filters are selected"},{"ancestorTitles":["Personnel Page","Filter Functionality"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Filter Functionality should not display filter count badge when no filters are selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display filter count badge when no filters are selected"},{"ancestorTitles":["Personnel Page","Filter Functionality"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Filter Functionality should render PersonnelFilterSheet component","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render PersonnelFilterSheet component"},{"ancestorTitles":["Personnel Page","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Analytics Tracking should track personnel_viewed event when component mounts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track personnel_viewed event when component mounts"},{"ancestorTitles":["Personnel Page","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Analytics Tracking should track analytics with ISO timestamp format","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should track analytics with ISO timestamp format"},{"ancestorTitles":["Personnel Page","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Page Analytics Tracking should track analytics event on component mount","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics event on component mount"}],"endTime":1755726222822,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/personnel.test.tsx","startTime":1755726222014,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["PersonnelCard","Basic Rendering"],"duration":62,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Basic Rendering should render personnel card with all fields","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"status":"passed","title":"should render personnel card with all fields"},{"ancestorTitles":["PersonnelCard","Basic Rendering"],"duration":33,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Basic Rendering should render personnel card without optional fields","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should render personnel card without optional fields"},{"ancestorTitles":["PersonnelCard","Basic Rendering"],"duration":68,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Basic Rendering should handle personnel with many roles","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle personnel with many roles"},{"ancestorTitles":["PersonnelCard","Basic Rendering"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Basic Rendering should handle personnel with status destination","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle personnel with status destination"},{"ancestorTitles":["PersonnelCard","Conditional Rendering"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Conditional Rendering should not render email when not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render email when not provided"},{"ancestorTitles":["PersonnelCard","Conditional Rendering"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Conditional Rendering should not render phone when not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render phone when not provided"},{"ancestorTitles":["PersonnelCard","Conditional Rendering"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Conditional Rendering should not render group when not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render group when not provided"},{"ancestorTitles":["PersonnelCard","Conditional Rendering"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Conditional Rendering should not render status badge when status is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render status badge when status is empty"},{"ancestorTitles":["PersonnelCard","Conditional Rendering"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Conditional Rendering should not render staffing badge when staffing is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render staffing badge when staffing is empty"},{"ancestorTitles":["PersonnelCard","Conditional Rendering"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Conditional Rendering should not render roles when roles array is empty","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not render roles when roles array is empty"},{"ancestorTitles":["PersonnelCard","Conditional Rendering"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Conditional Rendering should not render status timestamp when not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render status timestamp when not provided"},{"ancestorTitles":["PersonnelCard","Styling and Colors"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Styling and Colors should use custom status color when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use custom status color when provided"},{"ancestorTitles":["PersonnelCard","Styling and Colors"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Styling and Colors should use custom staffing color when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use custom staffing color when provided"},{"ancestorTitles":["PersonnelCard","Styling and Colors"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Styling and Colors should use default colors when colors are not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should use default colors when colors are not provided"},{"ancestorTitles":["PersonnelCard","Name Handling"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Name Handling should handle names with spaces correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle names with spaces correctly"},{"ancestorTitles":["PersonnelCard","Name Handling"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Name Handling should handle empty first name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty first name"},{"ancestorTitles":["PersonnelCard","Name Handling"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Name Handling should handle empty last name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty last name"},{"ancestorTitles":["PersonnelCard","Name Handling"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Name Handling should handle both names empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle both names empty"},{"ancestorTitles":["PersonnelCard","Interactions"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Interactions should call onPress with personnel UserId when card is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onPress with personnel UserId when card is pressed"},{"ancestorTitles":["PersonnelCard","Interactions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Interactions should call onPress with correct UserId for different personnel","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onPress with correct UserId for different personnel"},{"ancestorTitles":["PersonnelCard","Interactions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Interactions should handle multiple press events","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle multiple press events"},{"ancestorTitles":["PersonnelCard","Accessibility"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Accessibility should have correct testID","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should have correct testID"},{"ancestorTitles":["PersonnelCard","Accessibility"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Accessibility should generate unique testIDs for different personnel","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should generate unique testIDs for different personnel"},{"ancestorTitles":["PersonnelCard","Date Formatting"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Date Formatting should format status timestamp correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should format status timestamp correctly"},{"ancestorTitles":["PersonnelCard","Date Formatting"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Date Formatting should handle different timestamp formats","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle different timestamp formats"},{"ancestorTitles":["PersonnelCard","Edge Cases"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Edge Cases should handle null or undefined roles array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle null or undefined roles array"},{"ancestorTitles":["PersonnelCard","Edge Cases"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Edge Cases should handle exactly 3 roles without +0 display","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle exactly 3 roles without +0 display"},{"ancestorTitles":["PersonnelCard","Edge Cases"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard Edge Cases should handle more than 3 roles correctly","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle more than 3 roles correctly"},{"ancestorTitles":["PersonnelCard","PII Protection"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard PII Protection should show contact information when user can view PII","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should show contact information when user can view PII"},{"ancestorTitles":["PersonnelCard","PII Protection"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard PII Protection should hide contact information when user cannot view PII","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should hide contact information when user cannot view PII"},{"ancestorTitles":["PersonnelCard","PII Protection"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard PII Protection should show group even when PII is restricted and no contact info","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show group even when PII is restricted and no contact info"},{"ancestorTitles":["PersonnelCard","PII Protection"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard PII Protection should handle PII restriction when personnel has no group","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle PII restriction when personnel has no group"},{"ancestorTitles":["PersonnelCard","PII Protection"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelCard PII Protection should still show other information when PII is restricted","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should still show other information when PII is restricted"}],"endTime":1755726222883,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/personnel/__tests__/personnel-card.test.tsx","startTime":1755726221893,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["AudioDeviceSelection","rendering"],"duration":64,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection rendering renders with title when showTitle is true","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with title when showTitle is true"},{"ancestorTitles":["AudioDeviceSelection","rendering"],"duration":75,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection rendering renders without title when showTitle is false","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders without title when showTitle is false"},{"ancestorTitles":["AudioDeviceSelection","rendering"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection rendering renders current selection section","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders current selection section"},{"ancestorTitles":["AudioDeviceSelection","rendering"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection rendering shows none selected when no devices are selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows none selected when no devices are selected"},{"ancestorTitles":["AudioDeviceSelection","rendering"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection rendering renders microphone and speaker sections","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders microphone and speaker sections"},{"ancestorTitles":["AudioDeviceSelection","device selection"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device selection displays available microphones","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"displays available microphones"},{"ancestorTitles":["AudioDeviceSelection","device selection"],"duration":29,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device selection displays available speakers","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"displays available speakers"},{"ancestorTitles":["AudioDeviceSelection","device selection"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device selection shows unavailable indicator for unavailable devices","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows unavailable indicator for unavailable devices"},{"ancestorTitles":["AudioDeviceSelection","device selection"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device selection calls setSelectedMicrophone when microphone device is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls setSelectedMicrophone when microphone device is pressed"},{"ancestorTitles":["AudioDeviceSelection","device selection"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device selection calls setSelectedSpeaker when speaker device is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls setSelectedSpeaker when speaker device is pressed"},{"ancestorTitles":["AudioDeviceSelection","device selection"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device selection highlights selected devices","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"highlights selected devices"},{"ancestorTitles":["AudioDeviceSelection","empty states"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection empty states shows no microphones available message when no microphones are available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows no microphones available message when no microphones are available"},{"ancestorTitles":["AudioDeviceSelection","empty states"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection empty states shows no speakers available message when no speakers are available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows no speakers available message when no speakers are available"},{"ancestorTitles":["AudioDeviceSelection","empty states"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection empty states shows both empty messages when no devices are available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows both empty messages when no devices are available"},{"ancestorTitles":["AudioDeviceSelection","device filtering"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device filtering filters out unavailable bluetooth devices for microphones","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"filters out unavailable bluetooth devices for microphones"},{"ancestorTitles":["AudioDeviceSelection","device filtering"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device filtering filters out unavailable devices for speakers","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"filters out unavailable devices for speakers"},{"ancestorTitles":["AudioDeviceSelection","device type labels"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device type labels shows correct labels for different device types","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"shows correct labels for different device types"},{"ancestorTitles":["AudioDeviceSelection","device type labels"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection device type labels shows fallback label for unknown device types","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows fallback label for unknown device types"},{"ancestorTitles":["AudioDeviceSelection","analytics"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection analytics tracks view analytics when component is rendered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks view analytics when component is rendered"},{"ancestorTitles":["AudioDeviceSelection","analytics"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection analytics tracks view analytics with no selected devices","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks view analytics with no selected devices"},{"ancestorTitles":["AudioDeviceSelection","analytics"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection analytics tracks device selection analytics when microphone is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks device selection analytics when microphone is selected"},{"ancestorTitles":["AudioDeviceSelection","analytics"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection analytics tracks device selection analytics when speaker is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks device selection analytics when speaker is selected"},{"ancestorTitles":["AudioDeviceSelection","analytics"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection analytics tracks device selection analytics for already selected device","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks device selection analytics for already selected device"},{"ancestorTitles":["AudioDeviceSelection","analytics"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection analytics handles analytics errors gracefully without breaking functionality","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully without breaking functionality"},{"ancestorTitles":["AudioDeviceSelection","analytics"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"AudioDeviceSelection analytics handles view analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles view analytics errors gracefully"}],"endTime":1755726222958,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/settings/__tests__/audio-device-selection.test.tsx","startTime":1755726222196,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["PersonnelDetailsSheet","Basic Rendering"],"duration":80,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Basic Rendering should render personnel details sheet when open","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"status":"passed","title":"should render personnel details sheet when open"},{"ancestorTitles":["PersonnelDetailsSheet","Basic Rendering"],"duration":43,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Basic Rendering should render close button","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render close button"},{"ancestorTitles":["PersonnelDetailsSheet","Basic Rendering"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Basic Rendering should display formatted timestamps","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display formatted timestamps"},{"ancestorTitles":["PersonnelDetailsSheet","Conditional Rendering"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Conditional Rendering should not render identification number when empty","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not render identification number when empty"},{"ancestorTitles":["PersonnelDetailsSheet","Conditional Rendering"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Conditional Rendering should not render contact section when email and phone are empty","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should not render contact section when email and phone are empty"},{"ancestorTitles":["PersonnelDetailsSheet","Conditional Rendering"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Conditional Rendering should not render group section when group name is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render group section when group name is empty"},{"ancestorTitles":["PersonnelDetailsSheet","Conditional Rendering"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Conditional Rendering should not render status destination when not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not render status destination when not provided"},{"ancestorTitles":["PersonnelDetailsSheet","Conditional Rendering"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Conditional Rendering should not render staffing section when staffing is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render staffing section when staffing is empty"},{"ancestorTitles":["PersonnelDetailsSheet","Conditional Rendering"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Conditional Rendering should not render roles section when roles array is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render roles section when roles array is empty"},{"ancestorTitles":["PersonnelDetailsSheet","Conditional Rendering"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Conditional Rendering should not render timestamps when not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render timestamps when not provided"},{"ancestorTitles":["PersonnelDetailsSheet","Store Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Store Integration should not render when details are not open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when details are not open"},{"ancestorTitles":["PersonnelDetailsSheet","Store Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Store Integration should not render when no personnel is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when no personnel is selected"},{"ancestorTitles":["PersonnelDetailsSheet","Store Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Store Integration should not render when selected personnel is not found","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when selected personnel is not found"},{"ancestorTitles":["PersonnelDetailsSheet","Store Integration"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Store Integration should render correct personnel when different personnel is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render correct personnel when different personnel is selected"},{"ancestorTitles":["PersonnelDetailsSheet","Interactions"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Interactions should call closeDetails when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call closeDetails when close button is pressed"},{"ancestorTitles":["PersonnelDetailsSheet","Interactions"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Interactions should handle multiple close button presses","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle multiple close button presses"},{"ancestorTitles":["PersonnelDetailsSheet","Name Handling"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Name Handling should handle names with spaces correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle names with spaces correctly"},{"ancestorTitles":["PersonnelDetailsSheet","Name Handling"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Name Handling should handle empty first name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty first name"},{"ancestorTitles":["PersonnelDetailsSheet","Name Handling"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Name Handling should handle empty last name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty last name"},{"ancestorTitles":["PersonnelDetailsSheet","Name Handling"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Name Handling should handle both names empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle both names empty"},{"ancestorTitles":["PersonnelDetailsSheet","Badge Colors"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Badge Colors should use custom status color when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use custom status color when provided"},{"ancestorTitles":["PersonnelDetailsSheet","Badge Colors"],"duration":30,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Badge Colors should use custom staffing color when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use custom staffing color when provided"},{"ancestorTitles":["PersonnelDetailsSheet","Badge Colors"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Badge Colors should handle empty colors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty colors gracefully"},{"ancestorTitles":["PersonnelDetailsSheet","Date Formatting"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Date Formatting should format status timestamp correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should format status timestamp correctly"},{"ancestorTitles":["PersonnelDetailsSheet","Date Formatting"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Date Formatting should format staffing timestamp correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should format staffing timestamp correctly"},{"ancestorTitles":["PersonnelDetailsSheet","Date Formatting"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Date Formatting should handle different timestamp formats","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle different timestamp formats"},{"ancestorTitles":["PersonnelDetailsSheet","Roles Display"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Roles Display should display all roles when present","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should display all roles when present"},{"ancestorTitles":["PersonnelDetailsSheet","Roles Display"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Roles Display should handle single role","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle single role"},{"ancestorTitles":["PersonnelDetailsSheet","Roles Display"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Roles Display should handle many roles","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle many roles"},{"ancestorTitles":["PersonnelDetailsSheet","Edge Cases"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Edge Cases should handle null roles array","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle null roles array"},{"ancestorTitles":["PersonnelDetailsSheet","Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Edge Cases should handle undefined personnel array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle undefined personnel array"},{"ancestorTitles":["PersonnelDetailsSheet","Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Edge Cases should handle empty personnel array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty personnel array"},{"ancestorTitles":["PersonnelDetailsSheet","PII Protection"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet PII Protection should show contact information when user can view PII","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should show contact information when user can view PII"},{"ancestorTitles":["PersonnelDetailsSheet","PII Protection"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet PII Protection should hide contact information when user cannot view PII","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should hide contact information when user cannot view PII"},{"ancestorTitles":["PersonnelDetailsSheet","PII Protection"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet PII Protection should still show other information when PII is restricted","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"status":"passed","title":"should still show other information when PII is restricted"},{"ancestorTitles":["PersonnelDetailsSheet","PII Protection"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet PII Protection should handle PII restriction with personnel who have no contact info","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle PII restriction with personnel who have no contact info"},{"ancestorTitles":["PersonnelDetailsSheet","Actionsheet Props"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Actionsheet Props should pass correct props to Actionsheet","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should pass correct props to Actionsheet"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should track analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when sheet becomes visible"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should track analytics with correct data for personnel with minimal data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with correct data for personnel with minimal data"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should track analytics with canViewPII false when user cannot view PII","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with canViewPII false when user cannot view PII"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should track analytics with undefined canViewPII as false","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with undefined canViewPII as false"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should not track analytics when sheet is not open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when sheet is not open"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should not track analytics when no personnel is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when no personnel is selected"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should not track analytics when selected personnel is not found","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when selected personnel is not found"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":26,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should track analytics with correct role count","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with correct role count"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should track analytics with null roles array as 0 count","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with null roles array as 0 count"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should track analytics only once when component re-renders with same data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics only once when component re-renders with same data"},{"ancestorTitles":["PersonnelDetailsSheet","Analytics"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelDetailsSheet Analytics should track analytics again when personnel selection changes","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should track analytics again when personnel selection changes"}],"endTime":1755726222990,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/personnel/__tests__/personnel-details-sheet.test.tsx","startTime":1755726221946,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CallNotesModal","Basic Functionality"],"duration":69,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Basic Functionality renders correctly when open","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders correctly when open"},{"ancestorTitles":["CallNotesModal","Basic Functionality"],"duration":39,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Basic Functionality fetches call notes when opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"fetches call notes when opened"},{"ancestorTitles":["CallNotesModal","Basic Functionality"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Basic Functionality calls onClose when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls onClose when close button is pressed"},{"ancestorTitles":["CallNotesModal","Basic Functionality"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Basic Functionality renders correctly when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly when closed"},{"ancestorTitles":["CallNotesModal","Basic Functionality"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Basic Functionality shows loading state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows loading state correctly"},{"ancestorTitles":["CallNotesModal","Basic Functionality"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Basic Functionality shows zero state when no notes found","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows zero state when no notes found"},{"ancestorTitles":["CallNotesModal","Search Functionality"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Search Functionality handles search input correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles search input correctly"},{"ancestorTitles":["CallNotesModal","Search Functionality"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Search Functionality tracks search analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks search analytics"},{"ancestorTitles":["CallNotesModal","Note Addition"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Note Addition handles adding a new note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles adding a new note"},{"ancestorTitles":["CallNotesModal","Note Addition"],"duration":79,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Note Addition tracks note addition analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks note addition analytics"},{"ancestorTitles":["CallNotesModal","Note Addition"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Note Addition disables add button when note input is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"disables add button when note input is empty"},{"ancestorTitles":["CallNotesModal","Note Addition"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Note Addition does not add empty note when only whitespace is entered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not add empty note when only whitespace is entered"},{"ancestorTitles":["CallNotesModal","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Analytics Tracking tracks modal view analytics when opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view analytics when opened"},{"ancestorTitles":["CallNotesModal","Analytics Tracking"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Analytics Tracking tracks modal view analytics with search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view analytics with search query"},{"ancestorTitles":["CallNotesModal","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Analytics Tracking tracks manual close analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks manual close analytics"},{"ancestorTitles":["CallNotesModal","Analytics Tracking"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Analytics Tracking does not track analytics when modal is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when modal is closed"},{"ancestorTitles":["CallNotesModal","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Analytics Tracking tracks analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct timestamp format"},{"ancestorTitles":["CallNotesModal","Analytics Tracking"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Analytics Tracking handles analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully"},{"ancestorTitles":["CallNotesModal","Edge Cases"],"duration":36,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Edge Cases handles missing user profile gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles missing user profile gracefully"},{"ancestorTitles":["CallNotesModal","Edge Cases"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Edge Cases handles empty call notes array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles empty call notes array"},{"ancestorTitles":["CallNotesModal","Edge Cases"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal Edge Cases handles null call notes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles null call notes"}],"endTime":1755726223046,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal.test.tsx","startTime":1755726221995,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Call Detail Menu Analytics Tests"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Analytics Tests should track analytics when menu is opened","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics when menu is opened"},{"ancestorTitles":["Call Detail Menu Analytics Tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Analytics Tests should not track analytics when menu is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when menu is closed"},{"ancestorTitles":["Call Detail Menu Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Analytics Tests should track analytics with canEditCall false when user cannot create calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with canEditCall false when user cannot create calls"},{"ancestorTitles":["Call Detail Menu Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Analytics Tests should track analytics with canEditCall false when canUserCreateCalls is undefined","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with canEditCall false when canUserCreateCalls is undefined"},{"ancestorTitles":["Call Detail Menu Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Analytics Tests should track analytics only once when menu is opened multiple times","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics only once when menu is opened multiple times"},{"ancestorTitles":["Call Detail Menu Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Analytics Tests should track analytics again when menu is reopened after being closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics again when menu is reopened after being closed"},{"ancestorTitles":["Call Detail Menu Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Analytics Tests should track correct timestamp format","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track correct timestamp format"},{"ancestorTitles":["Call Detail Menu Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Analytics Tests should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"}],"endTime":1755726223091,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-detail-menu-analytics.test.tsx","startTime":1755726221937,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ProtocolDetailsSheet","Sheet Visibility"],"duration":52,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Sheet Visibility should render when isDetailsOpen is true and selectedProtocol exists","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render when isDetailsOpen is true and selectedProtocol exists"},{"ancestorTitles":["ProtocolDetailsSheet","Protocol Information Display"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Protocol Information Display should display protocol name in header","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display protocol name in header"},{"ancestorTitles":["ProtocolDetailsSheet","Protocol Information Display"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Protocol Information Display should display protocol code when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display protocol code when available"},{"ancestorTitles":["ProtocolDetailsSheet","Protocol Information Display"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Protocol Information Display should display protocol description when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display protocol description when available"},{"ancestorTitles":["ProtocolDetailsSheet","Protocol Information Display"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Protocol Information Display should display formatted date","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display formatted date"},{"ancestorTitles":["ProtocolDetailsSheet","Protocol Information Display"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Protocol Information Display should display protocol content in WebView","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should display protocol content in WebView"},{"ancestorTitles":["ProtocolDetailsSheet","Protocol without Optional Fields"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Protocol without Optional Fields should not display code section when code is empty","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not display code section when code is empty"},{"ancestorTitles":["ProtocolDetailsSheet","Protocol without Optional Fields"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Protocol without Optional Fields should not display description section when description is empty","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not display description section when description is empty"},{"ancestorTitles":["ProtocolDetailsSheet","Protocol without Optional Fields"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Protocol without Optional Fields should still display WebView with protocol content","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should still display WebView with protocol content"},{"ancestorTitles":["ProtocolDetailsSheet","Close Functionality"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Close Functionality should have close button in header","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should have close button in header"},{"ancestorTitles":["ProtocolDetailsSheet","Close Functionality"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Close Functionality should call closeDetails when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call closeDetails when close button is pressed"},{"ancestorTitles":["ProtocolDetailsSheet","WebView Content"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet WebView Content should render WebView with proper HTML structure","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"should render WebView with proper HTML structure"},{"ancestorTitles":["ProtocolDetailsSheet","WebView Content"],"duration":34,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet WebView Content should include proper CSS styles for light theme","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should include proper CSS styles for light theme"},{"ancestorTitles":["ProtocolDetailsSheet","WebView Content"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet WebView Content should include responsive CSS","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should include responsive CSS"},{"ancestorTitles":["ProtocolDetailsSheet","Dark Theme Support"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Dark Theme Support should handle dark theme rendering","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle dark theme rendering"},{"ancestorTitles":["ProtocolDetailsSheet","Date Display Logic"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Date Display Logic should prefer UpdatedOn over CreatedOn when both are available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should prefer UpdatedOn over CreatedOn when both are available"},{"ancestorTitles":["ProtocolDetailsSheet","Date Display Logic"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Date Display Logic should fall back to CreatedOn when UpdatedOn is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should fall back to CreatedOn when UpdatedOn is empty"},{"ancestorTitles":["ProtocolDetailsSheet","HTML Content Handling"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet HTML Content Handling should strip HTML tags from description but keep them in WebView","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should strip HTML tags from description but keep them in WebView"},{"ancestorTitles":["ProtocolDetailsSheet","Accessibility"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Accessibility should be accessible for screen readers","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should be accessible for screen readers"},{"ancestorTitles":["ProtocolDetailsSheet","Accessibility"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Accessibility should support keyboard navigation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should support keyboard navigation"},{"ancestorTitles":["ProtocolDetailsSheet","Analytics"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Analytics should track analytics when protocol details sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when protocol details sheet becomes visible"},{"ancestorTitles":["ProtocolDetailsSheet","Analytics"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Analytics should track analytics when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when close button is pressed"},{"ancestorTitles":["ProtocolDetailsSheet","Analytics"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Analytics should track analytics when actionsheet is closed via onClose","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when actionsheet is closed via onClose"},{"ancestorTitles":["ProtocolDetailsSheet","Analytics"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Analytics should handle analytics errors gracefully on view","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully on view"},{"ancestorTitles":["ProtocolDetailsSheet","Analytics"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Analytics should handle analytics errors gracefully on close","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully on close"},{"ancestorTitles":["ProtocolDetailsSheet","Analytics"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Analytics should track correct analytics data for protocol without optional fields","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track correct analytics data for protocol without optional fields"},{"ancestorTitles":["ProtocolDetailsSheet","Analytics"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Analytics should not track analytics when selectedProtocol is null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when selectedProtocol is null"},{"ancestorTitles":["ProtocolDetailsSheet","Analytics"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolDetailsSheet Analytics should not track analytics when sheet is not open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when sheet is not open"}],"endTime":1755726223170,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/protocols/__tests__/protocol-details-sheet.test.tsx","startTime":1755726221861,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["UserStatusCard"],"duration":28,"failureDetails":[],"failureMessages":[],"fullName":"UserStatusCard renders loading state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders loading state correctly"},{"ancestorTitles":["UserStatusCard"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"UserStatusCard renders user status correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders user status correctly"},{"ancestorTitles":["UserStatusCard"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"UserStatusCard handles unknown status correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles unknown status correctly"},{"ancestorTitles":["UserStatusCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UserStatusCard converts label colors correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"converts label colors correctly"}],"endTime":1755726223293,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/home/__tests__/user-status-card.test.tsx","startTime":1755726222910,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CalendarScreen"],"duration":24,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen renders calendar screen correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders calendar screen correctly"},{"ancestorTitles":["CalendarScreen"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen initializes data on mount","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"initializes data on mount"},{"ancestorTitles":["CalendarScreen"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen tracks analytics when view becomes visible","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when view becomes visible"},{"ancestorTitles":["CalendarScreen"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen switches between tabs correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"switches between tabs correctly"},{"ancestorTitles":["CalendarScreen","Today Tab"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Today Tab shows loading state for today's items","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows loading state for today's items"},{"ancestorTitles":["CalendarScreen","Today Tab"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Today Tab shows error state for today's items","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"shows error state for today's items"},{"ancestorTitles":["CalendarScreen","Today Tab"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Today Tab shows empty state when no today's items","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows empty state when no today's items"},{"ancestorTitles":["CalendarScreen","Today Tab"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Today Tab renders today's items when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders today's items when available"},{"ancestorTitles":["CalendarScreen","Upcoming Tab"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Upcoming Tab shows loading state for upcoming items","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows loading state for upcoming items"},{"ancestorTitles":["CalendarScreen","Upcoming Tab"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Upcoming Tab shows empty state when no upcoming items","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows empty state when no upcoming items"},{"ancestorTitles":["CalendarScreen","Upcoming Tab"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Upcoming Tab renders upcoming items when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders upcoming items when available"},{"ancestorTitles":["CalendarScreen","Calendar Tab"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Calendar Tab renders calendar view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders calendar view"},{"ancestorTitles":["CalendarScreen","Calendar Tab"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Calendar Tab shows select date message when no date selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows select date message when no date selected"},{"ancestorTitles":["CalendarScreen","Calendar Tab"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Calendar Tab shows events for selected date","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows events for selected date"},{"ancestorTitles":["CalendarScreen","Calendar Tab"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Calendar Tab shows empty message when no events for selected date","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows empty message when no events for selected date"},{"ancestorTitles":["CalendarScreen","Calendar Item Details"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Calendar Item Details opens details sheet when item is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"opens details sheet when item is pressed"},{"ancestorTitles":["CalendarScreen","Calendar Item Details"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Calendar Item Details closes details sheet when close is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"closes details sheet when close is pressed"},{"ancestorTitles":["CalendarScreen","Error Handling"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Error Handling calls retry action when retry button is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"calls retry action when retry button is pressed"},{"ancestorTitles":["CalendarScreen","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Analytics Tracking tracks calendar view on mount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks calendar view on mount"},{"ancestorTitles":["CalendarScreen","Analytics Tracking"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Analytics Tracking tracks tab changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks tab changes"},{"ancestorTitles":["CalendarScreen","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarScreen Analytics Tracking tracks item interactions","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks item interactions"}],"endTime":1755726223332,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/calendar.test.tsx","startTime":1755726223110,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CloseCallBottomSheet"],"duration":69,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should render the close call bottom sheet","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render the close call bottom sheet"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":115,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should show error toast when no close type is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show error toast when no close type is selected"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":106,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should successfully close call with valid data","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should successfully close call with valid data"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":65,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call with empty note","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle close call with empty note"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":58,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call API error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close call API error"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":77,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call type 1","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close call type 1"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":60,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call type 2","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close call type 2"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":85,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call type 3","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close call type 3"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":59,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call type 4","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close call type 4"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":64,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call type 5","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close call type 5"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":62,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call type 6","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close call type 6"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":59,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle close call type 7","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close call type 7"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should disable buttons when submitting","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should disable buttons when submitting"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should cancel and reset form","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should cancel and reset form"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":62,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should handle fetchCalls error gracefully","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should handle fetchCalls error gracefully"},{"ancestorTitles":["CloseCallBottomSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet should not render when isOpen is false","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when isOpen is false"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks bottom sheet view analytics when opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks bottom sheet view analytics when opened"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks bottom sheet view analytics with loading state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks bottom sheet view analytics with loading state"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking does not track analytics when modal is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when modal is closed"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks close type selection analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks close type selection analytics"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks close type selection with previous type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks close type selection with previous type"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks manual close analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks manual close analytics"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks manual close analytics with form data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks manual close analytics with form data"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks close call attempt analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks close call attempt analytics"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks close call attempt analytics with note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks close call attempt analytics with note"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":61,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks close call success analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks close call success analytics"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":72,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks close call failure analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks close call failure analytics"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking handles analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully"},{"ancestorTitles":["CloseCallBottomSheet","Analytics Tracking"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"CloseCallBottomSheet Analytics Tracking tracks analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct timestamp format"}],"endTime":1755726223390,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/close-call-bottom-sheet.test.tsx","startTime":1755726221791,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["UnitsFilterSheet component"],"duration":1153,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet component should be importable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should be importable"}],"endTime":1755726223385,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/units/__tests__/units-filter-sheet-basic.test.tsx","startTime":1755726222185,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CallNotesModal"],"duration":54,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal renders correctly when open","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders correctly when open"},{"ancestorTitles":["CallNotesModal"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal fetches call notes when opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"fetches call notes when opened"},{"ancestorTitles":["CallNotesModal"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal calls onClose when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls onClose when close button is pressed"},{"ancestorTitles":["CallNotesModal"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal renders correctly when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly when closed"},{"ancestorTitles":["CallNotesModal"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal handles search input correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles search input correctly"},{"ancestorTitles":["CallNotesModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal shows loading state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows loading state correctly"},{"ancestorTitles":["CallNotesModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal shows zero state when no notes found","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows zero state when no notes found"},{"ancestorTitles":["CallNotesModal"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal handles adding a new note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles adding a new note"},{"ancestorTitles":["CallNotesModal"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal disables add button when note input is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"disables add button when note input is empty"},{"ancestorTitles":["CallNotesModal"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal disables add button when loading","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"disables add button when loading"},{"ancestorTitles":["CallNotesModal"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal displays note author and timestamp correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"displays note author and timestamp correctly"},{"ancestorTitles":["CallNotesModal"],"duration":56,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal clears note input after successful submission","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"clears note input after successful submission"},{"ancestorTitles":["CallNotesModal"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal does not add empty note when only whitespace is entered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not add empty note when only whitespace is entered"},{"ancestorTitles":["CallNotesModal"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallNotesModal handles missing user profile gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles missing user profile gracefully"}],"endTime":1755726223503,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-notes-modal-new.test.tsx","startTime":1755726223077,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["HomeMap"],"duration":115,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap renders correctly with map components","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders correctly with map components"},{"ancestorTitles":["HomeMap"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap shows side menu in landscape mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows side menu in landscape mode"},{"ancestorTitles":["HomeMap"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap shows drawer in portrait mode when opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows drawer in portrait mode when opened"},{"ancestorTitles":["HomeMap"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap shows recenter button when user has moved map and location is available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows recenter button when user has moved map and location is available"},{"ancestorTitles":["HomeMap"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap does not show recenter button when map is locked","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"does not show recenter button when map is locked"},{"ancestorTitles":["HomeMap"],"duration":51,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap renders map pins when data is available","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders map pins when data is available"},{"ancestorTitles":["HomeMap"],"duration":56,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap opens pin detail modal when pin is pressed","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"opens pin detail modal when pin is pressed"},{"ancestorTitles":["HomeMap"],"duration":75,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap closes pin detail modal when close button is pressed","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"closes pin detail modal when close button is pressed"},{"ancestorTitles":["HomeMap"],"duration":54,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap handles setting pin as current call","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"handles setting pin as current call"},{"ancestorTitles":["HomeMap"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap shows user location marker when location is available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows user location marker when location is available"},{"ancestorTitles":["HomeMap"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap handles landscape mode correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles landscape mode correctly"},{"ancestorTitles":["HomeMap","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap Analytics Tracking tracks map view on focus","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks map view on focus"},{"ancestorTitles":["HomeMap","Analytics Tracking"],"duration":55,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap Analytics Tracking tracks pin press interactions","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks pin press interactions"},{"ancestorTitles":["HomeMap","Analytics Tracking"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap Analytics Tracking tracks recenter map action","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks recenter map action"},{"ancestorTitles":["HomeMap","Analytics Tracking"],"duration":54,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap Analytics Tracking tracks set as current call action","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"tracks set as current call action"},{"ancestorTitles":["HomeMap","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap Analytics Tracking tracks analytics with correct location data when location is unavailable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct location data when location is unavailable"},{"ancestorTitles":["HomeMap","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"HomeMap Analytics Tracking tracks analytics with map locked state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with map locked state"}],"endTime":1755726223578,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/map.test.tsx","startTime":1755726222849,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["DispatchSelectionModal"],"duration":97,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should render when visible","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should render when visible"},{"ancestorTitles":["DispatchSelectionModal"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should not render when not visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when not visible"},{"ancestorTitles":["DispatchSelectionModal"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should call toggleEveryone when everyone option is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call toggleEveryone when everyone option is pressed"},{"ancestorTitles":["DispatchSelectionModal"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should call toggleUser when user is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call toggleUser when user is pressed"},{"ancestorTitles":["DispatchSelectionModal"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should call setSearchQuery when search input changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call setSearchQuery when search input changes"},{"ancestorTitles":["DispatchSelectionModal"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should call clearSelection and onClose when cancel button is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call clearSelection and onClose when cancel button is pressed"},{"ancestorTitles":["DispatchSelectionModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should show selection count","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show selection count"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track view analytics when modal becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics when modal becomes visible"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should not track view analytics when modal is not visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track view analytics when modal is not visible"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track view analytics with loading state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics with loading state"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics when everyone toggle is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when everyone toggle is pressed"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics when user is toggled","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when user is toggled"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics when group is toggled","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when group is toggled"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics when role is toggled","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when role is toggled"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics when unit is toggled","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when unit is toggled"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics for search","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics for search"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics when confirm is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when confirm is pressed"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics when cancel is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when cancel is pressed"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":52,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track analytics with everyone selected state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with everyone selected state"},{"ancestorTitles":["DispatchSelectionModal","Analytics"],"duration":38,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal Analytics should track view analytics only once when modal opens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track view analytics only once when modal opens"}],"endTime":1755726223654,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/dispatch-selection-modal.test.tsx","startTime":1755726223000,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CallFilesModal"],"duration":48,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal renders correctly when closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders correctly when closed"},{"ancestorTitles":["CallFilesModal"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal renders correctly when open","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders correctly when open"},{"ancestorTitles":["CallFilesModal"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal calls fetchCallFiles when modal opens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls fetchCallFiles when modal opens"},{"ancestorTitles":["CallFilesModal"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal displays the correct title using i18n","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"displays the correct title using i18n"},{"ancestorTitles":["CallFilesModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal displays file list when files are available","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"displays file list when files are available"},{"ancestorTitles":["CallFilesModal"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal displays file details correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays file details correctly"},{"ancestorTitles":["CallFilesModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal calls onClose when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls onClose when close button is pressed"},{"ancestorTitles":["CallFilesModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal has proper accessibility attributes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"has proper accessibility attributes"},{"ancestorTitles":["CallFilesModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal renders the scrollable content area","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders the scrollable content area"},{"ancestorTitles":["CallFilesModal"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal handles different call IDs correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles different call IDs correctly"},{"ancestorTitles":["CallFilesModal"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal maintains proper component structure","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"maintains proper component structure"},{"ancestorTitles":["CallFilesModal","Loading States"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Loading States displays loading spinner when fetching files","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays loading spinner when fetching files"},{"ancestorTitles":["CallFilesModal","Error States"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Error States displays error message when file fetch fails","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays error message when file fetch fails"},{"ancestorTitles":["CallFilesModal","Error States"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Error States allows retry on error","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows retry on error"},{"ancestorTitles":["CallFilesModal","Empty States"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Empty States displays empty state when no files available","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"displays empty state when no files available"},{"ancestorTitles":["CallFilesModal","File Download"],"duration":66,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal File Download downloads and shares file when clicked","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"downloads and shares file when clicked"},{"ancestorTitles":["CallFilesModal","File Download"],"duration":57,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal File Download handles download errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles download errors gracefully"},{"ancestorTitles":["CallFilesModal","File Download"],"duration":112,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal File Download shows downloading state when file is being downloaded","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows downloading state when file is being downloaded"},{"ancestorTitles":["CallFilesModal","File Format Utilities"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal File Format Utilities formats file sizes correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"formats file sizes correctly"},{"ancestorTitles":["CallFilesModal","File Format Utilities"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal File Format Utilities formats timestamps correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"formats timestamps correctly"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks modal view analytics when opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view analytics when opened"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks modal view analytics with no files","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view analytics with no files"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks modal view analytics with loading state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view analytics with loading state"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks modal view analytics with error state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view analytics with error state"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking does not track analytics when modal is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when modal is closed"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks close button analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks close button analytics"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks retry button analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks retry button analytics"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks file download start analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks file download start analytics"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":105,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks file download completion analytics","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"tracks file download completion analytics"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":59,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks file download failure analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks file download failure analytics"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking handles analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully"},{"ancestorTitles":["CallFilesModal","Analytics Tracking"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"CallFilesModal Analytics Tracking tracks correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks correct timestamp format"}],"endTime":1755726223665,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-files-modal.test.tsx","startTime":1755726223021,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ShiftDetailsSheet","Component Rendering"],"duration":29,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Component Rendering should render the shift details sheet when open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render the shift details sheet when open"},{"ancestorTitles":["ShiftDetailsSheet","Component Rendering"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Component Rendering should not render anything when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render anything when closed"},{"ancestorTitles":["ShiftDetailsSheet","Component Rendering"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Component Rendering should not render when no shift is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when no shift is selected"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should display shift name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display shift name"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should display shift code when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display shift code when available"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should display in-shift badge when user is in shift","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display in-shift badge when user is in shift"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should not display in-shift badge when user is not in shift","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display in-shift badge when user is not in shift"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should display personnel count","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display personnel count"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should display group count","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display group count"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should display next day information when available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display next day information when available"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should display schedule type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display schedule type"},{"ancestorTitles":["ShiftDetailsSheet","Shift Information Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Shift Information Display should display assignment type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display assignment type"},{"ancestorTitles":["ShiftDetailsSheet","Tab Navigation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Tab Navigation should display info tab by default","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display info tab by default"},{"ancestorTitles":["ShiftDetailsSheet","Tab Navigation"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Tab Navigation should switch to calendar tab when clicked","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should switch to calendar tab when clicked"},{"ancestorTitles":["ShiftDetailsSheet","Loading States"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Loading States should display loading spinner when shift is loading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display loading spinner when shift is loading"},{"ancestorTitles":["ShiftDetailsSheet","Recent Shift Days"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Recent Shift Days should display all shift days when available","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should display all shift days when available"},{"ancestorTitles":["ShiftDetailsSheet","Recent Shift Days"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Recent Shift Days should not display recent shift days section when no days available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display recent shift days section when no days available"},{"ancestorTitles":["ShiftDetailsSheet","Recent Shift Days"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Recent Shift Days should display all shift days when scrolling is enabled","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should display all shift days when scrolling is enabled"},{"ancestorTitles":["ShiftDetailsSheet","Recent Shift Days"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Recent Shift Days should render content within a ScrollView for scrollability","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render content within a ScrollView for scrollability"},{"ancestorTitles":["ShiftDetailsSheet","Date Formatting"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Date Formatting should handle invalid next day date gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle invalid next day date gracefully"},{"ancestorTitles":["ShiftDetailsSheet","Date Formatting"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Date Formatting should handle empty next day","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty next day"},{"ancestorTitles":["ShiftDetailsSheet","Schedule and Assignment Types"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Schedule and Assignment Types should display manual schedule type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display manual schedule type"},{"ancestorTitles":["ShiftDetailsSheet","Schedule and Assignment Types"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Schedule and Assignment Types should display required assignment type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display required assignment type"},{"ancestorTitles":["ShiftDetailsSheet","Schedule and Assignment Types"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Schedule and Assignment Types should display unknown for invalid schedule type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display unknown for invalid schedule type"},{"ancestorTitles":["ShiftDetailsSheet","Schedule and Assignment Types"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Schedule and Assignment Types should display unknown for invalid assignment type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display unknown for invalid assignment type"},{"ancestorTitles":["ShiftDetailsSheet","Interaction"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Interaction should call onClose when close is triggered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onClose when close is triggered"},{"ancestorTitles":["ShiftDetailsSheet","Interaction"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Interaction should call selectShiftDay when shift day card is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call selectShiftDay when shift day card is pressed"},{"ancestorTitles":["ShiftDetailsSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Analytics Tracking should track analytics when sheet is opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when sheet is opened"},{"ancestorTitles":["ShiftDetailsSheet","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Analytics Tracking should not track analytics when sheet is not open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when sheet is not open"},{"ancestorTitles":["ShiftDetailsSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Analytics Tracking should track analytics when tab is changed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics when tab is changed"},{"ancestorTitles":["ShiftDetailsSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Analytics Tracking should track analytics when sheet is closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics when sheet is closed"},{"ancestorTitles":["ShiftDetailsSheet","Analytics Tracking"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Analytics Tracking should handle analytics with missing shift data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle analytics with missing shift data"},{"ancestorTitles":["ShiftDetailsSheet","Analytics Tracking"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Analytics Tracking should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["ShiftDetailsSheet","Analytics Tracking"],"duration":47,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Analytics Tracking should track correct landscape orientation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track correct landscape orientation"},{"ancestorTitles":["ShiftDetailsSheet","Analytics Tracking"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Analytics Tracking should track correct color scheme","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track correct color scheme"},{"ancestorTitles":["ShiftDetailsSheet","Calendar Tab"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Calendar Tab should render calendar view when calendar tab is active","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render calendar view when calendar tab is active"},{"ancestorTitles":["ShiftDetailsSheet","Edge Cases"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Edge Cases should handle shift without code","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle shift without code"},{"ancestorTitles":["ShiftDetailsSheet","Edge Cases"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Edge Cases should handle zero personnel count","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle zero personnel count"},{"ancestorTitles":["ShiftDetailsSheet","Edge Cases"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDetailsSheet Edge Cases should handle zero group count","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle zero group count"}],"endTime":1755726223704,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/shift-details-sheet.test.tsx","startTime":1755726223414,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["SideMenu"],"duration":38,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu should render PTT button with normal styling when not connected to voice call","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render PTT button with normal styling when not connected to voice call"},{"ancestorTitles":["SideMenu"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu should render PTT button with active styling when connected to voice call","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render PTT button with active styling when connected to voice call"},{"ancestorTitles":["SideMenu"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu should open LiveKit bottom sheet when PTT button is pressed and not connected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should open LiveKit bottom sheet when PTT button is pressed and not connected"},{"ancestorTitles":["SideMenu"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu should open LiveKit bottom sheet when PTT button is pressed and connected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should open LiveKit bottom sheet when PTT button is pressed and connected"},{"ancestorTitles":["SideMenu"],"duration":37,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu should render PTT button with correct dark mode styling when not connected","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render PTT button with correct dark mode styling when not connected"},{"ancestorTitles":["SideMenu"],"duration":42,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu should render PTT button with correct dark mode styling when connected","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render PTT button with correct dark mode styling when connected"},{"ancestorTitles":["SideMenu"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu should render profile section correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render profile section correctly"},{"ancestorTitles":["SideMenu"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu should render all navigation menu items","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"status":"passed","title":"should render all navigation menu items"},{"ancestorTitles":["SideMenu","Audio Stream Button"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu Audio Stream Button should render with outline styling when no stream is playing","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render with outline styling when no stream is playing"},{"ancestorTitles":["SideMenu","Audio Stream Button"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu Audio Stream Button should render with filled styling when stream is playing","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render with filled styling when stream is playing"},{"ancestorTitles":["SideMenu","Audio Stream Button"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu Audio Stream Button should open audio stream bottom sheet when pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should open audio stream bottom sheet when pressed"},{"ancestorTitles":["SideMenu","Audio Stream Button"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu Audio Stream Button should re-open audio stream bottom sheet when pressed while playing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should re-open audio stream bottom sheet when pressed while playing"},{"ancestorTitles":["SideMenu","Profile Section"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu Profile Section should display FullName from security store when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display FullName from security store when available"},{"ancestorTitles":["SideMenu","Profile Section"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu Profile Section should display DepartmentName from security store when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display DepartmentName from security store when available"},{"ancestorTitles":["SideMenu","Profile Section"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"SideMenu Profile Section should fallback to profile name when security store FullName is not available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should fallback to profile name when security store FullName is not available"}],"endTime":1755726223822,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/sidebar/__tests__/side-menu.test.tsx","startTime":1755726223316,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useContactsStore","initial state"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore initial state should have correct initial state","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should have correct initial state"},{"ancestorTitles":["useContactsStore","fetchContacts"],"duration":19,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore fetchContacts should fetch contacts successfully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should fetch contacts successfully"},{"ancestorTitles":["useContactsStore","fetchContacts"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore fetchContacts should handle fetch contacts error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch contacts error"},{"ancestorTitles":["useContactsStore","fetchContacts"],"duration":160,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore fetchContacts should set loading state during fetch","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should set loading state during fetch"},{"ancestorTitles":["useContactsStore","fetchContactNotes"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore fetchContactNotes should fetch contact notes successfully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should fetch contact notes successfully"},{"ancestorTitles":["useContactsStore","fetchContactNotes"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore fetchContactNotes should handle fetch contact notes error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch contact notes error"},{"ancestorTitles":["useContactsStore","fetchContactNotes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore fetchContactNotes should not fetch notes if already exists for contact","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not fetch notes if already exists for contact"},{"ancestorTitles":["useContactsStore","fetchContactNotes"],"duration":156,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore fetchContactNotes should set loading state during fetch","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should set loading state during fetch"},{"ancestorTitles":["useContactsStore","fetchContactNotes"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore fetchContactNotes should handle empty notes response","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty notes response"},{"ancestorTitles":["useContactsStore","setSearchQuery"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore setSearchQuery should update search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should update search query"},{"ancestorTitles":["useContactsStore","selectContact"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore selectContact should select contact and open details","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should select contact and open details"},{"ancestorTitles":["useContactsStore","closeDetails"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore closeDetails should close details modal","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should close details modal"},{"ancestorTitles":["useContactsStore","integration scenarios"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore integration scenarios should handle multiple contact notes for different contacts","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle multiple contact notes for different contacts"},{"ancestorTitles":["useContactsStore","integration scenarios"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useContactsStore integration scenarios should maintain existing notes when fetching new ones","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should maintain existing notes when fetching new ones"}],"endTime":1755726223865,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/contacts/__tests__/store.test.ts","startTime":1755726223352,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["usePersonnelStatusBottomSheetStore","initial state"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore initial state should have correct initial state","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"status":"passed","title":"should have correct initial state"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","setIsOpen"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore setIsOpen should open the bottom sheet with status","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open the bottom sheet with status"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","setIsOpen"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore setIsOpen should open the bottom sheet without status","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should open the bottom sheet without status"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","setIsOpen"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore setIsOpen should close the bottom sheet","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should close the bottom sheet"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","step navigation"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore step navigation should navigate to next step correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should navigate to next step correctly"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","step navigation"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore step navigation should navigate to previous step correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should navigate to previous step correctly"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should set selected call correctly and update related state","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should set selected call correctly and update related state"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should clear call selection when null is passed","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should clear call selection when null is passed"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should set selected group correctly and update related state","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should set selected group correctly and update related state"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should clear group selection when null is passed","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should clear group selection when null is passed"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should set response type to none and clear selections","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should set response type to none and clear selections"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should set response type without clearing selections for non-none types","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set response type without clearing selections for non-none types"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should set selected tab correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set selected tab correctly"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should set note correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set note correctly"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should set responding to correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set responding to correctly"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","state setters"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore state setters should set loading state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set loading state correctly"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","fetchGroups"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore fetchGroups should fetch groups successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch groups successfully"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","fetchGroups"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore fetchGroups should handle fetchGroups error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle fetchGroups error"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","fetchGroups"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore fetchGroups should handle loading state correctly during fetchGroups","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle loading state correctly during fetchGroups"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","reset"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore reset should reset all state to initial values","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"status":"passed","title":"should reset all state to initial values"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","submitStatus"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore submitStatus should submit status successfully with call","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should submit status successfully with call"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","submitStatus"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore submitStatus should submit status successfully with station","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should submit status successfully with station"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","submitStatus"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore submitStatus should submit status successfully with no destination","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should submit status successfully with no destination"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","submitStatus"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore submitStatus should handle missing userId","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle missing userId"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","submitStatus"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore submitStatus should handle missing status","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle missing status"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","submitStatus"],"duration":null,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore submitStatus should handle submission error","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"pending","title":"should handle submission error"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","submitStatus"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore submitStatus should handle loading state correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle loading state correctly"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","Detail-based logic helper methods"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore Detail-based logic helper methods should correctly determine if destination is required based on Detail value","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should correctly determine if destination is required based on Detail value"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","Detail-based logic helper methods"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore Detail-based logic helper methods should correctly determine if calls are allowed based on Detail value","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should correctly determine if calls are allowed based on Detail value"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","Detail-based logic helper methods"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore Detail-based logic helper methods should correctly determine if stations are allowed based on Detail value","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should correctly determine if stations are allowed based on Detail value"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","Detail-based logic helper methods"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore Detail-based logic helper methods should correctly determine GPS requirements based on Gps field","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should correctly determine GPS requirements based on Gps field"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","GPS validation and offline queue integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore GPS validation and offline queue integration should fail submission when GPS is required but not available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should fail submission when GPS is required but not available"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","GPS validation and offline queue integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore GPS validation and offline queue integration should proceed with submission when GPS is required and available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should proceed with submission when GPS is required and available"},{"ancestorTitles":["usePersonnelStatusBottomSheetStore","GPS validation and offline queue integration"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"usePersonnelStatusBottomSheetStore GPS validation and offline queue integration should add to offline queue when direct submission fails","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should add to offline queue when direct submission fails"}],"endTime":1755726223870,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/status/__tests__/personnel-status-store.test.ts","startTime":1755726223222,"status":"focused","summary":""},{"assertionResults":[{"ancestorTitles":["DispatchSelectionModal"],"duration":40,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should render when visible","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render when visible"},{"ancestorTitles":["DispatchSelectionModal"],"duration":54,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should not render when not visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when not visible"},{"ancestorTitles":["DispatchSelectionModal"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should render search input","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render search input"},{"ancestorTitles":["DispatchSelectionModal"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"DispatchSelectionModal should render confirm and cancel buttons","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render confirm and cancel buttons"}],"endTime":1755726223942,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/dispatch-selection-basic.test.tsx","startTime":1755726223589,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["StaffingButtons"],"duration":67,"failureDetails":[],"failureMessages":[],"fullName":"StaffingButtons renders staffing buttons correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders staffing buttons correctly"},{"ancestorTitles":["StaffingButtons"],"duration":127,"failureDetails":[],"failureMessages":[],"fullName":"StaffingButtons calls setIsOpen when button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls setIsOpen when button is pressed"}],"endTime":1755726223992,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/home/__tests__/staffing-buttons.test.tsx","startTime":1755726223427,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["StaffingBottomSheet","when bottom sheet is closed"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet when bottom sheet is closed should not render step content when isOpen is false","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should not render step content when isOpen is false"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should render step 1 correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render step 1 correctly"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should render available staffing options","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render available staffing options"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should handle staffing selection","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle staffing selection"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":31,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should show next button","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show next button"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should disable next button when no staffing selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should disable next button when no staffing selected"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should enable next button when staffing is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should enable next button when staffing is selected"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should handle next button press","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle next button press"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should render \"no staffing options\" when no staffing available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render \"no staffing options\" when no staffing available"},{"ancestorTitles":["StaffingBottomSheet","step 1 - select staffing"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 1 - select staffing should render \"no staffing options\" when activeStaffing is null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render \"no staffing options\" when activeStaffing is null"},{"ancestorTitles":["StaffingBottomSheet","step 2 - add note"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 2 - add note should render step 2 correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render step 2 correctly"},{"ancestorTitles":["StaffingBottomSheet","step 2 - add note"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 2 - add note should display selected staffing info","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display selected staffing info"},{"ancestorTitles":["StaffingBottomSheet","step 2 - add note"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 2 - add note should render note textarea","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render note textarea"},{"ancestorTitles":["StaffingBottomSheet","step 2 - add note"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 2 - add note should handle note input change","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle note input change"},{"ancestorTitles":["StaffingBottomSheet","step 2 - add note"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 2 - add note should render previous and next buttons","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render previous and next buttons"},{"ancestorTitles":["StaffingBottomSheet","step 2 - add note"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 2 - add note should handle previous button press","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle previous button press"},{"ancestorTitles":["StaffingBottomSheet","step 2 - add note"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 2 - add note should handle next button press","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle next button press"},{"ancestorTitles":["StaffingBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 3 - confirm should render step 3 correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render step 3 correctly"},{"ancestorTitles":["StaffingBottomSheet","step 3 - confirm"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 3 - confirm should display review information","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should display review information"},{"ancestorTitles":["StaffingBottomSheet","step 3 - confirm"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 3 - confirm should not show note section when note is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show note section when note is empty"},{"ancestorTitles":["StaffingBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 3 - confirm should render previous and submit buttons","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render previous and submit buttons"},{"ancestorTitles":["StaffingBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 3 - confirm should handle submit button press","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle submit button press"},{"ancestorTitles":["StaffingBottomSheet","step 3 - confirm"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 3 - confirm should show submitting text when loading","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show submitting text when loading"},{"ancestorTitles":["StaffingBottomSheet","step 3 - confirm"],"duration":82,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step 3 - confirm should disable buttons when loading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should disable buttons when loading"},{"ancestorTitles":["StaffingBottomSheet","close behavior"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet close behavior should call reset when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call reset when closed"},{"ancestorTitles":["StaffingBottomSheet","step titles"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step titles should show correct title for select-staffing step","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show correct title for select-staffing step"},{"ancestorTitles":["StaffingBottomSheet","step titles"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step titles should show correct title for add-note step","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show correct title for add-note step"},{"ancestorTitles":["StaffingBottomSheet","step titles"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step titles should show correct title for confirm step with staffing name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show correct title for confirm step with staffing name"},{"ancestorTitles":["StaffingBottomSheet","step numbers"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step numbers should show step 1 for select-staffing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show step 1 for select-staffing"},{"ancestorTitles":["StaffingBottomSheet","step numbers"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step numbers should show step 2 for add-note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show step 2 for add-note"},{"ancestorTitles":["StaffingBottomSheet","step numbers"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet step numbers should show step 3 for confirm","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show step 3 for confirm"},{"ancestorTitles":["StaffingBottomSheet","analytics tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet analytics tracking should track view analytics when sheet opens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics when sheet opens"},{"ancestorTitles":["StaffingBottomSheet","analytics tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet analytics tracking should track view analytics when step changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics when step changes"},{"ancestorTitles":["StaffingBottomSheet","analytics tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet analytics tracking should track staffing selection analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track staffing selection analytics"},{"ancestorTitles":["StaffingBottomSheet","analytics tracking"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet analytics tracking should track step navigation analytics for next","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track step navigation analytics for next"},{"ancestorTitles":["StaffingBottomSheet","analytics tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet analytics tracking should track step navigation analytics for previous","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track step navigation analytics for previous"},{"ancestorTitles":["StaffingBottomSheet","analytics tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet analytics tracking should track submit analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track submit analytics"},{"ancestorTitles":["StaffingBottomSheet","analytics tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet analytics tracking should track close analytics when dismissed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track close analytics when dismissed"},{"ancestorTitles":["StaffingBottomSheet","analytics tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"StaffingBottomSheet analytics tracking should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"}],"endTime":1755726224038,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/staffing/__tests__/staffing-bottom-sheet.test.tsx","startTime":1755726223523,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","CallKeep Mute State Callback"],"duration":17,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration CallKeep Mute State Callback should register mute state callback when connecting on iOS","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should register mute state callback when connecting on iOS"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","CallKeep Mute State Callback"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration CallKeep Mute State Callback should clear mute state callback when disconnecting on iOS","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear mute state callback when disconnecting on iOS"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","CallKeep Mute State Callback"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration CallKeep Mute State Callback should not register callback on non-iOS platforms","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not register callback on non-iOS platforms"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Room Connection with CallKeep"],"duration":108,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Room Connection with CallKeep should start CallKeep call on successful room connection (iOS)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should start CallKeep call on successful room connection (iOS)"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Room Connection with CallKeep"],"duration":61,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Room Connection with CallKeep should not start CallKeep call on Android","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not start CallKeep call on Android"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Room Connection with CallKeep"],"duration":104,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Room Connection with CallKeep should handle CallKeep start call errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle CallKeep start call errors gracefully"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Room Disconnection with CallKeep"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Room Disconnection with CallKeep should end CallKeep call on room disconnection (iOS)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should end CallKeep call on room disconnection (iOS)"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Room Disconnection with CallKeep"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Room Disconnection with CallKeep should not end CallKeep call on Android","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not end CallKeep call on Android"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Room Disconnection with CallKeep"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Room Disconnection with CallKeep should handle CallKeep end call errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle CallKeep end call errors gracefully"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Room Disconnection with CallKeep"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Room Disconnection with CallKeep should handle disconnection when no room instance exists","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle disconnection when no room instance exists"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Connection State Changes with CallKeep"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Connection State Changes with CallKeep should end CallKeep call on connection lost (iOS)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should end CallKeep call on connection lost (iOS)"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Connection State Changes with CallKeep"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Connection State Changes with CallKeep should not end CallKeep call on Android disconnection","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not end CallKeep call on Android disconnection"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Store State Management"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Store State Management should initialize with correct default state","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"status":"passed","title":"should initialize with correct default state"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Store State Management"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Store State Management should clear error when setting selected room","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should clear error when setting selected room"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Store State Management"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Store State Management should clear error explicitly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear error explicitly"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Microphone Control"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Microphone Control should enable microphone when connected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should enable microphone when connected"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Microphone Control"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Microphone Control should disable microphone when connected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should disable microphone when connected"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Microphone Control"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Microphone Control should handle microphone errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle microphone errors"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Microphone Control"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Microphone Control should handle microphone control when not connected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle microphone control when not connected"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Connection Prevention"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Connection Prevention should prevent connection when already connecting","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should prevent connection when already connecting"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Connection Prevention"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Connection Prevention should prevent connection when already connected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should prevent connection when already connected"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Error Handling","Error Handling"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Error Handling Error Handling should handle room initialization errors","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle room initialization errors"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Error Handling","Error Handling"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Error Handling Error Handling should handle basic error state management","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle basic error state management"},{"ancestorTitles":["useLiveKitCallStore with CallKeep Integration","Error Handling"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useLiveKitCallStore with CallKeep Integration Error Handling should handle basic error state management","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle basic error state management"}],"endTime":1755726224083,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/features/livekit-call/store/__tests__/useLiveKitCallStore.test.ts","startTime":1755726223687,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["DepartmentStats"],"duration":51,"failureDetails":[],"failureMessages":[],"fullName":"DepartmentStats renders loading state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders loading state correctly"},{"ancestorTitles":["DepartmentStats"],"duration":17,"failureDetails":[],"failureMessages":[],"fullName":"DepartmentStats renders department statistics correctly","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"status":"passed","title":"renders department statistics correctly"},{"ancestorTitles":["DepartmentStats"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"DepartmentStats handles zero statistics correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles zero statistics correctly"}],"endTime":1755726224098,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/home/__tests__/department-stats.test.tsx","startTime":1755726223674,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["PushNotificationModal","Push Notification Modal"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Push Notification Modal should not render when modal is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when modal is closed"},{"ancestorTitles":["PushNotificationModal","Push Notification Modal"],"duration":44,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Push Notification Modal should render call notification correctly","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should render call notification correctly"},{"ancestorTitles":["PushNotificationModal"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should render message notification correctly","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should render message notification correctly"},{"ancestorTitles":["PushNotificationModal"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should render chat notification correctly","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should render chat notification correctly"},{"ancestorTitles":["PushNotificationModal"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should render group chat notification correctly","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should render group chat notification correctly"},{"ancestorTitles":["PushNotificationModal"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should handle close button press","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close button press"},{"ancestorTitles":["PushNotificationModal"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should handle view call button press","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle view call button press"},{"ancestorTitles":["PushNotificationModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should display correct icon for call notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display correct icon for call notification"},{"ancestorTitles":["PushNotificationModal"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should display correct icon for message notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display correct icon for message notification"},{"ancestorTitles":["PushNotificationModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should display correct icon for chat notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display correct icon for chat notification"},{"ancestorTitles":["PushNotificationModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should display correct icon for group chat notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display correct icon for group chat notification"},{"ancestorTitles":["PushNotificationModal"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should display correct icon for unknown notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display correct icon for unknown notification"},{"ancestorTitles":["PushNotificationModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should handle notification without title","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle notification without title"},{"ancestorTitles":["PushNotificationModal"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal should handle notification without body","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle notification without body"},{"ancestorTitles":["PushNotificationModal","Analytics"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Analytics should track view analytics when modal becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics when modal becomes visible"},{"ancestorTitles":["PushNotificationModal","Analytics"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Analytics should not track view analytics when modal is not visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track view analytics when modal is not visible"},{"ancestorTitles":["PushNotificationModal","Analytics"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Analytics should track view analytics for message notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics for message notification"},{"ancestorTitles":["PushNotificationModal","Analytics"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Analytics should track view analytics for notification without title","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics for notification without title"},{"ancestorTitles":["PushNotificationModal","Analytics"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Analytics should track view analytics for notification without body","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics for notification without body"},{"ancestorTitles":["PushNotificationModal","Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Analytics should not track view analytics when notification is null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track view analytics when notification is null"},{"ancestorTitles":["PushNotificationModal","Analytics"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Analytics should only track view analytics once per modal opening","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should only track view analytics once per modal opening"},{"ancestorTitles":["PushNotificationModal","Analytics"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"PushNotificationModal Analytics should handle analytics tracking errors gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle analytics tracking errors gracefully"}],"endTime":1755726224253,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/push-notification/__tests__/push-notification-modal.test.tsx","startTime":1755726223724,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ShiftsScreen"],"duration":57,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen renders correctly with default state","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders correctly with default state"},{"ancestorTitles":["ShiftsScreen"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen switches between today and all shifts views","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"switches between today and all shifts views"},{"ancestorTitles":["ShiftsScreen"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen shows all shifts when view is set to all","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows all shifts when view is set to all"},{"ancestorTitles":["ShiftsScreen"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen handles search input correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles search input correctly"},{"ancestorTitles":["ShiftsScreen"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen shows loading state for today shifts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows loading state for today shifts"},{"ancestorTitles":["ShiftsScreen"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen shows loading state for all shifts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows loading state for all shifts"},{"ancestorTitles":["ShiftsScreen"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen shows zero state when no shifts available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows zero state when no shifts available"},{"ancestorTitles":["ShiftsScreen"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen shows zero state when no today shifts available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows zero state when no today shifts available"},{"ancestorTitles":["ShiftsScreen"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen calls fetchTodaysShifts on mount when in today view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls fetchTodaysShifts on mount when in today view"},{"ancestorTitles":["ShiftsScreen"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen calls fetchAllShifts when switching to all view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls fetchAllShifts when switching to all view"},{"ancestorTitles":["ShiftsScreen"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen opens shift details sheet when shift is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"opens shift details sheet when shift is selected"},{"ancestorTitles":["ShiftsScreen"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen opens shift day details sheet when shift day is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"opens shift day details sheet when shift day is selected"},{"ancestorTitles":["ShiftsScreen"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen highlights active tab correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"highlights active tab correctly"},{"ancestorTitles":["ShiftsScreen"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen handles pull to refresh for today view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles pull to refresh for today view"},{"ancestorTitles":["ShiftsScreen"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen handles pull to refresh for all shifts view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles pull to refresh for all shifts view"},{"ancestorTitles":["ShiftsScreen"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen filters results based on search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"filters results based on search query"},{"ancestorTitles":["ShiftsScreen"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen filters today shifts based on search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"filters today shifts based on search query"},{"ancestorTitles":["ShiftsScreen"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen handles empty search results","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles empty search results"},{"ancestorTitles":["ShiftsScreen","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen Analytics Tracking tracks shifts view on mount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks shifts view on mount"},{"ancestorTitles":["ShiftsScreen","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen Analytics Tracking tracks tab changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks tab changes"},{"ancestorTitles":["ShiftsScreen","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen Analytics Tracking tracks search events","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks search events"},{"ancestorTitles":["ShiftsScreen","Analytics Tracking"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen Analytics Tracking tracks refresh actions","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks refresh actions"},{"ancestorTitles":["ShiftsScreen","Analytics Tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen Analytics Tracking tracks shift selection in today view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks shift selection in today view"},{"ancestorTitles":["ShiftsScreen","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen Analytics Tracking tracks shift day selection in today view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks shift day selection in today view"},{"ancestorTitles":["ShiftsScreen","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen Analytics Tracking tracks analytics with search query state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with search query state"},{"ancestorTitles":["ShiftsScreen","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ShiftsScreen Analytics Tracking tracks analytics for all shifts view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics for all shifts view"}],"endTime":1755726224436,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/shifts.test.tsx","startTime":1755726223927,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["LiveKitBottomSheet","Component Rendering"],"duration":19,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Component Rendering should render successfully when bottom sheet is not visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render successfully when bottom sheet is not visible"},{"ancestorTitles":["LiveKitBottomSheet","Component Rendering"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Component Rendering should render successfully when bottom sheet is visible","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render successfully when bottom sheet is visible"},{"ancestorTitles":["LiveKitBottomSheet","Component Rendering"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Component Rendering should render successfully when connecting","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render successfully when connecting"},{"ancestorTitles":["LiveKitBottomSheet","Component Rendering"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Component Rendering should render successfully when connected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render successfully when connected"},{"ancestorTitles":["LiveKitBottomSheet","Store Interactions"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Store Interactions should call fetchVoiceSettings when opening room selection view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call fetchVoiceSettings when opening room selection view"},{"ancestorTitles":["LiveKitBottomSheet","Store Interactions"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Store Interactions should handle empty rooms list","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty rooms list"},{"ancestorTitles":["LiveKitBottomSheet","Store Interactions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Store Interactions should handle connected state with room info","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle connected state with room info"},{"ancestorTitles":["LiveKitBottomSheet","Store Interactions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Store Interactions should handle talking state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle talking state"},{"ancestorTitles":["LiveKitBottomSheet","Audio Device State"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Audio Device State should handle missing microphone device","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing microphone device"},{"ancestorTitles":["LiveKitBottomSheet","Audio Device State"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Audio Device State should handle missing speaker device","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing speaker device"},{"ancestorTitles":["LiveKitBottomSheet","Edge Cases"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Edge Cases should handle missing currentRoom gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing currentRoom gracefully"},{"ancestorTitles":["LiveKitBottomSheet","Edge Cases"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Edge Cases should handle missing localParticipant gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing localParticipant gracefully"},{"ancestorTitles":["LiveKitBottomSheet","Edge Cases"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Edge Cases should handle empty room name gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty room name gracefully"},{"ancestorTitles":["LiveKitBottomSheet","Component State Management"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Component State Management should handle view transitions","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle view transitions"},{"ancestorTitles":["LiveKitBottomSheet","Component State Management"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Component State Management should handle microphone state changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle microphone state changes"},{"ancestorTitles":["LiveKitBottomSheet","Component State Management"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Component State Management should call audio service methods","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call audio service methods"},{"ancestorTitles":["LiveKitBottomSheet","Analytics"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Analytics should track analytics event when bottom sheet is opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics event when bottom sheet is opened"},{"ancestorTitles":["LiveKitBottomSheet","Analytics"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Analytics should not track analytics event when bottom sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics event when bottom sheet is closed"},{"ancestorTitles":["LiveKitBottomSheet","Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Analytics should track analytics event with connected state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics event with connected state"},{"ancestorTitles":["LiveKitBottomSheet","Analytics"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"LiveKitBottomSheet Analytics should track analytics event with bluetooth devices","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics event with bluetooth devices"}],"endTime":1755726224517,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/livekit/__tests__/livekit-bottom-sheet.test.tsx","startTime":1755726223833,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["LoginInfoBottomSheet","Basic Rendering"],"duration":104,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Basic Rendering renders correctly when open","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"renders correctly when open"},{"ancestorTitles":["LoginInfoBottomSheet","Basic Rendering"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Basic Rendering does not render when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render when closed"},{"ancestorTitles":["LoginInfoBottomSheet","Basic Rendering"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Basic Rendering renders username field with correct properties","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"renders username field with correct properties"},{"ancestorTitles":["LoginInfoBottomSheet","Basic Rendering"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Basic Rendering renders password field with correct properties","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"renders password field with correct properties"},{"ancestorTitles":["LoginInfoBottomSheet","Basic Rendering"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Basic Rendering uses KeyboardAvoidingView with correct behavior for iOS","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"uses KeyboardAvoidingView with correct behavior for iOS"},{"ancestorTitles":["LoginInfoBottomSheet","Basic Rendering"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Basic Rendering renders cancel and save buttons","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders cancel and save buttons"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration tracks analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics when sheet becomes visible"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration does not track analytics when sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when sheet is closed"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration tracks analytics when sheet is opened after being closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when sheet is opened after being closed"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration tracks close analytics when handleClose is called","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks close analytics when handleClose is called"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration tracks form submission analytics on save","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks form submission analytics on save"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration tracks form failure analytics when submission fails","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"tracks form failure analytics when submission fails"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration tracks form submission with empty fields","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks form submission with empty fields"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration handles analytics errors gracefully on view","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully on view"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration handles analytics errors gracefully on form submission","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully on form submission"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration handles analytics errors gracefully on close","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully on close"},{"ancestorTitles":["LoginInfoBottomSheet","Analytics Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Analytics Integration tracks analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct timestamp format"},{"ancestorTitles":["LoginInfoBottomSheet","Form Interactions"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Form Interactions calls onClose when cancel button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls onClose when cancel button is pressed"},{"ancestorTitles":["LoginInfoBottomSheet","Form Interactions"],"duration":66,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Form Interactions shows loading state when form is submitting","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows loading state when form is submitting"},{"ancestorTitles":["LoginInfoBottomSheet","Form Interactions"],"duration":57,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Form Interactions handles form submission lifecycle correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles form submission lifecycle correctly"},{"ancestorTitles":["LoginInfoBottomSheet","Form Interactions"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Form Interactions handles submission failure without closing","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles submission failure without closing"},{"ancestorTitles":["LoginInfoBottomSheet","Responsive Design"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Responsive Design tracks correct orientation based on dimensions","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks correct orientation based on dimensions"},{"ancestorTitles":["LoginInfoBottomSheet","Responsive Design"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Responsive Design calculates landscape orientation correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"calculates landscape orientation correctly"},{"ancestorTitles":["LoginInfoBottomSheet","Dark Mode Support"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Dark Mode Support tracks correct color scheme in analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks correct color scheme in analytics"},{"ancestorTitles":["LoginInfoBottomSheet","Dark Mode Support"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet Dark Mode Support handles fallback color scheme correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles fallback color scheme correctly"}],"endTime":1755726224578,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/settings/__tests__/login-info-bottom-sheet.test.tsx","startTime":1755726224161,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["RolesBottomSheet"],"duration":74,"failureDetails":[],"failureMessages":[],"fullName":"RolesBottomSheet renders correctly when opened","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders correctly when opened"},{"ancestorTitles":["RolesBottomSheet"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"RolesBottomSheet does not render when not opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render when not opened"},{"ancestorTitles":["RolesBottomSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"RolesBottomSheet fetches roles and users when opened","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"fetches roles and users when opened"},{"ancestorTitles":["RolesBottomSheet"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"RolesBottomSheet renders role assignment items","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders role assignment items"},{"ancestorTitles":["RolesBottomSheet"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"RolesBottomSheet displays error state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"displays error state correctly"},{"ancestorTitles":["RolesBottomSheet"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"RolesBottomSheet handles missing active unit gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles missing active unit gracefully"},{"ancestorTitles":["RolesBottomSheet"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"RolesBottomSheet filters roles by active unit","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"filters roles by active unit"},{"ancestorTitles":["RolesBottomSheet"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"RolesBottomSheet has functional buttons","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"has functional buttons"}],"endTime":1755726224592,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/roles/__tests__/roles-bottom-sheet.test.tsx","startTime":1755726224104,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["UserStaffingCard"],"duration":67,"failureDetails":[],"failureMessages":[],"fullName":"UserStaffingCard renders loading state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders loading state correctly"},{"ancestorTitles":["UserStaffingCard"],"duration":19,"failureDetails":[],"failureMessages":[],"fullName":"UserStaffingCard renders user staffing correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders user staffing correctly"},{"ancestorTitles":["UserStaffingCard"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"UserStaffingCard handles unknown staffing correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles unknown staffing correctly"},{"ancestorTitles":["UserStaffingCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UserStaffingCard converts label colors correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"converts label colors correctly"}],"endTime":1755726224612,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/home/__tests__/user-staffing-card.test.tsx","startTime":1755726223959,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ContactCard","Person Contact Display Name"],"duration":61,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Person Contact Display Name should display FirstName + LastName for Person type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display FirstName + LastName for Person type"},{"ancestorTitles":["ContactCard","Person Contact Display Name"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Person Contact Display Name should handle missing FirstName for Person type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing FirstName for Person type"},{"ancestorTitles":["ContactCard","Person Contact Display Name"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Person Contact Display Name should handle missing LastName for Person type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing LastName for Person type"},{"ancestorTitles":["ContactCard","Person Contact Display Name"],"duration":35,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Person Contact Display Name should fallback to Name field for Person type when FirstName and LastName are missing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should fallback to Name field for Person type when FirstName and LastName are missing"},{"ancestorTitles":["ContactCard","Person Contact Display Name"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Person Contact Display Name should show \"Unknown Person\" when all name fields are missing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show \"Unknown Person\" when all name fields are missing"},{"ancestorTitles":["ContactCard","Company Contact Display Name"],"duration":33,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Company Contact Display Name should display CompanyName for Company type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display CompanyName for Company type"},{"ancestorTitles":["ContactCard","Company Contact Display Name"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Company Contact Display Name should fallback to Name field for Company type when CompanyName is missing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should fallback to Name field for Company type when CompanyName is missing"},{"ancestorTitles":["ContactCard","Company Contact Display Name"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Company Contact Display Name should show \"Unknown Company\" when all name fields are missing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show \"Unknown Company\" when all name fields are missing"},{"ancestorTitles":["ContactCard","Contact Card Interactions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Contact Card Interactions should call onPress with correct contactId when pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onPress with correct contactId when pressed"},{"ancestorTitles":["ContactCard","Contact Card Interactions"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Contact Card Interactions should display email when present","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display email when present"},{"ancestorTitles":["ContactCard","Contact Card Interactions"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Contact Card Interactions should display phone when present","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display phone when present"},{"ancestorTitles":["ContactCard","Contact Card Interactions"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Contact Card Interactions should show star icon for important contacts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show star icon for important contacts"},{"ancestorTitles":["ContactCard","Contact Card Interactions"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Contact Card Interactions should not show star icon for non-important contacts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show star icon for non-important contacts"},{"ancestorTitles":["ContactCard","Contact Card Icons"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Contact Card Icons should show user icon for Person type without image","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show user icon for Person type without image"},{"ancestorTitles":["ContactCard","Contact Card Icons"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ContactCard Contact Card Icons should show building icon for Company type without image","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show building icon for Company type without image"}],"endTime":1755726224886,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-card.test.tsx","startTime":1755726224272,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["MessageDetailsSheet","Analytics Tracking"],"duration":118,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Analytics Tracking should track view analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics when sheet becomes visible"},{"ancestorTitles":["MessageDetailsSheet","Analytics Tracking"],"duration":30,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Analytics Tracking should track view analytics for basic message without optional fields","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics for basic message without optional fields"},{"ancestorTitles":["MessageDetailsSheet","Analytics Tracking"],"duration":52,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Analytics Tracking should track view analytics for expired message","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics for expired message"},{"ancestorTitles":["MessageDetailsSheet","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Analytics Tracking should not track analytics when sheet is not visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when sheet is not visible"},{"ancestorTitles":["MessageDetailsSheet","Analytics Tracking"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Analytics Tracking should not track analytics when no message is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when no message is selected"},{"ancestorTitles":["MessageDetailsSheet","Analytics Tracking"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Analytics Tracking should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["MessageDetailsSheet","Response Analytics"],"duration":100,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Response Analytics should track analytics when starting to respond","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when starting to respond"},{"ancestorTitles":["MessageDetailsSheet","Response Analytics"],"duration":59,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Response Analytics should track analytics when cancelling response","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when cancelling response"},{"ancestorTitles":["MessageDetailsSheet","Response Analytics"],"duration":49,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Response Analytics should track analytics when cancelling response with content","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when cancelling response with content"},{"ancestorTitles":["MessageDetailsSheet","Response Analytics"],"duration":117,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Response Analytics should track analytics when sending response","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when sending response"},{"ancestorTitles":["MessageDetailsSheet","Response Analytics"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Response Analytics should handle response analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle response analytics errors gracefully"},{"ancestorTitles":["MessageDetailsSheet","Delete Analytics"],"duration":63,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Delete Analytics should track analytics when confirming delete","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when confirming delete"},{"ancestorTitles":["MessageDetailsSheet","Delete Analytics"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Delete Analytics should track analytics when cancelling delete","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when cancelling delete"},{"ancestorTitles":["MessageDetailsSheet","Delete Analytics"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Delete Analytics should handle delete analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle delete analytics errors gracefully"},{"ancestorTitles":["MessageDetailsSheet","Component Behavior"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Component Behavior should render nothing when no message is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render nothing when no message is selected"},{"ancestorTitles":["MessageDetailsSheet","Component Behavior"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Component Behavior should show actionsheet when details are open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show actionsheet when details are open"},{"ancestorTitles":["MessageDetailsSheet","Component Behavior"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Component Behavior should display message information correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should display message information correctly"},{"ancestorTitles":["MessageDetailsSheet","Component Behavior"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Component Behavior should show fallback text for missing information","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should show fallback text for missing information"},{"ancestorTitles":["MessageDetailsSheet","Component Behavior"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Component Behavior should not show reply button for expired messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show reply button for expired messages"},{"ancestorTitles":["MessageDetailsSheet","Component Behavior"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Component Behavior should not show reply button for already responded messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show reply button for already responded messages"},{"ancestorTitles":["MessageDetailsSheet","Component Behavior"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Component Behavior should not show reply button for basic messages (type 0)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show reply button for basic messages (type 0)"},{"ancestorTitles":["MessageDetailsSheet","Timestamp Format"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"MessageDetailsSheet Timestamp Format should have valid ISO timestamp format in analytics","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should have valid ISO timestamp format in analytics"}],"endTime":1755726224890,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/messages/__tests__/message-details-sheet.test.tsx","startTime":1755726224023,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["PersonnelStatusBottomSheet","when bottom sheet is closed"],"duration":52,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet when bottom sheet is closed should not render when isOpen is false","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when isOpen is false"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":24,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should render step 1 correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render step 1 correctly"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should render \"no destination\" option","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render \"no destination\" option"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should render tabs for calls and stations","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render tabs for calls and stations"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should render available calls in calls tab","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render available calls in calls tab"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should render available stations when stations tab is selected","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should render available stations when stations tab is selected"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should handle tab switching","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle tab switching"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should handle no destination selection","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle no destination selection"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should show next button","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show next button"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should handle next button press","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle next button press"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should render \"no calls available\" when no calls exist","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render \"no calls available\" when no calls exist"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should render \"no stations available\" when no stations exist and stations tab is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render \"no stations available\" when no stations exist and stations tab is selected"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 1 - select responding to"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 1 - select responding to should show loading spinner when loading stations","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show loading spinner when loading stations"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 2 - add note"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 2 - add note should render step 2 correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render step 2 correctly"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 2 - add note"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 2 - add note should display selected call info","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display selected call info"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 2 - add note"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 2 - add note should display selected station info when station is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display selected station info when station is selected"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 2 - add note"],"duration":34,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 2 - add note should display no destination when none is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display no destination when none is selected"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 2 - add note"],"duration":35,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 2 - add note should render note textarea","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render note textarea"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 2 - add note"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 2 - add note should handle note input change","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle note input change"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 2 - add note"],"duration":43,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 2 - add note should render previous and next buttons","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render previous and next buttons"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 2 - add note"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 2 - add note should handle previous button press","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle previous button press"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should render step 3 correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render step 3 correctly"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should display review information for call","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should display review information for call"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should display review information for station","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should display review information for station"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should not show custom responding to when empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show custom responding to when empty"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should not show note when empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show note when empty"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should render previous and submit buttons","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render previous and submit buttons"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should handle submit button press","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle submit button press"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should show submitting text when loading","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show submitting text when loading"},{"ancestorTitles":["PersonnelStatusBottomSheet","step 3 - confirm"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet step 3 - confirm should disable buttons when loading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should disable buttons when loading"},{"ancestorTitles":["PersonnelStatusBottomSheet","auto-selection behavior"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet auto-selection behavior should auto-select active call when available and no destination is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should auto-select active call when available and no destination is selected"},{"ancestorTitles":["PersonnelStatusBottomSheet","fetchCalls and fetchGroups behavior"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet fetchCalls and fetchGroups behavior should call fetchCalls and fetchGroups when bottom sheet opens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call fetchCalls and fetchGroups when bottom sheet opens"},{"ancestorTitles":["PersonnelStatusBottomSheet","fetchCalls and fetchGroups behavior"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet fetchCalls and fetchGroups behavior should not call fetchCalls and fetchGroups when bottom sheet is closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not call fetchCalls and fetchGroups when bottom sheet is closed"},{"ancestorTitles":["PersonnelStatusBottomSheet","fetchCalls and fetchGroups behavior"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet fetchCalls and fetchGroups behavior should display loading spinner when fetching calls","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display loading spinner when fetching calls"},{"ancestorTitles":["PersonnelStatusBottomSheet","fetchCalls and fetchGroups behavior"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet fetchCalls and fetchGroups behavior should hide loading spinner and show calls when loading is complete","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should hide loading spinner and show calls when loading is complete"},{"ancestorTitles":["PersonnelStatusBottomSheet","fetchCalls and fetchGroups behavior"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet fetchCalls and fetchGroups behavior should show loading spinner instead of \"no calls available\" message when loading","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show loading spinner instead of \"no calls available\" message when loading"},{"ancestorTitles":["PersonnelStatusBottomSheet","close behavior"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet close behavior should call reset when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call reset when closed"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when bottom sheet opens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when bottom sheet opens"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when step changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when step changes"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when call is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when call is selected"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when group is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when group is selected"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when no destination is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when no destination is selected"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when tab is changed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when tab is changed"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when next button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when next button is pressed"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when previous button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when previous button is pressed"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when submit button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when submit button is pressed"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should track analytics when bottom sheet is closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics when bottom sheet is closed"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should not track analytics when bottom sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when bottom sheet is closed"},{"ancestorTitles":["PersonnelStatusBottomSheet","Analytics Tracking"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelStatusBottomSheet Analytics Tracking should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"}],"endTime":1755726224897,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/status/__tests__/personnel-status-bottom-sheet.test.tsx","startTime":1755726223961,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Contacts Page"],"duration":37,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should render loading state during initial fetch","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render loading state during initial fetch"},{"ancestorTitles":["Contacts Page"],"duration":101,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should render contacts list when data is loaded","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render contacts list when data is loaded"},{"ancestorTitles":["Contacts Page"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should render zero state when no contacts are available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render zero state when no contacts are available"},{"ancestorTitles":["Contacts Page"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should filter contacts based on search query","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should filter contacts based on search query"},{"ancestorTitles":["Contacts Page"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should show zero state when search returns no results","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show zero state when search returns no results"},{"ancestorTitles":["Contacts Page"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should handle search input changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle search input changes"},{"ancestorTitles":["Contacts Page"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should clear search query when X button is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should clear search query when X button is pressed"},{"ancestorTitles":["Contacts Page"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should handle contact selection","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle contact selection"},{"ancestorTitles":["Contacts Page"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should handle refresh functionality","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle refresh functionality"},{"ancestorTitles":["Contacts Page"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page should not show loading when contacts are already loaded during refresh","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not show loading when contacts are already loaded during refresh"},{"ancestorTitles":["Contacts Page","Analytics Tracking"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page Analytics Tracking should track contacts_viewed event when component mounts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track contacts_viewed event when component mounts"},{"ancestorTitles":["Contacts Page","Analytics Tracking"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page Analytics Tracking should track analytics with ISO timestamp format","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should track analytics with ISO timestamp format"},{"ancestorTitles":["Contacts Page","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Contacts Page Analytics Tracking should track analytics event on component mount","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics event on component mount"}],"endTime":1755726224924,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/contacts.test.tsx","startTime":1755726224131,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useCallDetailStore - Notes","fetchCallNotes"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes fetchCallNotes should fetch call notes successfully","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should fetch call notes successfully"},{"ancestorTitles":["useCallDetailStore - Notes","fetchCallNotes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes fetchCallNotes should handle loading state correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle loading state correctly"},{"ancestorTitles":["useCallDetailStore - Notes","fetchCallNotes"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes fetchCallNotes should handle fetch call notes error","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle fetch call notes error"},{"ancestorTitles":["useCallDetailStore - Notes","fetchCallNotes"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes fetchCallNotes should handle API response with no data","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle API response with no data"},{"ancestorTitles":["useCallDetailStore - Notes","addNote"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes addNote should add note successfully and refetch notes","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should add note successfully and refetch notes"},{"ancestorTitles":["useCallDetailStore - Notes","addNote"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes addNote should add note with location coordinates","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should add note with location coordinates"},{"ancestorTitles":["useCallDetailStore - Notes","addNote"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes addNote should handle loading state during add note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle loading state during add note"},{"ancestorTitles":["useCallDetailStore - Notes","addNote"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes addNote should handle save note error","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle save note error"},{"ancestorTitles":["useCallDetailStore - Notes","addNote"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes addNote should handle refetch error after successful save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle refetch error after successful save"},{"ancestorTitles":["useCallDetailStore - Notes","searchNotes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes searchNotes should return all notes when query is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return all notes when query is empty"},{"ancestorTitles":["useCallDetailStore - Notes","searchNotes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes searchNotes should filter notes by note content","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should filter notes by note content"},{"ancestorTitles":["useCallDetailStore - Notes","searchNotes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes searchNotes should filter notes by author name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should filter notes by author name"},{"ancestorTitles":["useCallDetailStore - Notes","searchNotes"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes searchNotes should perform case-insensitive search","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should perform case-insensitive search"},{"ancestorTitles":["useCallDetailStore - Notes","searchNotes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes searchNotes should return multiple matches","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should return multiple matches"},{"ancestorTitles":["useCallDetailStore - Notes","searchNotes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes searchNotes should return empty array when no matches found","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return empty array when no matches found"},{"ancestorTitles":["useCallDetailStore - Notes","searchNotes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes searchNotes should handle whitespace in search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle whitespace in search query"},{"ancestorTitles":["useCallDetailStore - Notes","Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes Integration should maintain state consistency during multiple operations","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should maintain state consistency during multiple operations"},{"ancestorTitles":["useCallDetailStore - Notes","updateCall"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes updateCall should update call successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should update call successfully"},{"ancestorTitles":["useCallDetailStore - Notes","updateCall"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes updateCall should handle update call error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle update call error"},{"ancestorTitles":["useCallDetailStore - Notes","updateCall"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes updateCall should handle partial update data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle partial update data"},{"ancestorTitles":["useCallDetailStore - Notes","closeCall"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes closeCall should close call successfully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should close call successfully"},{"ancestorTitles":["useCallDetailStore - Notes","closeCall"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes closeCall should handle close call error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle close call error"},{"ancestorTitles":["useCallDetailStore - Notes","closeCall"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes closeCall should handle close call with empty note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle close call with empty note"},{"ancestorTitles":["useCallDetailStore - Notes","closeCall"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes closeCall should handle different close call types","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle different close call types"},{"ancestorTitles":["useCallDetailStore - Notes","Integration - Update and Close Call"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes Integration - Update and Close Call should maintain state consistency during update and close operations","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should maintain state consistency during update and close operations"},{"ancestorTitles":["useCallDetailStore - Notes","Integration - Update and Close Call"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailStore - Notes Integration - Update and Close Call should handle error during update followed by successful close","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle error during update followed by successful close"}],"endTime":1755726224962,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/calls/__tests__/detail-store.test.ts","startTime":1755726224481,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CustomBottomSheet","Basic Rendering"],"duration":67,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Basic Rendering should render successfully when open","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"should render successfully when open"},{"ancestorTitles":["CustomBottomSheet","Basic Rendering"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Basic Rendering should not render when closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not render when closed"},{"ancestorTitles":["CustomBottomSheet","Basic Rendering"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Basic Rendering should render with custom testID","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render with custom testID"},{"ancestorTitles":["CustomBottomSheet","Props Handling"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Props Handling should pass snapPoints correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should pass snapPoints correctly"},{"ancestorTitles":["CustomBottomSheet","Props Handling"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Props Handling should use default snapPoints when not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use default snapPoints when not provided"},{"ancestorTitles":["CustomBottomSheet","Props Handling"],"duration":17,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Props Handling should apply custom minHeight","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should apply custom minHeight"},{"ancestorTitles":["CustomBottomSheet","Props Handling"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Props Handling should use default minHeight when not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use default minHeight when not provided"},{"ancestorTitles":["CustomBottomSheet","Props Handling"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Props Handling should handle onClose callback","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle onClose callback"},{"ancestorTitles":["CustomBottomSheet","Loading State"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Loading State should show loading spinner when isLoading is true","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should show loading spinner when isLoading is true"},{"ancestorTitles":["CustomBottomSheet","Loading State"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Loading State should show loading text when provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show loading text when provided"},{"ancestorTitles":["CustomBottomSheet","Loading State"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Loading State should not show loading text when not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not show loading text when not provided"},{"ancestorTitles":["CustomBottomSheet","Loading State"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Loading State should show children when not loading","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should show children when not loading"},{"ancestorTitles":["CustomBottomSheet","Loading State"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Loading State should default to not loading when isLoading is not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should default to not loading when isLoading is not provided"},{"ancestorTitles":["CustomBottomSheet","Color Scheme"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Color Scheme should apply light theme styles","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should apply light theme styles"},{"ancestorTitles":["CustomBottomSheet","Color Scheme"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Color Scheme should apply dark theme styles","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should apply dark theme styles"},{"ancestorTitles":["CustomBottomSheet","Color Scheme"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Color Scheme should handle color scheme changes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle color scheme changes"},{"ancestorTitles":["CustomBottomSheet","Children Rendering"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Children Rendering should render simple text children","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render simple text children"},{"ancestorTitles":["CustomBottomSheet","Children Rendering"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Children Rendering should render complex children","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render complex children"},{"ancestorTitles":["CustomBottomSheet","Children Rendering"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Children Rendering should render multiple children","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render multiple children"},{"ancestorTitles":["CustomBottomSheet","Children Rendering"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Children Rendering should handle null children","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle null children"},{"ancestorTitles":["CustomBottomSheet","Children Rendering"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Children Rendering should handle undefined children","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle undefined children"},{"ancestorTitles":["CustomBottomSheet","CSS Classes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet CSS Classes should apply correct base classes","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should apply correct base classes"},{"ancestorTitles":["CustomBottomSheet","CSS Classes"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet CSS Classes should apply correct VStack classes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should apply correct VStack classes"},{"ancestorTitles":["CustomBottomSheet","CSS Classes"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet CSS Classes should apply correct loading Center classes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should apply correct loading Center classes"},{"ancestorTitles":["CustomBottomSheet","CSS Classes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet CSS Classes should apply correct loading text classes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should apply correct loading text classes"},{"ancestorTitles":["CustomBottomSheet","State Management"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet State Management should handle isOpen state changes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle isOpen state changes"},{"ancestorTitles":["CustomBottomSheet","State Management"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet State Management should handle isLoading state changes","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle isLoading state changes"},{"ancestorTitles":["CustomBottomSheet","State Management"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet State Management should handle loadingText changes","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle loadingText changes"},{"ancestorTitles":["CustomBottomSheet","Edge Cases"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Edge Cases should handle empty snapPoints array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty snapPoints array"},{"ancestorTitles":["CustomBottomSheet","Edge Cases"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Edge Cases should handle single snapPoint","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle single snapPoint"},{"ancestorTitles":["CustomBottomSheet","Edge Cases"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Edge Cases should handle empty string minHeight","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty string minHeight"},{"ancestorTitles":["CustomBottomSheet","Edge Cases"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Edge Cases should handle empty string loadingText","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty string loadingText"},{"ancestorTitles":["CustomBottomSheet","Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Edge Cases should handle multiple onClose calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle multiple onClose calls"},{"ancestorTitles":["CustomBottomSheet","Component Structure"],"duration":68,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Component Structure should maintain correct component hierarchy","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should maintain correct component hierarchy"},{"ancestorTitles":["CustomBottomSheet","Component Structure"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"CustomBottomSheet Component Structure should have correct loading state structure","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should have correct loading state structure"}],"endTime":1755726225152,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/ui/__tests__/bottom-sheet.test.tsx","startTime":1755726224730,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["MessagesScreen"],"duration":121,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen renders the messages screen correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders the messages screen correctly"},{"ancestorTitles":["MessagesScreen"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen displays messages when available","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"displays messages when available"},{"ancestorTitles":["MessagesScreen"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen shows loading state when loading","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows loading state when loading"},{"ancestorTitles":["MessagesScreen"],"duration":26,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen shows zero state when no messages","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows zero state when no messages"},{"ancestorTitles":["MessagesScreen"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen shows error state when there is an error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows error state when there is an error"},{"ancestorTitles":["MessagesScreen"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen handles search input correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles search input correctly"},{"ancestorTitles":["MessagesScreen"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen calls openCompose when compose FAB is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls openCompose when compose FAB is pressed"},{"ancestorTitles":["MessagesScreen"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen calls selectMessage when a message is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls selectMessage when a message is pressed"},{"ancestorTitles":["MessagesScreen"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen calls fetchInboxMessages on component mount with inbox filter","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"calls fetchInboxMessages on component mount with inbox filter"},{"ancestorTitles":["MessagesScreen"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen shows message count correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows message count correctly"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility shows compose FAB when user can create messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows compose FAB when user can create messages"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility hides compose FAB when user cannot create messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"hides compose FAB when user cannot create messages"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility shows send first message button in zero state when user can create messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows send first message button in zero state when user can create messages"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility hides send first message button in zero state when user cannot create messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"hides send first message button in zero state when user cannot create messages"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility hides compose FAB when in selection mode even if user can create messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"hides compose FAB when in selection mode even if user can create messages"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility calls openCompose when compose FAB is pressed and user has permission","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls openCompose when compose FAB is pressed and user has permission"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility calls openCompose when send first message button is pressed and user has permission","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls openCompose when send first message button is pressed and user has permission"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility hides compose FAB when permissions have not been loaded yet (undefined)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"hides compose FAB when permissions have not been loaded yet (undefined)"},{"ancestorTitles":["MessagesScreen","Permission-based visibility"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Permission-based visibility hides send first message button when permissions have not been loaded yet (undefined)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"hides send first message button when permissions have not been loaded yet (undefined)"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks messages view on mount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks messages view on mount"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks message selection","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks message selection"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks compose opened from FAB","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks compose opened from FAB"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks compose opened from zero state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks compose opened from zero state"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks search operations","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks search operations"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks filter changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks filter changes"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks refresh operations","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks refresh operations"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks retry button press","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks retry button press"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks selection mode entry","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks selection mode entry"},{"ancestorTitles":["MessagesScreen","Analytics Tracking"],"duration":121,"failureDetails":[],"failureMessages":[],"fullName":"MessagesScreen Analytics Tracking tracks selection mode exit","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks selection mode exit"}],"endTime":1755726225166,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/messages.test.tsx","startTime":1755726224577,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":38,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking tracks modal view analytics event with correct data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view analytics event with correct data"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking tracks modal view with loading state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view with loading state"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking tracks modal view with error state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view with error state"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking tracks modal view with no images","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks modal view with no images"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking tracks close analytics event with correct data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks close analytics event with correct data"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking tracks navigation analytics when going to next image","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks navigation analytics when going to next image"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking tracks navigation analytics when going to previous image","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks navigation analytics when going to previous image"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking does not track analytics when modal is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when modal is closed"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking tracks analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct timestamp format"},{"ancestorTitles":["CallImagesModal","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Analytics Tracking handles analytics errors gracefully without breaking component","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully without breaking component"},{"ancestorTitles":["CallImagesModal","CSS Interop Fix - Basic Functionality"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal CSS Interop Fix - Basic Functionality renders correctly when open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly when open"},{"ancestorTitles":["CallImagesModal","CSS Interop Fix - Basic Functionality"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal CSS Interop Fix - Basic Functionality does not render when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render when closed"},{"ancestorTitles":["CallImagesModal","CSS Interop Fix - Basic Functionality"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal CSS Interop Fix - Basic Functionality fetches images when opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"fetches images when opened"},{"ancestorTitles":["CallImagesModal","CSS Interop Fix - Basic Functionality"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal CSS Interop Fix - Basic Functionality shows loading state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows loading state"},{"ancestorTitles":["CallImagesModal","CSS Interop Fix - Basic Functionality"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal CSS Interop Fix - Basic Functionality shows error state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows error state"},{"ancestorTitles":["CallImagesModal","CSS Interop Fix - Basic Functionality"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal CSS Interop Fix - Basic Functionality shows zero state when no images","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows zero state when no images"},{"ancestorTitles":["CallImagesModal","CSS Interop Fix - Basic Functionality"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal CSS Interop Fix - Basic Functionality filters out invalid images from pagination","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"filters out invalid images from pagination"},{"ancestorTitles":["CallImagesModal","Component Behavior"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Component Behavior handles pagination correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles pagination correctly"},{"ancestorTitles":["CallImagesModal","Component Behavior"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Component Behavior handles image loading errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles image loading errors gracefully"},{"ancestorTitles":["CallImagesModal","Component Behavior"],"duration":52,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Component Behavior calls onClose when close button clicked","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls onClose when close button clicked"},{"ancestorTitles":["CallImagesModal","Logic Tests"],"duration":62,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Logic Tests should filter valid images correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should filter valid images correctly"},{"ancestorTitles":["CallImagesModal","Logic Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Logic Tests should prefer Data over Url when both are available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should prefer Data over Url when both are available"},{"ancestorTitles":["CallImagesModal","Logic Tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Logic Tests should fall back to URL when Data is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should fall back to URL when Data is empty"},{"ancestorTitles":["CallImagesModal","Logic Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Logic Tests should return null when both Data and Url are empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return null when both Data and Url are empty"},{"ancestorTitles":["CallImagesModal","Logic Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CallImagesModal Logic Tests should handle pagination bounds correctly","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle pagination bounds correctly"}],"endTime":1755726225152,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-images-modal.test.tsx","startTime":1755726224630,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["RealtimeGeolocationItem"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem renders correctly with default state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders correctly with default state"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":213,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem displays switch in off state when realtime geolocation is disabled","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays switch in off state when realtime geolocation is disabled"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem displays switch in on state when realtime geolocation is enabled","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays switch in on state when realtime geolocation is enabled"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem shows warning message when realtime geolocation is enabled","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows warning message when realtime geolocation is enabled"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem shows \"Connecting to hub...\" when enabled but not connected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows \"Connecting to hub...\" when enabled but not connected"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem shows \"Connected to hub.\" when enabled and connected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows \"Connected to hub.\" when enabled and connected"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":59,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem calls setRealtimeGeolocationEnabled when switch is toggled","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"calls setRealtimeGeolocationEnabled when switch is toggled"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":56,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem handles toggle errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles toggle errors gracefully"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem renders with dark color scheme","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with dark color scheme"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem uses correct translation keys","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"uses correct translation keys"},{"ancestorTitles":["RealtimeGeolocationItem"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"RealtimeGeolocationItem does not show alert when realtime geolocation is disabled","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not show alert when realtime geolocation is disabled"}],"endTime":1755726225372,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/settings/__tests__/realtime-geolocation-item.test.tsx","startTime":1755726224703,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["BluetoothAudioService Refactoring"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring should be defined and accessible","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should be defined and accessible"},{"ancestorTitles":["BluetoothAudioService Refactoring"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring should have singleton instance pattern","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should have singleton instance pattern"},{"ancestorTitles":["BluetoothAudioService Refactoring"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring should have required methods for Bluetooth management","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should have required methods for Bluetooth management"},{"ancestorTitles":["BluetoothAudioService Refactoring","Preferred Device Connection Refactoring"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring Preferred Device Connection Refactoring should have private attemptPreferredDeviceConnection method","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should have private attemptPreferredDeviceConnection method"},{"ancestorTitles":["BluetoothAudioService Refactoring","Preferred Device Connection Refactoring"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring Preferred Device Connection Refactoring should have private attemptReconnectToPreferredDevice method for iOS support","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should have private attemptReconnectToPreferredDevice method for iOS support"},{"ancestorTitles":["BluetoothAudioService Refactoring","Preferred Device Connection Refactoring"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring Preferred Device Connection Refactoring should track hasAttemptedPreferredDeviceConnection flag for single-call semantics","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track hasAttemptedPreferredDeviceConnection flag for single-call semantics"},{"ancestorTitles":["BluetoothAudioService Refactoring","Preferred Device Connection Refactoring"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring Preferred Device Connection Refactoring should reset flags on destroy method","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should reset flags on destroy method"},{"ancestorTitles":["BluetoothAudioService Refactoring","Preferred Device Connection Refactoring"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring Preferred Device Connection Refactoring should support iOS state change handling through attemptReconnectToPreferredDevice","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should support iOS state change handling through attemptReconnectToPreferredDevice"},{"ancestorTitles":["BluetoothAudioService Refactoring","Single-Call Logic Validation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring Single-Call Logic Validation should implement single-call semantics for preferred device connection","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should implement single-call semantics for preferred device connection"},{"ancestorTitles":["BluetoothAudioService Refactoring","Single-Call Logic Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService Refactoring Single-Call Logic Validation should allow re-attempting connection after destroy","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should allow re-attempting connection after destroy"}],"endTime":1755726225383,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/bluetooth-audio.service.test.ts","startTime":1755726224946,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ServerUrlBottomSheet - Simple"],"duration":26,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet - Simple renders when open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders when open"},{"ancestorTitles":["ServerUrlBottomSheet - Simple"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet - Simple does not render when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render when closed"},{"ancestorTitles":["ServerUrlBottomSheet - Simple"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet - Simple renders input field with correct keyboard properties","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders input field with correct keyboard properties"}],"endTime":1755726225464,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/settings/__tests__/server-url-bottom-sheet-simple.test.tsx","startTime":1755726224893,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CalendarCard"],"duration":181,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard renders basic calendar item correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders basic calendar item correctly"},{"ancestorTitles":["CalendarCard"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard displays event title and handles press correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays event title and handles press correctly"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard shows type badge when type name is provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows type badge when type name is provided"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not show type badge when type name is not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not show type badge when type name is not provided"},{"ancestorTitles":["CalendarCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard displays location when provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays location when provided"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not display location section when location is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not display location section when location is empty"},{"ancestorTitles":["CalendarCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard displays description when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"displays description when provided"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not display description when empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not display description when empty"},{"ancestorTitles":["CalendarCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard shows \"All Day\" for all-day events","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows \"All Day\" for all-day events"},{"ancestorTitles":["CalendarCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard shows time range for non-all-day events","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows time range for non-all-day events"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard displays attendees count when attendees are present","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays attendees count when attendees are present"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not display attendees section when no attendees","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"does not display attendees section when no attendees"},{"ancestorTitles":["CalendarCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard shows signup section when signup is enabled","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows signup section when signup is enabled"},{"ancestorTitles":["CalendarCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard shows signed up status when user is attending","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows signed up status when user is attending"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not show signup section when signup is disabled","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"does not show signup section when signup is disabled"},{"ancestorTitles":["CalendarCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not show signup section when editing is locked","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"does not show signup section when editing is locked"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard applies custom testID when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies custom testID when provided"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard handles edge case with null/undefined values gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles edge case with null/undefined values gracefully"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard formats date correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"formats date correctly"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard uses default type color when TypeColor is not provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"uses default type color when TypeColor is not provided"},{"ancestorTitles":["CalendarCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard renders with all optional props provided","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"renders with all optional props provided"},{"ancestorTitles":["CalendarCard","Accessibility"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard Accessibility provides proper accessibility labels","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"provides proper accessibility labels"},{"ancestorTitles":["CalendarCard","Accessibility"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard Accessibility supports screen readers with proper text content","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"supports screen readers with proper text content"},{"ancestorTitles":["CalendarCard","Performance"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard Performance renders efficiently with minimal re-renders","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders efficiently with minimal re-renders"},{"ancestorTitles":["CalendarCard","Edge Cases"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard Edge Cases handles invalid date strings gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles invalid date strings gracefully"},{"ancestorTitles":["CalendarCard","Edge Cases"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard Edge Cases handles very long text content","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles very long text content"},{"ancestorTitles":["CalendarCard","Edge Cases"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard Edge Cases handles special characters in content","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"handles special characters in content"}],"endTime":1755726225482,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-card-refactored.test.tsx","startTime":1755726224951,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CalendarView"],"duration":84,"failureDetails":[],"failureMessages":[],"fullName":"CalendarView renders without crashing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders without crashing"},{"ancestorTitles":["CalendarView"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"CalendarView calls translation function for day headers","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"calls translation function for day headers"},{"ancestorTitles":["CalendarView"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarView calls onMonthChange callback with month range","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"calls onMonthChange callback with month range"},{"ancestorTitles":["CalendarView"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"CalendarView renders calendar structure successfully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders calendar structure successfully"},{"ancestorTitles":["CalendarView"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarView integrates with calendar store properly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"integrates with calendar store properly"},{"ancestorTitles":["CalendarView"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarView handles date utilities correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles date utilities correctly"},{"ancestorTitles":["CalendarView"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarView renders month navigation and content","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders month navigation and content"},{"ancestorTitles":["CalendarView"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarView handles component lifecycle correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles component lifecycle correctly"}],"endTime":1755726225578,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-view.test.tsx","startTime":1755726224901,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":36,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should connect to hub successfully","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should connect to hub successfully"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":43,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should register all methods on connection","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should register all methods on connection"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should set up connection event handlers","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should set up connection event handlers"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should throw error if no access token is available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should throw error if no access token is available"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should add trailing slash to EventingUrl if missing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should add trailing slash to EventingUrl if missing"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should use URL parameter for geolocation hub authentication","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use URL parameter for geolocation hub authentication"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should use header authentication for non-geolocation hubs","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use header authentication for non-geolocation hubs"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should properly encode access token in URL for geolocation hub","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should properly encode access token in URL for geolocation hub"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should properly URI encode complex access tokens for geolocation hub","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should properly URI encode complex access tokens for geolocation hub"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should handle URL with existing query parameters for geolocation hub","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle URL with existing query parameters for geolocation hub"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should not add extra trailing slash if EventingUrl already has one","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not add extra trailing slash if EventingUrl already has one"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should throw error if EventingUrl is not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should throw error if EventingUrl is not provided"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should not connect if already connected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not connect if already connected"},{"ancestorTitles":["SignalRService","connectToHubWithEventingUrl"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHubWithEventingUrl should handle connection errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle connection errors gracefully"},{"ancestorTitles":["SignalRService","connectToHub (legacy method)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService connectToHub (legacy method) should connect to hub successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should connect to hub successfully"},{"ancestorTitles":["SignalRService","disconnectFromHub"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService disconnectFromHub should disconnect from hub successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should disconnect from hub successfully"},{"ancestorTitles":["SignalRService","disconnectFromHub"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService disconnectFromHub should handle disconnect errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle disconnect errors gracefully"},{"ancestorTitles":["SignalRService","disconnectFromHub"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService disconnectFromHub should do nothing if hub is not connected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should do nothing if hub is not connected"},{"ancestorTitles":["SignalRService","invoke"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService invoke should invoke method on connected hub","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should invoke method on connected hub"},{"ancestorTitles":["SignalRService","invoke"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService invoke should handle invoke errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle invoke errors gracefully"},{"ancestorTitles":["SignalRService","invoke"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService invoke should do nothing if hub is not connected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should do nothing if hub is not connected"},{"ancestorTitles":["SignalRService","disconnectAll"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService disconnectAll should disconnect all connected hubs","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should disconnect all connected hubs"},{"ancestorTitles":["SignalRService","event handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService event handling should handle received messages and emit events","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle received messages and emit events"},{"ancestorTitles":["SignalRService","event handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService event handling should remove event listeners","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should remove event listeners"},{"ancestorTitles":["SignalRService","reconnection handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService reconnection handling should attempt reconnection on connection close","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should attempt reconnection on connection close"},{"ancestorTitles":["SignalRService","reconnection handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService reconnection handling should stop reconnection attempts after max attempts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should stop reconnection attempts after max attempts"},{"ancestorTitles":["SignalRService","reconnection handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService reconnection handling should reset reconnection attempts on successful reconnection","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should reset reconnection attempts on successful reconnection"},{"ancestorTitles":["SignalRService","reconnection handling"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SignalRService reconnection handling should handle token refresh failure during reconnection","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle token refresh failure during reconnection"}],"endTime":1755726225595,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/signalr.service.test.ts","startTime":1755726225286,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useShiftsStore","initialization"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore initialization should initialize with default state","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should initialize with default state"},{"ancestorTitles":["useShiftsStore","initialization"],"duration":50,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore initialization should initialize store with data","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should initialize store with data"},{"ancestorTitles":["useShiftsStore","initialization"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore initialization should handle initialization error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle initialization error"},{"ancestorTitles":["useShiftsStore","fetchAllShifts"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore fetchAllShifts should fetch all shifts successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch all shifts successfully"},{"ancestorTitles":["useShiftsStore","fetchAllShifts"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore fetchAllShifts should handle fetch error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle fetch error"},{"ancestorTitles":["useShiftsStore","fetchTodaysShifts"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore fetchTodaysShifts should fetch today's shifts successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch today's shifts successfully"},{"ancestorTitles":["useShiftsStore","fetchTodaysShifts"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore fetchTodaysShifts should handle fetch error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle fetch error"},{"ancestorTitles":["useShiftsStore","fetchShiftDay"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore fetchShiftDay should fetch shift day successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch shift day successfully"},{"ancestorTitles":["useShiftsStore","fetchShiftDay"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore fetchShiftDay should handle fetch error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle fetch error"},{"ancestorTitles":["useShiftsStore","signup functionality"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore signup functionality should sign up for shift successfully","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should sign up for shift successfully"},{"ancestorTitles":["useShiftsStore","signup functionality"],"duration":29,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore signup functionality should handle signup error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle signup error"},{"ancestorTitles":["useShiftsStore","UI state management"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore UI state management should update current view","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should update current view"},{"ancestorTitles":["useShiftsStore","UI state management"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore UI state management should update search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should update search query"},{"ancestorTitles":["useShiftsStore","UI state management"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore UI state management should select shift and open details","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should select shift and open details"},{"ancestorTitles":["useShiftsStore","UI state management"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore UI state management should close shift details","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should close shift details"},{"ancestorTitles":["useShiftsStore","UI state management"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore UI state management should select shift day and open details","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should select shift day and open details"},{"ancestorTitles":["useShiftsStore","UI state management"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore UI state management should clear errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should clear errors"},{"ancestorTitles":["useShiftsStore","computed properties"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore computed properties should get shift days for specific date","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should get shift days for specific date"},{"ancestorTitles":["useShiftsStore","calendar data management"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useShiftsStore calendar data management should manage calendar data state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should manage calendar data state"}],"endTime":1755726225732,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/shifts/__tests__/store.test.ts","startTime":1755726225262,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["SignalR Lifecycle Management"],"duration":121,"failureDetails":[],"failureMessages":[],"fullName":"SignalR Lifecycle Management should disconnect SignalR when app goes to background","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should disconnect SignalR when app goes to background"},{"ancestorTitles":["SignalR Lifecycle Management"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"SignalR Lifecycle Management should reconnect SignalR when app becomes active again","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should reconnect SignalR when app becomes active again"},{"ancestorTitles":["SignalR Lifecycle Management"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SignalR Lifecycle Management should not manage SignalR connections when user is not signed in","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not manage SignalR connections when user is not signed in"},{"ancestorTitles":["SignalR Lifecycle Management"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"SignalR Lifecycle Management should not manage SignalR connections when app is not initialized","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not manage SignalR connections when app is not initialized"}],"endTime":1755726225731,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/signalr-lifecycle.test.tsx","startTime":1755726225197,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","hasAudioServiceData"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis hasAudioServiceData should detect audio device from service UUID in service data object","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect audio device from service UUID in service data object"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","hasAudioServiceData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis hasAudioServiceData should detect audio device from HFP service UUID","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect audio device from HFP service UUID"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","hasAudioServiceData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis hasAudioServiceData should detect audio device from known manufacturer service data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect audio device from known manufacturer service data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","hasAudioServiceData"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis hasAudioServiceData should return false for non-audio service data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return false for non-audio service data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","hasAudioServiceData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis hasAudioServiceData should handle string service data with audio patterns","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle string service data with audio patterns"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","hasAudioServiceData"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis hasAudioServiceData should handle empty or invalid service data","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle empty or invalid service data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","decodeServiceDataString"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis decodeServiceDataString should decode hex string service data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should decode hex string service data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","decodeServiceDataString"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis decodeServiceDataString should decode base64 service data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should decode base64 service data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","decodeServiceDataString"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis decodeServiceDataString should handle invalid data gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle invalid data gracefully"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","analyzeServiceDataForAudio"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis analyzeServiceDataForAudio should detect A2DP service class in hex data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect A2DP service class in hex data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","analyzeServiceDataForAudio"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis analyzeServiceDataForAudio should detect HFP service class in hex data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect HFP service class in hex data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","analyzeServiceDataForAudio"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis analyzeServiceDataForAudio should detect AINA pattern in hex data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect AINA pattern in hex data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","analyzeServiceDataForAudio"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis analyzeServiceDataForAudio should return false for non-audio data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return false for non-audio data"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","analyzeServiceDataForAudio"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis analyzeServiceDataForAudio should handle empty buffer","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty buffer"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","checkAudioCapabilityBytes"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis checkAudioCapabilityBytes should detect audio device class (major class 0x04)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect audio device class (major class 0x04)"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","checkAudioCapabilityBytes"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis checkAudioCapabilityBytes should detect HID pointing device pattern","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect HID pointing device pattern"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","checkAudioCapabilityBytes"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis checkAudioCapabilityBytes should return false for non-audio patterns","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return false for non-audio patterns"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","checkAudioCapabilityBytes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis checkAudioCapabilityBytes should handle short buffer gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle short buffer gracefully"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","checkAudioDeviceClass"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis checkAudioDeviceClass should detect audio/video device class (CoD)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect audio/video device class (CoD)"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","checkAudioDeviceClass"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis checkAudioDeviceClass should return false for non-audio device class","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return false for non-audio device class"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","checkAudioDeviceClass"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis checkAudioDeviceClass should handle short buffer gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle short buffer gracefully"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","isAudioDevice integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis isAudioDevice integration should identify device as audio when service data indicates audio capability","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should identify device as audio when service data indicates audio capability"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","isAudioDevice integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis isAudioDevice integration should identify device as audio when multiple indicators are present","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should identify device as audio when multiple indicators are present"},{"ancestorTitles":["BluetoothAudioService - Service Data Analysis","isAudioDevice integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - Service Data Analysis isAudioDevice integration should reject device when no audio indicators are present","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should reject device when no audio indicators are present"}],"endTime":1755726225768,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/bluetooth-audio-service-data.test.ts","startTime":1755726224990,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Personnel Store","Initial State"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store Initial State should have correct initial state","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should have correct initial state"},{"ancestorTitles":["Personnel Store","fetchPersonnel"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store fetchPersonnel should fetch personnel successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch personnel successfully"},{"ancestorTitles":["Personnel Store","fetchPersonnel"],"duration":102,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store fetchPersonnel should set loading state during fetch","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should set loading state during fetch"},{"ancestorTitles":["Personnel Store","fetchPersonnel"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store fetchPersonnel should handle fetch error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch error"},{"ancestorTitles":["Personnel Store","fetchPersonnel"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store fetchPersonnel should handle non-Error objects","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle non-Error objects"},{"ancestorTitles":["Personnel Store","fetchPersonnel"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store fetchPersonnel should handle empty data response","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle empty data response"},{"ancestorTitles":["Personnel Store","setSearchQuery"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store setSearchQuery should update search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should update search query"},{"ancestorTitles":["Personnel Store","setSearchQuery"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store setSearchQuery should handle empty search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty search query"},{"ancestorTitles":["Personnel Store","selectPersonnel"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store selectPersonnel should select personnel and open details","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should select personnel and open details"},{"ancestorTitles":["Personnel Store","selectPersonnel"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store selectPersonnel should handle selecting different personnel","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle selecting different personnel"},{"ancestorTitles":["Personnel Store","closeDetails"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store closeDetails should close details and clear selected personnel","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should close details and clear selected personnel"},{"ancestorTitles":["Personnel Store","init"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store init should fetch personnel when store is empty","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should fetch personnel when store is empty"},{"ancestorTitles":["Personnel Store","init"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store init should not fetch personnel when store already has data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not fetch personnel when store already has data"},{"ancestorTitles":["Personnel Store","init"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store init should handle init with existing partial data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle init with existing partial data"},{"ancestorTitles":["Personnel Store","Integration Tests"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store Integration Tests should handle complete workflow","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle complete workflow"},{"ancestorTitles":["Personnel Store","Integration Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Personnel Store Integration Tests should maintain search query when selecting personnel","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should maintain search query when selecting personnel"}],"endTime":1755726225740,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/personnel/__tests__/store.test.ts","startTime":1755726225386,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["SharedTabs","Basic Rendering"],"duration":154,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Basic Rendering renders correctly with basic tabs","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly with basic tabs"},{"ancestorTitles":["SharedTabs","Basic Rendering"],"duration":19,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Basic Rendering renders all tab titles","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders all tab titles"},{"ancestorTitles":["SharedTabs","Basic Rendering"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Basic Rendering renders the first tab content by default","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders the first tab content by default"},{"ancestorTitles":["SharedTabs","Basic Rendering"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Basic Rendering renders with custom initial index","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with custom initial index"},{"ancestorTitles":["SharedTabs","Tab Switching"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Tab Switching switches tabs when pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"switches tabs when pressed"},{"ancestorTitles":["SharedTabs","Tab Switching"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Tab Switching calls onChange callback when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls onChange callback when provided"},{"ancestorTitles":["SharedTabs","Icons and Badges"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Icons and Badges renders icons when provided","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders icons when provided"},{"ancestorTitles":["SharedTabs","Icons and Badges"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Icons and Badges renders badges when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders badges when provided"},{"ancestorTitles":["SharedTabs","Icons and Badges"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Icons and Badges does not render badge when count is 0","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render badge when count is 0"},{"ancestorTitles":["SharedTabs","Variants"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Variants renders with default variant","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with default variant"},{"ancestorTitles":["SharedTabs","Variants"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Variants renders with pills variant","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with pills variant"},{"ancestorTitles":["SharedTabs","Variants"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Variants renders with underlined variant","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with underlined variant"},{"ancestorTitles":["SharedTabs","Variants"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Variants renders with segmented variant","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with segmented variant"},{"ancestorTitles":["SharedTabs","Sizes"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Sizes renders with small size","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with small size"},{"ancestorTitles":["SharedTabs","Sizes"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Sizes renders with medium size","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with medium size"},{"ancestorTitles":["SharedTabs","Sizes"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Sizes renders with large size","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with large size"},{"ancestorTitles":["SharedTabs","Scrollable Mode"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Scrollable Mode renders with scrollable mode enabled by default","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with scrollable mode enabled by default"},{"ancestorTitles":["SharedTabs","Scrollable Mode"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Scrollable Mode renders with scrollable mode disabled","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with scrollable mode disabled"},{"ancestorTitles":["SharedTabs","Dark Mode Support"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Dark Mode Support renders correctly in dark mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly in dark mode"},{"ancestorTitles":["SharedTabs","Dark Mode Support"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Dark Mode Support renders correctly in light mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly in light mode"},{"ancestorTitles":["SharedTabs","Orientation Support"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Orientation Support renders correctly in portrait mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly in portrait mode"},{"ancestorTitles":["SharedTabs","Orientation Support"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Orientation Support renders correctly in landscape mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders correctly in landscape mode"},{"ancestorTitles":["SharedTabs","Internationalization"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Internationalization translates string titles using t function","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"translates string titles using t function"},{"ancestorTitles":["SharedTabs","Internationalization"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Internationalization renders React node titles without translation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders React node titles without translation"},{"ancestorTitles":["SharedTabs","Custom Classes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Custom Classes applies custom className","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies custom className"},{"ancestorTitles":["SharedTabs","Custom Classes"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Custom Classes applies custom tabClassName","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies custom tabClassName"},{"ancestorTitles":["SharedTabs","Custom Classes"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Custom Classes applies custom contentClassName","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies custom contentClassName"},{"ancestorTitles":["SharedTabs","Edge Cases"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Edge Cases handles empty tabs array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles empty tabs array"},{"ancestorTitles":["SharedTabs","Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Edge Cases handles single tab","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles single tab"},{"ancestorTitles":["SharedTabs","Edge Cases"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs Edge Cases handles invalid initial index gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles invalid initial index gracefully"},{"ancestorTitles":["SharedTabs","State Management"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs State Management uses local state when no onChange callback is provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"uses local state when no onChange callback is provided"},{"ancestorTitles":["SharedTabs","State Management"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"SharedTabs State Management uses external state management when onChange is provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"uses external state management when onChange is provided"}],"endTime":1755726225834,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/ui/__tests__/shared-tabs.test.tsx","startTime":1755726225422,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["UnitsFilterSheet"],"duration":248,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should render filter sheet when open","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render filter sheet when open"},{"ancestorTitles":["UnitsFilterSheet"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should display filter options grouped by type","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should display filter options grouped by type"},{"ancestorTitles":["UnitsFilterSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should show active filter count badge","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show active filter count badge"},{"ancestorTitles":["UnitsFilterSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should call toggleFilter when filter item is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call toggleFilter when filter item is pressed"},{"ancestorTitles":["UnitsFilterSheet"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should call closeFilterSheet when close button is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call closeFilterSheet when close button is pressed"},{"ancestorTitles":["UnitsFilterSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should show loading state when isLoadingFilters is true","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show loading state when isLoadingFilters is true"},{"ancestorTitles":["UnitsFilterSheet"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should show empty state when no filter options available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show empty state when no filter options available"},{"ancestorTitles":["UnitsFilterSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should show check mark for selected filters","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show check mark for selected filters"},{"ancestorTitles":["UnitsFilterSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should handle checkbox toggle","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle checkbox toggle"},{"ancestorTitles":["UnitsFilterSheet"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should not show badge when no filters are selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show badge when no filters are selected"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should track view analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics when sheet becomes visible"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should track view analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics with correct timestamp format"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should track analytics with no filters applied","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with no filters applied"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should track analytics when loading state is active","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when loading state is active"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should not track analytics when sheet is not open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when sheet is not open"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":42,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should track filter toggle analytics when adding a filter","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track filter toggle analytics when adding a filter"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should verify analytics events are defined","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should verify analytics events are defined"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should track filter toggle analytics when removing a filter","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track filter toggle analytics when removing a filter"},{"ancestorTitles":["UnitsFilterSheet","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet Analytics Tracking should handle filter toggle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle filter toggle analytics errors gracefully"}],"endTime":1755726225959,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/units/__tests__/units-filter-sheet.test.tsx","startTime":1755726225504,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Offline Event Manager GPS Integration","queueUnitStatusEvent with GPS"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration queueUnitStatusEvent with GPS should queue unit status event with complete GPS data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue unit status event with complete GPS data"},{"ancestorTitles":["Offline Event Manager GPS Integration","queueUnitStatusEvent with GPS"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration queueUnitStatusEvent with GPS should queue unit status event with partial GPS data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue unit status event with partial GPS data"},{"ancestorTitles":["Offline Event Manager GPS Integration","queueUnitStatusEvent with GPS"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration queueUnitStatusEvent with GPS should queue unit status event without GPS data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue unit status event without GPS data"},{"ancestorTitles":["Offline Event Manager GPS Integration","queueUnitStatusEvent with GPS"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration queueUnitStatusEvent with GPS should handle edge case GPS values","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle edge case GPS values"},{"ancestorTitles":["Offline Event Manager GPS Integration","processUnitStatusEvent with GPS"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration processUnitStatusEvent with GPS should process event with complete GPS coordinates","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should process event with complete GPS coordinates"},{"ancestorTitles":["Offline Event Manager GPS Integration","processUnitStatusEvent with GPS"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration processUnitStatusEvent with GPS should process event with partial GPS coordinates","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should process event with partial GPS coordinates"},{"ancestorTitles":["Offline Event Manager GPS Integration","processUnitStatusEvent with GPS"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration processUnitStatusEvent with GPS should process event without GPS coordinates","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should process event without GPS coordinates"},{"ancestorTitles":["Offline Event Manager GPS Integration","processUnitStatusEvent with GPS"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration processUnitStatusEvent with GPS should handle RespondingTo default value correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle RespondingTo default value correctly"},{"ancestorTitles":["Offline Event Manager GPS Integration","processUnitStatusEvent with GPS"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration processUnitStatusEvent with GPS should process event with high precision GPS values","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should process event with high precision GPS values"},{"ancestorTitles":["Offline Event Manager GPS Integration","processUnitStatusEvent with GPS"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration processUnitStatusEvent with GPS should process event with zero and negative GPS values","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should process event with zero and negative GPS values"},{"ancestorTitles":["Offline Event Manager GPS Integration","processUnitStatusEvent with GPS"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration processUnitStatusEvent with GPS should handle missing latitude but present longitude","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing latitude but present longitude"},{"ancestorTitles":["Offline Event Manager GPS Integration","GPS Data Flow Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Offline Event Manager GPS Integration GPS Data Flow Integration should maintain GPS data integrity through queue and processing","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should maintain GPS data integrity through queue and processing"}],"endTime":1755726226037,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/offline-event-manager-gps.test.ts","startTime":1755726225592,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useStaffingBottomSheetStore","initial state"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore initial state should have correct initial state","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should have correct initial state"},{"ancestorTitles":["useStaffingBottomSheetStore","setIsOpen"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setIsOpen should open the bottom sheet without staffing","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open the bottom sheet without staffing"},{"ancestorTitles":["useStaffingBottomSheetStore","setIsOpen"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setIsOpen should open the bottom sheet with pre-selected staffing","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open the bottom sheet with pre-selected staffing"},{"ancestorTitles":["useStaffingBottomSheetStore","setIsOpen"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setIsOpen should close the bottom sheet","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should close the bottom sheet"},{"ancestorTitles":["useStaffingBottomSheetStore","setCurrentStep"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setCurrentStep should update current step","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should update current step"},{"ancestorTitles":["useStaffingBottomSheetStore","setSelectedStaffing"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setSelectedStaffing should update selected staffing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should update selected staffing"},{"ancestorTitles":["useStaffingBottomSheetStore","setSelectedStaffing"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setSelectedStaffing should clear selected staffing","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should clear selected staffing"},{"ancestorTitles":["useStaffingBottomSheetStore","setNote"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setNote should update note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should update note"},{"ancestorTitles":["useStaffingBottomSheetStore","setNote"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setNote should clear note","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should clear note"},{"ancestorTitles":["useStaffingBottomSheetStore","setIsLoading"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore setIsLoading should update loading state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should update loading state"},{"ancestorTitles":["useStaffingBottomSheetStore","nextStep"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore nextStep should advance from select-staffing to add-note","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should advance from select-staffing to add-note"},{"ancestorTitles":["useStaffingBottomSheetStore","nextStep"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore nextStep should advance from add-note to confirm","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should advance from add-note to confirm"},{"ancestorTitles":["useStaffingBottomSheetStore","nextStep"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore nextStep should not advance beyond confirm step","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not advance beyond confirm step"},{"ancestorTitles":["useStaffingBottomSheetStore","previousStep"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore previousStep should go back from add-note to select-staffing","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should go back from add-note to select-staffing"},{"ancestorTitles":["useStaffingBottomSheetStore","previousStep"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore previousStep should go back from confirm to add-note","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should go back from confirm to add-note"},{"ancestorTitles":["useStaffingBottomSheetStore","previousStep"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore previousStep should not go back beyond select-staffing step","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not go back beyond select-staffing step"},{"ancestorTitles":["useStaffingBottomSheetStore","submitStaffing"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore submitStaffing should successfully submit staffing","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"should successfully submit staffing"},{"ancestorTitles":["useStaffingBottomSheetStore","submitStaffing"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore submitStaffing should handle submission without note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle submission without note"},{"ancestorTitles":["useStaffingBottomSheetStore","submitStaffing"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore submitStaffing should handle missing user ID","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle missing user ID"},{"ancestorTitles":["useStaffingBottomSheetStore","submitStaffing"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore submitStaffing should handle missing selected staffing","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle missing selected staffing"},{"ancestorTitles":["useStaffingBottomSheetStore","submitStaffing"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore submitStaffing should handle API error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle API error"},{"ancestorTitles":["useStaffingBottomSheetStore","submitStaffing"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore submitStaffing should create correct timestamp formats","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should create correct timestamp formats"},{"ancestorTitles":["useStaffingBottomSheetStore","reset"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useStaffingBottomSheetStore reset should reset all state to initial values","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"status":"passed","title":"should reset all state to initial values"}],"endTime":1755726226037,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/staffing/__tests__/staffing-bottom-sheet-store.test.ts","startTime":1755726225477,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Analytics Integration Test"],"duration":112,"failureDetails":[],"failureMessages":[],"fullName":"Analytics Integration Test should track analytics events correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics events correctly"}],"endTime":1755726226117,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/status/__tests__/personnel-status-analytics.test.tsx","startTime":1755726225880,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ServerUrlBottomSheet","Basic Rendering"],"duration":53,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Basic Rendering renders when open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders when open"},{"ancestorTitles":["ServerUrlBottomSheet","Basic Rendering"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Basic Rendering does not render when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render when closed"},{"ancestorTitles":["ServerUrlBottomSheet","Basic Rendering"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Basic Rendering renders form elements","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders form elements"},{"ancestorTitles":["ServerUrlBottomSheet","Analytics Integration"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Analytics Integration tracks view analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks view analytics when sheet becomes visible"},{"ancestorTitles":["ServerUrlBottomSheet","Analytics Integration"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Analytics Integration tracks view analytics with landscape orientation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks view analytics with landscape orientation"},{"ancestorTitles":["ServerUrlBottomSheet","Analytics Integration"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Analytics Integration does not track view analytics when sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track view analytics when sheet is closed"},{"ancestorTitles":["ServerUrlBottomSheet","Analytics Integration"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Analytics Integration tracks close analytics when cancel button is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks close analytics when cancel button is pressed"},{"ancestorTitles":["ServerUrlBottomSheet","Analytics Integration"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Analytics Integration handles analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully"},{"ancestorTitles":["ServerUrlBottomSheet","Form Interactions"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Form Interactions tracks form submission analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks form submission analytics"},{"ancestorTitles":["ServerUrlBottomSheet","Form Interactions"],"duration":66,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Form Interactions tracks form success analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks form success analytics"},{"ancestorTitles":["ServerUrlBottomSheet","Dark Mode Support"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Dark Mode Support handles dark color scheme in analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles dark color scheme in analytics"},{"ancestorTitles":["ServerUrlBottomSheet","Dark Mode Support"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ServerUrlBottomSheet Dark Mode Support handles null color scheme with fallback","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles null color scheme with fallback"}],"endTime":1755726226193,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/settings/__tests__/server-url-bottom-sheet.test.tsx","startTime":1755726225825,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CalendarCard"],"duration":82,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard renders basic event information correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"renders basic event information correctly"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard displays all day event correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"displays all day event correctly"},{"ancestorTitles":["CalendarCard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard displays time range for non-all-day events","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"displays time range for non-all-day events"},{"ancestorTitles":["CalendarCard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard shows attendees count when attendees exist","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows attendees count when attendees exist"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard shows signup section when signup is available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows signup section when signup is available"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard shows signed up status when user is attending","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"shows signed up status when user is attending"},{"ancestorTitles":["CalendarCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not show signup section when signup is not available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not show signup section when signup is not available"},{"ancestorTitles":["CalendarCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not show signup section when editing is locked","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not show signup section when editing is locked"},{"ancestorTitles":["CalendarCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard calls onPress when pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls onPress when pressed"},{"ancestorTitles":["CalendarCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard does not show optional fields when they are empty","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"does not show optional fields when they are empty"},{"ancestorTitles":["CalendarCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarCard applies custom testID when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies custom testID when provided"}],"endTime":1755726226220,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-card.test.tsx","startTime":1755726225989,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ProtocolCard","Basic Rendering"],"duration":107,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Basic Rendering should render protocol card with all fields","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render protocol card with all fields"},{"ancestorTitles":["ProtocolCard","Basic Rendering"],"duration":40,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Basic Rendering should render protocol card without optional fields","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render protocol card without optional fields"},{"ancestorTitles":["ProtocolCard","Basic Rendering"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Basic Rendering should handle protocol with HTML in description","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle protocol with HTML in description"},{"ancestorTitles":["ProtocolCard","Interactions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Interactions should call onPress with protocol ID when card is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onPress with protocol ID when card is pressed"},{"ancestorTitles":["ProtocolCard","Interactions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Interactions should call onPress with correct ID for different protocols","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onPress with correct ID for different protocols"},{"ancestorTitles":["ProtocolCard","Interactions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Interactions should handle multiple press events","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle multiple press events"},{"ancestorTitles":["ProtocolCard","Date Display"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Date Display should display UpdatedOn date when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display UpdatedOn date when available"},{"ancestorTitles":["ProtocolCard","Date Display"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Date Display should fall back to CreatedOn when UpdatedOn is not available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should fall back to CreatedOn when UpdatedOn is not available"},{"ancestorTitles":["ProtocolCard","Code Badge Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Code Badge Display should display code badge when code is provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display code badge when code is provided"},{"ancestorTitles":["ProtocolCard","Code Badge Display"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Code Badge Display should not display code badge when code is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display code badge when code is empty"},{"ancestorTitles":["ProtocolCard","Code Badge Display"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Code Badge Display should not display code badge when code is null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display code badge when code is null"},{"ancestorTitles":["ProtocolCard","Description Display"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Description Display should display description when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display description when provided"},{"ancestorTitles":["ProtocolCard","Description Display"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Description Display should handle empty description","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty description"},{"ancestorTitles":["ProtocolCard","Description Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Description Display should strip HTML tags from description","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should strip HTML tags from description"},{"ancestorTitles":["ProtocolCard","Description Display"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Description Display should handle null description","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle null description"},{"ancestorTitles":["ProtocolCard","Text Truncation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Text Truncation should limit description to 2 lines","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should limit description to 2 lines"},{"ancestorTitles":["ProtocolCard","Edge Cases"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Edge Cases should handle protocol with empty ID","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle protocol with empty ID"},{"ancestorTitles":["ProtocolCard","Edge Cases"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Edge Cases should handle protocol with special characters in name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle protocol with special characters in name"},{"ancestorTitles":["ProtocolCard","Edge Cases"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Edge Cases should handle protocol with very long name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle protocol with very long name"},{"ancestorTitles":["ProtocolCard","Edge Cases"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Edge Cases should handle protocol with very long code","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle protocol with very long code"},{"ancestorTitles":["ProtocolCard","Accessibility"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolCard Accessibility should be accessible for screen readers","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should be accessible for screen readers"}],"endTime":1755726226277,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/protocols/__tests__/protocol-card.test.tsx","startTime":1755726225784,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["NoteDetailsSheet","Rendering"],"duration":44,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Rendering renders note details correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders note details correctly"},{"ancestorTitles":["NoteDetailsSheet","Rendering"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Rendering renders formatted date when AddedOn is available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders formatted date when AddedOn is available"},{"ancestorTitles":["NoteDetailsSheet","Rendering"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Rendering does not render category section when category is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render category section when category is empty"},{"ancestorTitles":["NoteDetailsSheet","Rendering"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Rendering returns null when no note is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"returns null when no note is selected"},{"ancestorTitles":["NoteDetailsSheet","Rendering"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Rendering returns null when selected note is not found","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"returns null when selected note is not found"},{"ancestorTitles":["NoteDetailsSheet","Dark Mode"],"duration":26,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Dark Mode applies dark mode styles correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"applies dark mode styles correctly"},{"ancestorTitles":["NoteDetailsSheet","Dark Mode"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Dark Mode applies light mode styles correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"applies light mode styles correctly"},{"ancestorTitles":["NoteDetailsSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics Tracking tracks view analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks view analytics when sheet becomes visible"},{"ancestorTitles":["NoteDetailsSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics Tracking does not track analytics when sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when sheet is closed"},{"ancestorTitles":["NoteDetailsSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics Tracking tracks analytics with correct data for note without optional fields","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct data for note without optional fields"},{"ancestorTitles":["NoteDetailsSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics Tracking tracks close analytics when manually closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks close analytics when manually closed"},{"ancestorTitles":["NoteDetailsSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics Tracking handles analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles analytics errors gracefully"},{"ancestorTitles":["NoteDetailsSheet","Analytics Tracking"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics Tracking handles close analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"handles close analytics errors gracefully"},{"ancestorTitles":["NoteDetailsSheet","Analytics Tracking"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics Tracking re-tracks analytics when note changes","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"re-tracks analytics when note changes"},{"ancestorTitles":["NoteDetailsSheet","User Interactions"],"duration":34,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet User Interactions calls handleClose when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls handleClose when close button is pressed"},{"ancestorTitles":["NoteDetailsSheet","User Interactions"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet User Interactions calls handleClose when actionsheet onClose is triggered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls handleClose when actionsheet onClose is triggered"},{"ancestorTitles":["NoteDetailsSheet","WebView Content"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet WebView Content renders note body content in WebView","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders note body content in WebView"},{"ancestorTitles":["NoteDetailsSheet","WebView Content"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet WebView Content includes proper WebView styling","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"includes proper WebView styling"},{"ancestorTitles":["NoteDetailsSheet","WebView Content"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet WebView Content configures WebView props correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"configures WebView props correctly"}],"endTime":1755726226350,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notes/__tests__/note-details-sheet.test.tsx","startTime":1755726225813,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ZeroState"],"duration":83,"failureDetails":[],"failureMessages":[],"fullName":"ZeroState renders with default props","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"renders with default props"},{"ancestorTitles":["ZeroState"],"duration":44,"failureDetails":[],"failureMessages":[],"fullName":"ZeroState renders with custom props","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders with custom props"},{"ancestorTitles":["ZeroState"],"duration":28,"failureDetails":[],"failureMessages":[],"fullName":"ZeroState renders in error state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders in error state"}],"endTime":1755726226344,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/__tests__/zero-state.test.tsx","startTime":1755726225644,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Calendar Store","fetchTodaysItems"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store fetchTodaysItems should fetch today's items successfully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should fetch today's items successfully"},{"ancestorTitles":["Calendar Store","fetchTodaysItems"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store fetchTodaysItems should handle fetch today's items error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch today's items error"},{"ancestorTitles":["Calendar Store","fetchUpcomingItems"],"duration":17,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store fetchUpcomingItems should fetch upcoming items successfully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should fetch upcoming items successfully"},{"ancestorTitles":["Calendar Store","fetchUpcomingItems"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store fetchUpcomingItems should handle fetch upcoming items error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch upcoming items error"},{"ancestorTitles":["Calendar Store","fetchCalendarItem"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store fetchCalendarItem should fetch calendar item successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch calendar item successfully"},{"ancestorTitles":["Calendar Store","fetchCalendarItem"],"duration":31,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store fetchCalendarItem should handle fetch calendar item error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch calendar item error"},{"ancestorTitles":["Calendar Store","setAttendance"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store setAttendance should update attendance successfully","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should update attendance successfully"},{"ancestorTitles":["Calendar Store","setAttendance"],"duration":31,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store setAttendance should handle attendance update error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle attendance update error"},{"ancestorTitles":["Calendar Store","fetchItemsForDateRange"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store fetchItemsForDateRange should fetch items for date range successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch items for date range successfully"},{"ancestorTitles":["Calendar Store","setSelectedDate"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store setSelectedDate should set selected date","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set selected date"},{"ancestorTitles":["Calendar Store","setSelectedDate"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store setSelectedDate should clear selected date","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear selected date"},{"ancestorTitles":["Calendar Store","clearSelectedItem"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store clearSelectedItem should clear selected item","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear selected item"},{"ancestorTitles":["Calendar Store","clearError"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store clearError should clear all errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should clear all errors"},{"ancestorTitles":["Calendar Store","init"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store init should initialize store with all data","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should initialize store with all data"},{"ancestorTitles":["Calendar Store","Refactored Store Methods","loadTodaysCalendarItems"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store Refactored Store Methods loadTodaysCalendarItems should call getCalendarItemsForDateRange with correct date range","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call getCalendarItemsForDateRange with correct date range"},{"ancestorTitles":["Calendar Store","Refactored Store Methods","loadUpcomingCalendarItems"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store Refactored Store Methods loadUpcomingCalendarItems should call getCalendarItemsForDateRange with correct upcoming date range","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call getCalendarItemsForDateRange with correct upcoming date range"},{"ancestorTitles":["Calendar Store","Refactored Store Methods","setCalendarItemAttendingStatus"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store Refactored Store Methods setCalendarItemAttendingStatus should call setCalendarAttending with correct parameters","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call setCalendarAttending with correct parameters"},{"ancestorTitles":["Calendar Store","Refactored Store Methods","setCalendarItemAttendingStatus"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store Refactored Store Methods setCalendarItemAttendingStatus should handle empty note parameter","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty note parameter"},{"ancestorTitles":["Calendar Store","Refactored Store Methods","viewCalendarItemAction"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store Refactored Store Methods viewCalendarItemAction should set viewCalendarItem","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set viewCalendarItem"},{"ancestorTitles":["Calendar Store","Refactored Store Methods","clearError"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Calendar Store Refactored Store Methods clearError should clear error state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear error state"}],"endTime":1755726226424,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/calendar/__tests__/store.test.ts","startTime":1755726226151,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Settings Screen"],"duration":145,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen renders correctly with all sections","invocations":1,"location":null,"numPassingAsserts":15,"retryReasons":[],"status":"passed","title":"renders correctly with all sections"},{"ancestorTitles":["Settings Screen"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen tracks analytics when view becomes visible","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when view becomes visible"},{"ancestorTitles":["Settings Screen"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen tracks analytics with dark color scheme","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with dark color scheme"},{"ancestorTitles":["Settings Screen"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen handles server URL press and tracks analytics","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles server URL press and tracks analytics"},{"ancestorTitles":["Settings Screen"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen handles login info press and tracks analytics","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles login info press and tracks analytics"},{"ancestorTitles":["Settings Screen"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen handles logout press and tracks analytics","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles logout press and tracks analytics"},{"ancestorTitles":["Settings Screen"],"duration":53,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen handles support link presses and tracks analytics","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"status":"passed","title":"handles support link presses and tracks analytics"},{"ancestorTitles":["Settings Screen"],"duration":17,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen handles login info submission and tracks analytics","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"handles login info submission and tracks analytics"},{"ancestorTitles":["Settings Screen"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen renders preference items correctly","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"renders preference items correctly"},{"ancestorTitles":["Settings Screen"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen applies correct styling for light theme","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies correct styling for light theme"},{"ancestorTitles":["Settings Screen"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen applies correct styling for dark theme","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies correct styling for dark theme"},{"ancestorTitles":["Settings Screen"],"duration":104,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen tracks analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct timestamp format"},{"ancestorTitles":["Settings Screen"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen handles undefined color scheme gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles undefined color scheme gracefully"},{"ancestorTitles":["Settings Screen"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"Settings Screen tracks analytics on component mount","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics on component mount"}],"endTime":1755726226481,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/settings.test.tsx","startTime":1755726225805,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["OfflineQueueStore","addEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore addEvent should add a new event to the queue","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should add a new event to the queue"},{"ancestorTitles":["OfflineQueueStore","addEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore addEvent should add event with custom max retries","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should add event with custom max retries"},{"ancestorTitles":["OfflineQueueStore","updateEventStatus"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore updateEventStatus should update event status to completed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should update event status to completed"},{"ancestorTitles":["OfflineQueueStore","updateEventStatus"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore updateEventStatus should update event status to failed and increment retry count","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should update event status to failed and increment retry count"},{"ancestorTitles":["OfflineQueueStore","updateEventStatus"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore updateEventStatus should not set nextRetryAt if max retries exceeded","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not set nextRetryAt if max retries exceeded"},{"ancestorTitles":["OfflineQueueStore","removeEvent"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore removeEvent should remove event from queue","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should remove event from queue"},{"ancestorTitles":["OfflineQueueStore","getEventById"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore getEventById should return event by ID","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should return event by ID"},{"ancestorTitles":["OfflineQueueStore","getEventById"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore getEventById should return undefined for non-existent ID","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return undefined for non-existent ID"},{"ancestorTitles":["OfflineQueueStore","getEventsByType"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore getEventsByType should return events of specified type","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should return events of specified type"},{"ancestorTitles":["OfflineQueueStore","getPendingEvents"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore getPendingEvents should return events with pending status","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should return events with pending status"},{"ancestorTitles":["OfflineQueueStore","getPendingEvents"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore getPendingEvents should include failed events ready for retry","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should include failed events ready for retry"},{"ancestorTitles":["OfflineQueueStore","getPendingEvents"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore getPendingEvents should exclude failed events not ready for retry","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should exclude failed events not ready for retry"},{"ancestorTitles":["OfflineQueueStore","getFailedEvents"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore getFailedEvents should return events that have exceeded max retries","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should return events that have exceeded max retries"},{"ancestorTitles":["OfflineQueueStore","clearCompletedEvents"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore clearCompletedEvents should remove completed events","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should remove completed events"},{"ancestorTitles":["OfflineQueueStore","clearAllEvents"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore clearAllEvents should clear all events and reset counters","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should clear all events and reset counters"},{"ancestorTitles":["OfflineQueueStore","retryEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore retryEvent should reset failed event to pending","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should reset failed event to pending"},{"ancestorTitles":["OfflineQueueStore","retryAllFailedEvents"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore retryAllFailedEvents should reset all failed events to pending","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"passed","title":"should reset all failed events to pending"},{"ancestorTitles":["OfflineQueueStore","network state management"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore network state management should update network state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should update network state"},{"ancestorTitles":["OfflineQueueStore","network state management"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineQueueStore network state management should update processing state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should update processing state"}],"endTime":1755726226537,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/offline-queue/__tests__/store.test.ts","startTime":1755726226237,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CalendarItemDetailsSheet Analytics"],"duration":145,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet Analytics tracks analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics when sheet becomes visible"},{"ancestorTitles":["CalendarItemDetailsSheet Analytics"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet Analytics does not track analytics when sheet is not visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when sheet is not visible"},{"ancestorTitles":["CalendarItemDetailsSheet Analytics"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet Analytics tracks analytics with correct data for different item properties","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics with correct data for different item properties"},{"ancestorTitles":["CalendarItemDetailsSheet Analytics"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet Analytics tracks analytics when item changes while sheet is open","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when item changes while sheet is open"},{"ancestorTitles":["CalendarItemDetailsSheet Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet Analytics renders null when item is null","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders null when item is null"},{"ancestorTitles":["CalendarItemDetailsSheet Analytics"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet Analytics renders content when item is provided and isOpen is true","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders content when item is provided and isOpen is true"}],"endTime":1755726226514,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet-analytics.test.tsx","startTime":1755726226217,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["NoteDetailsSheet"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet renders without crashing when no note is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders without crashing when no note is selected"},{"ancestorTitles":["NoteDetailsSheet"],"duration":42,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet tracks analytics when sheet is visible with selected note","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics when sheet is visible with selected note"}],"endTime":1755726226595,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notes/__tests__/note-details-sheet-basic.test.tsx","startTime":1755726226094,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["PinDetailModal"],"duration":57,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal should not render when isOpen is false","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when isOpen is false"},{"ancestorTitles":["PinDetailModal"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal should not render when pin is null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when pin is null"},{"ancestorTitles":["PinDetailModal"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal should call onClose when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onClose when close button is pressed"},{"ancestorTitles":["PinDetailModal"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"PinDetailModal should not show call-specific buttons for non-call pins","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not show call-specific buttons for non-call pins"}],"endTime":1755726226684,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/maps/__tests__/pin-detail-modal.test.tsx","startTime":1755726226415,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useLocationStore"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"useLocationStore should have initial state","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"status":"passed","title":"should have initial state"},{"ancestorTitles":["useLocationStore"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"useLocationStore should update location data","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"should update location data"},{"ancestorTitles":["useLocationStore"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"useLocationStore should set background enabled","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should set background enabled"},{"ancestorTitles":["useLocationStore","Map Lock Functionality"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"useLocationStore Map Lock Functionality should set map locked state","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should set map locked state"},{"ancestorTitles":["useLocationStore","Map Lock Functionality"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useLocationStore Map Lock Functionality should toggle map lock state","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should toggle map lock state"},{"ancestorTitles":["useLocationStore","Map Lock Functionality"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"useLocationStore Map Lock Functionality should persist map lock state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should persist map lock state"},{"ancestorTitles":["useLocationStore"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"useLocationStore should have all required methods","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should have all required methods"}],"endTime":1755726226693,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/app/__tests__/location-store.test.ts","startTime":1755726226298,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Call Detail Menu Integration Test"],"duration":95,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Integration Test should render the header menu button and actionsheet","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render the header menu button and actionsheet"},{"ancestorTitles":["Call Detail Menu Integration Test"],"duration":82,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Integration Test should not render the header menu button when user cannot create calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render the header menu button when user cannot create calls"},{"ancestorTitles":["Call Detail Menu Integration Test"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Integration Test should open actionsheet when menu button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should open actionsheet when menu button is pressed"},{"ancestorTitles":["Call Detail Menu Integration Test"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Integration Test should call onEditCall when edit button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onEditCall when edit button is pressed"},{"ancestorTitles":["Call Detail Menu Integration Test"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Integration Test should call onCloseCall when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onCloseCall when close button is pressed"},{"ancestorTitles":["Call Detail Menu Integration Test"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Integration Test should track analytics when menu is opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when menu is opened"},{"ancestorTitles":["Call Detail Menu Integration Test"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Integration Test should track analytics when edit button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when edit button is pressed"},{"ancestorTitles":["Call Detail Menu Integration Test"],"duration":37,"failureDetails":[],"failureMessages":[],"fullName":"Call Detail Menu Integration Test should track analytics when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when close button is pressed"}],"endTime":1755726226784,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-detail-menu-integration.test.tsx","startTime":1755726226416,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ContactNotesList"],"duration":99,"failureDetails":[],"failureMessages":[],"fullName":"ContactNotesList should render without crashing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render without crashing"}],"endTime":1755726226745,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/contacts/__tests__/contact-notes-list.test.tsx","startTime":1755726226494,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Calls Store Integration - Call Types"],"duration":63,"failureDetails":[],"failureMessages":[],"fullName":"Calls Store Integration - Call Types should integrate fetchCallTypes with the store correctly","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should integrate fetchCallTypes with the store correctly"},{"ancestorTitles":["Calls Store Integration - Call Types"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"Calls Store Integration - Call Types should not fetch call types if already populated","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not fetch call types if already populated"},{"ancestorTitles":["Calls Store Integration - Call Types"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Calls Store Integration - Call Types should handle call types with various names and IDs","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle call types with various names and IDs"},{"ancestorTitles":["Calls Store Integration - Call Types"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Calls Store Integration - Call Types should maintain call types state across multiple hook renders","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should maintain call types state across multiple hook renders"}],"endTime":1755726226897,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/calls/__tests__/integration.test.ts","startTime":1755726226162,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Navigation Functions","openMapsWithDirections","iOS Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections iOS Platform should open Apple Maps with current location as origin","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Apple Maps with current location as origin"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","iOS Platform"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections iOS Platform should open Apple Maps with specific origin","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Apple Maps with specific origin"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","iOS Platform"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections iOS Platform should handle string coordinates","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle string coordinates"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Android Platform"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Android Platform should open Google Maps with current location as origin","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps with current location as origin"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Android Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Android Platform should open Google Maps with specific origin","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps with specific origin"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Web Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Web Platform should open Google Maps web with current location as origin","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps web with current location as origin"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Web Platform"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Web Platform should open Google Maps web with specific origin","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps web with specific origin"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Windows Platform"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Windows Platform should open Google Maps web for Windows","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps web for Windows"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","macOS Platform"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections macOS Platform should open Google Maps web for macOS","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps web for macOS"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Fallback Behavior"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Fallback Behavior should use web fallback when canOpenURL returns false","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should use web fallback when canOpenURL returns false"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Fallback Behavior"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Fallback Behavior should handle unknown platform","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle unknown platform"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Error Handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Error Handling should handle Linking.openURL errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle Linking.openURL errors"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Error Handling should handle Linking.canOpenURL errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle Linking.canOpenURL errors"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Parameter Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Parameter Validation should handle undefined destination name","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle undefined destination name"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Parameter Validation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Parameter Validation should handle zero coordinates","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle zero coordinates"},{"ancestorTitles":["Navigation Functions","openMapsWithDirections","Parameter Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithDirections Parameter Validation should handle negative coordinates","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle negative coordinates"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","iOS Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress iOS Platform should open Apple Maps with address","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Apple Maps with address"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","iOS Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress iOS Platform should handle special characters in address","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle special characters in address"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Android Platform"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Android Platform should open Google Maps with address","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps with address"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Android Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Android Platform should handle special characters in address","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle special characters in address"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Web Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Web Platform should open Google Maps web with address","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps web with address"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Web Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Web Platform should handle special characters in address","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle special characters in address"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Windows Platform"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Windows Platform should open Google Maps web for Windows","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps web for Windows"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","macOS Platform"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress macOS Platform should open Google Maps web for macOS","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should open Google Maps web for macOS"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Fallback Behavior"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Fallback Behavior should use web fallback when canOpenURL returns false","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should use web fallback when canOpenURL returns false"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Fallback Behavior"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Fallback Behavior should handle unknown platform","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle unknown platform"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Error Handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Error Handling should handle Linking.openURL errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle Linking.openURL errors"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Error Handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Error Handling should handle Linking.canOpenURL errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle Linking.canOpenURL errors"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Parameter Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Parameter Validation should handle empty address","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty address"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Parameter Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Parameter Validation should handle address with only spaces","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle address with only spaces"},{"ancestorTitles":["Navigation Functions","openMapsWithAddress","Parameter Validation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Navigation Functions openMapsWithAddress Parameter Validation should handle very long address","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle very long address"}],"endTime":1755726226938,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/__tests__/navigation.test.ts","startTime":1755726226800,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ToastContainer"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"ToastContainer should render no toasts when toasts array is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render no toasts when toasts array is empty"},{"ancestorTitles":["ToastContainer"],"duration":78,"failureDetails":[],"failureMessages":[],"fullName":"ToastContainer should render toasts when toasts are present","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should render toasts when toasts are present"},{"ancestorTitles":["ToastContainer"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ToastContainer should call showToast function from store","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call showToast function from store"}],"endTime":1755726227012,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/toast/__tests__/toast.test.tsx","startTime":1755726226721,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Protocols Page"],"duration":109,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should render protocols page with proper setup","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should render protocols page with proper setup"},{"ancestorTitles":["Protocols Page"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should render loading state during initial fetch","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render loading state during initial fetch"},{"ancestorTitles":["Protocols Page"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should render protocols list when data is loaded","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should render protocols list when data is loaded"},{"ancestorTitles":["Protocols Page"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should handle protocols with empty IDs using keyExtractor fallback","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle protocols with empty IDs using keyExtractor fallback"},{"ancestorTitles":["Protocols Page"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should render zero state when no protocols are available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render zero state when no protocols are available"},{"ancestorTitles":["Protocols Page"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should filter protocols based on search query by name","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should filter protocols based on search query by name"},{"ancestorTitles":["Protocols Page"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should filter protocols based on search query by code","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should filter protocols based on search query by code"},{"ancestorTitles":["Protocols Page"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should filter protocols based on search query by description","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should filter protocols based on search query by description"},{"ancestorTitles":["Protocols Page"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should show zero state when search returns no results","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should show zero state when search returns no results"},{"ancestorTitles":["Protocols Page"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should handle search input changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle search input changes"},{"ancestorTitles":["Protocols Page"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should clear search query when X button is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should clear search query when X button is pressed"},{"ancestorTitles":["Protocols Page"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should handle protocol selection","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle protocol selection"},{"ancestorTitles":["Protocols Page"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should handle pull-to-refresh","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle pull-to-refresh"},{"ancestorTitles":["Protocols Page"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should render protocol details sheet","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render protocol details sheet"},{"ancestorTitles":["Protocols Page"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should handle case-insensitive search","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle case-insensitive search"},{"ancestorTitles":["Protocols Page"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should handle empty search query by showing all protocols","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle empty search query by showing all protocols"},{"ancestorTitles":["Protocols Page"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should handle whitespace-only search query by showing all protocols","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle whitespace-only search query by showing all protocols"},{"ancestorTitles":["Protocols Page"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should initialize by fetching protocols on mount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should initialize by fetching protocols on mount"},{"ancestorTitles":["Protocols Page"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page should not show loading state during refresh","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not show loading state during refresh"},{"ancestorTitles":["Protocols Page","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page Analytics Tracking should track protocols_viewed event when component mounts","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track protocols_viewed event when component mounts"},{"ancestorTitles":["Protocols Page","Analytics Tracking"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page Analytics Tracking should track analytics with ISO timestamp format","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should track analytics with ISO timestamp format"},{"ancestorTitles":["Protocols Page","Analytics Tracking"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page Analytics Tracking should track analytics event only once per mount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics event only once per mount"},{"ancestorTitles":["Protocols Page","Analytics Tracking"],"duration":41,"failureDetails":[],"failureMessages":[],"fullName":"Protocols Page Analytics Tracking should track analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with correct timestamp format"}],"endTime":1755726227052,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/protocols.test.tsx","startTime":1755726226673,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useLocationTracking"],"duration":45,"failureDetails":[],"failureMessages":[],"fullName":"useLocationTracking should be importable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should be importable"},{"ancestorTitles":["useLocationTracking"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useLocationTracking should be a hook function","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should be a hook function"}],"endTime":1755726227059,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/hooks/__tests__/use-location-tracking.test.ts","startTime":1755726226935,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should parse PTT start button (0x01)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should parse PTT start button (0x01)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should parse PTT stop button (0x00)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should parse PTT stop button (0x00)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should parse mute button (0x02)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should parse mute button (0x02)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should parse volume up button (0x03)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should parse volume up button (0x03)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should parse volume down button (0x04)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should parse volume down button (0x04)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should parse original PTT start mapping (0x10)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should parse original PTT start mapping (0x10)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should parse original PTT stop mapping (0x11)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should parse original PTT stop mapping (0x11)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should detect long press via second byte (0x01)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect long press via second byte (0x01)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should detect long press via second byte (0xff)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect long press via second byte (0xff)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should detect double press via second byte (0x02)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect double press via second byte (0x02)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should detect long press via bit masking (0x80 flag)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect long press via bit masking (0x80 flag)"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should handle unknown button codes gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle unknown button codes gracefully"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should return null for empty buffer","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return null for empty buffer"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","parseB01InricoButtonData"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing parseB01InricoButtonData should handle multi-byte complex patterns","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle multi-byte complex patterns"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","handleB01InricoButtonEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing handleB01InricoButtonEvent should process base64 encoded button data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should process base64 encoded button data"},{"ancestorTitles":["BluetoothAudioService - B01 Inrico Button Parsing","handleB01InricoButtonEvent"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"BluetoothAudioService - B01 Inrico Button Parsing handleB01InricoButtonEvent should handle invalid base64 data gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle invalid base64 data gracefully"}],"endTime":1755726227079,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/bluetooth-audio-b01inrico.test.ts","startTime":1755726226457,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["MessageCard"],"duration":88,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard renders message correctly","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"renders message correctly"},{"ancestorTitles":["MessageCard"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows no subject when subject is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows no subject when subject is empty"},{"ancestorTitles":["MessageCard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows unknown user when sender name is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows unknown user when sender name is empty"},{"ancestorTitles":["MessageCard"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard displays different message types correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"displays different message types correctly"},{"ancestorTitles":["MessageCard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows responded badge for responded messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows responded badge for responded messages"},{"ancestorTitles":["MessageCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows expired badge for expired messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows expired badge for expired messages"},{"ancestorTitles":["MessageCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard truncates long message body","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"truncates long message body"},{"ancestorTitles":["MessageCard"],"duration":30,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard handles press events correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles press events correctly"},{"ancestorTitles":["MessageCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard handles long press events correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles long press events correctly"},{"ancestorTitles":["MessageCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows checkbox when in selection mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows checkbox when in selection mode"},{"ancestorTitles":["MessageCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows selected state correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows selected state correctly"},{"ancestorTitles":["MessageCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard hides checkbox when not in selection mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"hides checkbox when not in selection mode"},{"ancestorTitles":["MessageCard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows correct icon for read/unread messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows correct icon for read/unread messages"},{"ancestorTitles":["MessageCard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard applies correct styling for expired messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies correct styling for expired messages"},{"ancestorTitles":["MessageCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard applies correct styling for selected messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"applies correct styling for selected messages"},{"ancestorTitles":["MessageCard"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows recipients count when recipients exist","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows recipients count when recipients exist"},{"ancestorTitles":["MessageCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard handles empty recipients array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles empty recipients array"},{"ancestorTitles":["MessageCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard displays correct formatted date","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"displays correct formatted date"},{"ancestorTitles":["MessageCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows correct checkbox value when unselected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"shows correct checkbox value when unselected"},{"ancestorTitles":["MessageCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard handles messages without recipients gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles messages without recipients gracefully"},{"ancestorTitles":["MessageCard"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard shows correct message type colors and labels","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"shows correct message type colors and labels"},{"ancestorTitles":["MessageCard"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"MessageCard handles invalid date strings gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles invalid date strings gracefully"}],"endTime":1755726227188,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/messages/__tests__/message-card.test.tsx","startTime":1755726226670,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ComposeMessageSheet Analytics","Analytics Tracking"],"duration":117,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics Analytics Tracking should track view analytics when compose sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics when compose sheet becomes visible"},{"ancestorTitles":["ComposeMessageSheet Analytics","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics Analytics Tracking should not track view analytics when compose sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track view analytics when compose sheet is closed"},{"ancestorTitles":["ComposeMessageSheet Analytics","Analytics Tracking"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics Analytics Tracking should track view analytics with loading state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track view analytics with loading state"},{"ancestorTitles":["ComposeMessageSheet Analytics","Analytics Tracking"],"duration":24,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics Analytics Tracking should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["ComposeMessageSheet Analytics","Component Behavior"],"duration":19,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics Component Behavior should render correctly when compose sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render correctly when compose sheet is closed"},{"ancestorTitles":["ComposeMessageSheet Analytics","Component Behavior"],"duration":51,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics Component Behavior should render correctly when compose sheet is open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render correctly when compose sheet is open"},{"ancestorTitles":["ComposeMessageSheet Analytics","Component Behavior"],"duration":33,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics Component Behavior should fetch recipients and dispatch data when compose opens for the first time","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should fetch recipients and dispatch data when compose opens for the first time"},{"ancestorTitles":["ComposeMessageSheet Analytics","Component Behavior"],"duration":105,"failureDetails":[],"failureMessages":[],"fullName":"ComposeMessageSheet Analytics Component Behavior should not fetch recipients when they already exist","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not fetch recipients when they already exist"}],"endTime":1755726227198,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/messages/__tests__/compose-message-sheet.test.tsx","startTime":1755726226624,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ShiftDayCard"],"duration":170,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayCard renders without crashing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders without crashing"},{"ancestorTitles":["ShiftDayCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayCard renders basic structure correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders basic structure correctly"},{"ancestorTitles":["ShiftDayCard"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayCard renders different content for signed up users","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders different content for signed up users"},{"ancestorTitles":["ShiftDayCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayCard handles different shift types","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles different shift types"},{"ancestorTitles":["ShiftDayCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayCard handles empty or undefined data gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles empty or undefined data gracefully"},{"ancestorTitles":["ShiftDayCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayCard handles invalid dates gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles invalid dates gracefully"},{"ancestorTitles":["ShiftDayCard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayCard renders with different UI states","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders with different UI states"}],"endTime":1755726227271,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/shift-day-card.test.tsx","startTime":1755726226955,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["realtime-geolocation storage"],"duration":89,"failureDetails":[],"failureMessages":[],"fullName":"realtime-geolocation storage should be importable","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should be importable"},{"ancestorTitles":["realtime-geolocation storage"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"realtime-geolocation storage should have correct function signatures","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should have correct function signatures"},{"ancestorTitles":["realtime-geolocation storage"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"realtime-geolocation storage should handle save function calls without errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle save function calls without errors"}],"endTime":1755726227275,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/__tests__/realtime-geolocation.test.ts","startTime":1755726227059,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Header","portrait orientation"],"duration":206,"failureDetails":[],"failureMessages":[],"fullName":"Header portrait orientation should render menu button in portrait mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render menu button in portrait mode"},{"ancestorTitles":["Header","portrait orientation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Header portrait orientation should call onMenuPress when menu button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call onMenuPress when menu button is pressed"},{"ancestorTitles":["Header","portrait orientation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Header portrait orientation should render title when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render title when provided"},{"ancestorTitles":["Header","portrait orientation"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Header portrait orientation should render right component when provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render right component when provided"},{"ancestorTitles":["Header","landscape orientation"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Header landscape orientation should not render menu button in landscape mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render menu button in landscape mode"},{"ancestorTitles":["Header","landscape orientation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Header landscape orientation should render title in landscape mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render title in landscape mode"},{"ancestorTitles":["Header","landscape orientation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Header landscape orientation should render right component in landscape mode","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render right component in landscape mode"},{"ancestorTitles":["Header","edge cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Header edge cases should handle missing onMenuPress prop gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing onMenuPress prop gracefully"},{"ancestorTitles":["Header","edge cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Header edge cases should handle square dimensions","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle square dimensions"},{"ancestorTitles":["Header","useWindowDimensions integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Header useWindowDimensions integration should use mocked window dimensions correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should use mocked window dimensions correctly"},{"ancestorTitles":["Header","useWindowDimensions integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Header useWindowDimensions integration should determine landscape correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should determine landscape correctly"},{"ancestorTitles":["Header","useWindowDimensions integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Header useWindowDimensions integration should determine portrait correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should determine portrait correctly"}],"endTime":1755726227298,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/ui/__tests__/header.test.tsx","startTime":1755726226990,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["MessagesStore","fetchMessages"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore fetchMessages should fetch messages successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch messages successfully"},{"ancestorTitles":["MessagesStore","fetchMessages"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore fetchMessages should handle fetch messages error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch messages error"},{"ancestorTitles":["MessagesStore","fetchRecipients"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore fetchRecipients should fetch recipients successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch recipients successfully"},{"ancestorTitles":["MessagesStore","sendNewMessage"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore sendNewMessage should send message successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should send message successfully"},{"ancestorTitles":["MessagesStore","deleteMessages"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore deleteMessages should delete messages successfully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should delete messages successfully"},{"ancestorTitles":["MessagesStore","UI Actions"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore UI Actions should handle search query updates","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle search query updates"},{"ancestorTitles":["MessagesStore","UI Actions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore UI Actions should handle filter changes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle filter changes"},{"ancestorTitles":["MessagesStore","UI Actions"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore UI Actions should handle message selection","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle message selection"},{"ancestorTitles":["MessagesStore","UI Actions"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore UI Actions should handle closing details","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle closing details"},{"ancestorTitles":["MessagesStore","UI Actions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore UI Actions should handle compose modal","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle compose modal"},{"ancestorTitles":["MessagesStore","UI Actions"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore UI Actions should handle message selection for deletion","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle message selection for deletion"},{"ancestorTitles":["MessagesStore","UI Actions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore UI Actions should handle selecting all visible messages","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle selecting all visible messages"},{"ancestorTitles":["MessagesStore","UI Actions"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore UI Actions should clear selection","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear selection"},{"ancestorTitles":["MessagesStore","Computed Properties"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore Computed Properties should filter messages correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should filter messages correctly"},{"ancestorTitles":["MessagesStore","Computed Properties"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore Computed Properties should search messages correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should search messages correctly"},{"ancestorTitles":["MessagesStore","Computed Properties"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore Computed Properties should get selected messages correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should get selected messages correctly"},{"ancestorTitles":["MessagesStore","Computed Properties"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore Computed Properties should check if has selected messages","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should check if has selected messages"},{"ancestorTitles":["MessagesStore","Computed Properties"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore Computed Properties should deduplicate messages when combining inbox and sent in getFilteredMessages","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should deduplicate messages when combining inbox and sent in getFilteredMessages"},{"ancestorTitles":["MessagesStore","Computed Properties"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore Computed Properties should deduplicate messages in getSelectedMessages","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should deduplicate messages in getSelectedMessages"}],"endTime":1755726227295,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/messages/__tests__/store.test.ts","startTime":1755726227021,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["HomeDashboard"],"duration":231,"failureDetails":[],"failureMessages":[],"fullName":"HomeDashboard renders all main components correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders all main components correctly"},{"ancestorTitles":["HomeDashboard"],"duration":24,"failureDetails":[],"failureMessages":[],"fullName":"HomeDashboard calls refreshAll on mount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls refreshAll on mount"},{"ancestorTitles":["HomeDashboard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"HomeDashboard tracks analytics when view becomes focused","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when view becomes focused"},{"ancestorTitles":["HomeDashboard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"HomeDashboard configures component with correct options","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"configures component with correct options"},{"ancestorTitles":["HomeDashboard"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"HomeDashboard renders ScrollView with correct props","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders ScrollView with correct props"},{"ancestorTitles":["HomeDashboard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"HomeDashboard has correct layout structure","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"has correct layout structure"}],"endTime":1755726227323,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/home/__tests__/index.test.tsx","startTime":1755726226777,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Coordinates Search Logic","Input Validation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Input Validation should reject empty coordinates string","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should reject empty coordinates string"},{"ancestorTitles":["Coordinates Search Logic","Input Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Input Validation should reject whitespace-only coordinates string","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should reject whitespace-only coordinates string"},{"ancestorTitles":["Coordinates Search Logic","Input Validation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Input Validation should reject invalid coordinate format","invocations":1,"location":null,"numPassingAsserts":18,"retryReasons":[],"status":"passed","title":"should reject invalid coordinate format"},{"ancestorTitles":["Coordinates Search Logic","Input Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Input Validation should reject coordinates out of range","invocations":1,"location":null,"numPassingAsserts":15,"retryReasons":[],"status":"passed","title":"should reject coordinates out of range"},{"ancestorTitles":["Coordinates Search Logic","Input Validation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Input Validation should accept valid coordinate formats","invocations":1,"location":null,"numPassingAsserts":14,"retryReasons":[],"status":"passed","title":"should accept valid coordinate formats"},{"ancestorTitles":["Coordinates Search Logic","Coordinate Parsing"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Coordinate Parsing should parse coordinates with various decimal places","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"status":"passed","title":"should parse coordinates with various decimal places"},{"ancestorTitles":["Coordinates Search Logic","Coordinate Parsing"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Coordinate Parsing should handle negative coordinates correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle negative coordinates correctly"},{"ancestorTitles":["Coordinates Search Logic","Coordinate Parsing"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Coordinate Parsing should handle boundary coordinate values","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"status":"passed","title":"should handle boundary coordinate values"},{"ancestorTitles":["Coordinates Search Logic","API Configuration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic API Configuration should handle missing API key gracefully","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle missing API key gracefully"},{"ancestorTitles":["Coordinates Search Logic","API Configuration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic API Configuration should handle null config gracefully","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle null config gracefully"},{"ancestorTitles":["Coordinates Search Logic","API Configuration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic API Configuration should use correct API endpoint and parameters","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use correct API endpoint and parameters"},{"ancestorTitles":["Coordinates Search Logic","Reverse Geocoding Results"],"duration":45,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Reverse Geocoding Results should handle successful reverse geocoding","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle successful reverse geocoding"},{"ancestorTitles":["Coordinates Search Logic","Reverse Geocoding Results"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Reverse Geocoding Results should handle no results from reverse geocoding API","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle no results from reverse geocoding API"},{"ancestorTitles":["Coordinates Search Logic","Reverse Geocoding Results"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Reverse Geocoding Results should handle invalid status from reverse geocoding API","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle invalid status from reverse geocoding API"},{"ancestorTitles":["Coordinates Search Logic","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Error Handling should handle network errors gracefully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle network errors gracefully"},{"ancestorTitles":["Coordinates Search Logic","Error Handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Error Handling should handle API timeout errors","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle API timeout errors"},{"ancestorTitles":["Coordinates Search Logic","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Error Handling should handle API rate limit errors","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle API rate limit errors"},{"ancestorTitles":["Coordinates Search Logic","Edge Cases"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Edge Cases should handle coordinates with extreme precision","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle coordinates with extreme precision"},{"ancestorTitles":["Coordinates Search Logic","Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Edge Cases should handle coordinates with no decimal places","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle coordinates with no decimal places"},{"ancestorTitles":["Coordinates Search Logic","Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Coordinates Search Logic Edge Cases should handle coordinates with mixed spacing","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"status":"passed","title":"should handle coordinates with mixed spacing"}],"endTime":1755726227380,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/call/new/__tests__/coordinates-search.test.tsx","startTime":1755726227188,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Debug Test"],"duration":78,"failureDetails":[],"failureMessages":[],"fullName":"Debug Test should render a simple component","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render a simple component"}],"endTime":1755726227446,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/shift-day-details-sheet-debug.test.tsx","startTime":1755726227234,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["what3words API functionality","what3words format validation"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality what3words format validation should validate correct what3words format","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should validate correct what3words format"},{"ancestorTitles":["what3words API functionality","what3words format validation"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality what3words format validation should reject invalid what3words formats","invocations":1,"location":null,"numPassingAsserts":13,"retryReasons":[],"status":"passed","title":"should reject invalid what3words formats"},{"ancestorTitles":["what3words API functionality","what3words API integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality what3words API integration should make correct API call with valid what3words","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should make correct API call with valid what3words"},{"ancestorTitles":["what3words API functionality","what3words API integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality what3words API integration should handle successful API response","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle successful API response"},{"ancestorTitles":["what3words API functionality","what3words API integration"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality what3words API integration should handle API errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle API errors"},{"ancestorTitles":["what3words API functionality","what3words API integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality what3words API integration should handle response with no coordinates","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle response with no coordinates"},{"ancestorTitles":["what3words API functionality","URL encoding"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality URL encoding should properly encode what3words in URL","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should properly encode what3words in URL"},{"ancestorTitles":["what3words API functionality","URL encoding"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality URL encoding should handle special characters if present","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle special characters if present"},{"ancestorTitles":["what3words API functionality","coordinate conversion"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality coordinate conversion should convert coordinates to correct format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should convert coordinates to correct format"},{"ancestorTitles":["what3words API functionality","coordinate conversion"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality coordinate conversion should handle negative coordinates","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle negative coordinates"},{"ancestorTitles":["what3words API functionality","API configuration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality API configuration should use configured API key","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use configured API key"},{"ancestorTitles":["what3words API functionality","API configuration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality API configuration should construct correct API URL","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should construct correct API URL"},{"ancestorTitles":["what3words API functionality","location data handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality location data handling should extract location data from API response","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should extract location data from API response"},{"ancestorTitles":["what3words API functionality","location data handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"what3words API functionality location data handling should handle missing nearestPlace","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle missing nearestPlace"}],"endTime":1755726227455,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/call/new/__tests__/what3words.test.tsx","startTime":1755726227326,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useProtocolsStore","Initial State"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore Initial State should have correct initial state","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should have correct initial state"},{"ancestorTitles":["useProtocolsStore","fetchProtocols"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore fetchProtocols should fetch protocols successfully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should fetch protocols successfully"},{"ancestorTitles":["useProtocolsStore","fetchProtocols"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore fetchProtocols should set loading state during fetch","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should set loading state during fetch"},{"ancestorTitles":["useProtocolsStore","fetchProtocols"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore fetchProtocols should handle fetch error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch error"},{"ancestorTitles":["useProtocolsStore","fetchProtocols"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore fetchProtocols should handle fetch error with unknown error type","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch error with unknown error type"},{"ancestorTitles":["useProtocolsStore","fetchProtocols"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore fetchProtocols should clear previous error on successful fetch","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should clear previous error on successful fetch"},{"ancestorTitles":["useProtocolsStore","setSearchQuery"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore setSearchQuery should set search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set search query"},{"ancestorTitles":["useProtocolsStore","setSearchQuery"],"duration":24,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore setSearchQuery should update search query multiple times","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should update search query multiple times"},{"ancestorTitles":["useProtocolsStore","setSearchQuery"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore setSearchQuery should handle empty search query","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty search query"},{"ancestorTitles":["useProtocolsStore","selectProtocol"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore selectProtocol should select protocol and open details","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should select protocol and open details"},{"ancestorTitles":["useProtocolsStore","selectProtocol"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore selectProtocol should select different protocols","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should select different protocols"},{"ancestorTitles":["useProtocolsStore","selectProtocol"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore selectProtocol should handle empty protocol ID","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty protocol ID"},{"ancestorTitles":["useProtocolsStore","closeDetails"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore closeDetails should close details sheet","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should close details sheet"},{"ancestorTitles":["useProtocolsStore","closeDetails"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore closeDetails should close details when already closed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should close details when already closed"},{"ancestorTitles":["useProtocolsStore","Store State Persistence"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore Store State Persistence should maintain state across multiple hook instances","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should maintain state across multiple hook instances"},{"ancestorTitles":["useProtocolsStore","Complex State Interactions"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore Complex State Interactions should handle multiple state changes in sequence","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle multiple state changes in sequence"},{"ancestorTitles":["useProtocolsStore","Complex State Interactions"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore Complex State Interactions should handle concurrent fetchProtocols calls","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle concurrent fetchProtocols calls"},{"ancestorTitles":["useProtocolsStore","Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore Edge Cases should handle empty protocols response","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty protocols response"},{"ancestorTitles":["useProtocolsStore","Edge Cases"],"duration":32,"failureDetails":[],"failureMessages":[],"fullName":"useProtocolsStore Edge Cases should handle null protocol ID selection","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle null protocol ID selection"}],"endTime":1755726227465,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/protocols/__tests__/store.test.ts","startTime":1755726227194,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ShiftCard"],"duration":55,"failureDetails":[],"failureMessages":[],"fullName":"ShiftCard renders shift information correctly","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"status":"passed","title":"renders shift information correctly"},{"ancestorTitles":["ShiftCard"],"duration":82,"failureDetails":[],"failureMessages":[],"fullName":"ShiftCard renders schedule and assignment type badges correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders schedule and assignment type badges correctly"},{"ancestorTitles":["ShiftCard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftCard renders next day information when available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders next day information when available"},{"ancestorTitles":["ShiftCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftCard does not render InShift badge when not in shift","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render InShift badge when not in shift"},{"ancestorTitles":["ShiftCard"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftCard does not render shift code when not provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render shift code when not provided"},{"ancestorTitles":["ShiftCard"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftCard handles missing next day gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"handles missing next day gracefully"},{"ancestorTitles":["ShiftCard"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ShiftCard renders basic structure correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders basic structure correctly"},{"ancestorTitles":["ShiftCard"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ShiftCard handles all required functionality","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"handles all required functionality"}],"endTime":1755726227519,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/shift-card.test.tsx","startTime":1755726227280,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["personnel-filter storage"],"duration":107,"failureDetails":[],"failureMessages":[],"fullName":"personnel-filter storage should be importable","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should be importable"},{"ancestorTitles":["personnel-filter storage"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"personnel-filter storage should have correct function signatures","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should have correct function signatures"},{"ancestorTitles":["personnel-filter storage"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"personnel-filter storage should handle save and clear function calls without errors","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle save and clear function calls without errors"},{"ancestorTitles":["personnel-filter storage"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"personnel-filter storage should return correct storage key","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return correct storage key"}],"endTime":1755726227527,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/__tests__/personnel-filter.test.ts","startTime":1755726227351,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["UnitDetailsSheet"],"duration":81,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should not render when no unit is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when no unit is selected"},{"ancestorTitles":["UnitDetailsSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should not render when selected unit is not found","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not render when selected unit is not found"},{"ancestorTitles":["UnitDetailsSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should render correctly when sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render correctly when sheet is closed"},{"ancestorTitles":["UnitDetailsSheet"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should render correctly when sheet is open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render correctly when sheet is open"},{"ancestorTitles":["UnitDetailsSheet"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display unit type","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display unit type"},{"ancestorTitles":["UnitDetailsSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display group information","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display group information"},{"ancestorTitles":["UnitDetailsSheet"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display location information when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display location information when available"},{"ancestorTitles":["UnitDetailsSheet"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should not display location information when not available","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not display location information when not available"},{"ancestorTitles":["UnitDetailsSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display vehicle information","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display vehicle information"},{"ancestorTitles":["UnitDetailsSheet"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display features when unit has special features","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display features when unit has special features"},{"ancestorTitles":["UnitDetailsSheet"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should not display features section when unit has no special features","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display features section when unit has no special features"},{"ancestorTitles":["UnitDetailsSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display notes when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display notes when available"},{"ancestorTitles":["UnitDetailsSheet"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should not display notes when not available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display notes when not available"},{"ancestorTitles":["UnitDetailsSheet"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display last update timestamp when available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display last update timestamp when available"},{"ancestorTitles":["UnitDetailsSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should not display last update when not available","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not display last update when not available"},{"ancestorTitles":["UnitDetailsSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should call closeDetails when close button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call closeDetails when close button is pressed"},{"ancestorTitles":["UnitDetailsSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should handle unit without group name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle unit without group name"},{"ancestorTitles":["UnitDetailsSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should handle unit without plate number","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle unit without plate number"},{"ancestorTitles":["UnitDetailsSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should handle unit without VIN","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle unit without VIN"},{"ancestorTitles":["UnitDetailsSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should handle unit without type","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle unit without type"},{"ancestorTitles":["UnitDetailsSheet"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should handle partial location coordinates","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle partial location coordinates"},{"ancestorTitles":["UnitDetailsSheet"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display unit name correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display unit name correctly"},{"ancestorTitles":["UnitDetailsSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should handle long unit names","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle long unit names"},{"ancestorTitles":["UnitDetailsSheet"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should handle long VIN numbers","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle long VIN numbers"},{"ancestorTitles":["UnitDetailsSheet"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display both 4WD and special permit badges","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display both 4WD and special permit badges"},{"ancestorTitles":["UnitDetailsSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display only 4WD badge when only 4WD is true","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display only 4WD badge when only 4WD is true"},{"ancestorTitles":["UnitDetailsSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet should display only special permit badge when only special permit is true","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should display only special permit badge when only special permit is true"},{"ancestorTitles":["UnitDetailsSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet Analytics Tracking should track analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics when sheet becomes visible"},{"ancestorTitles":["UnitDetailsSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet Analytics Tracking should track analytics with minimal unit data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with minimal unit data"},{"ancestorTitles":["UnitDetailsSheet","Analytics Tracking"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet Analytics Tracking should track analytics when close button is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics when close button is pressed"},{"ancestorTitles":["UnitDetailsSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet Analytics Tracking should not track analytics when no unit is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when no unit is selected"},{"ancestorTitles":["UnitDetailsSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet Analytics Tracking should not track analytics when sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not track analytics when sheet is closed"},{"ancestorTitles":["UnitDetailsSheet","Analytics Tracking"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet Analytics Tracking should track analytics for unit with features","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics for unit with features"},{"ancestorTitles":["UnitDetailsSheet","Analytics Tracking"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet Analytics Tracking should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["UnitDetailsSheet","Analytics Tracking"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"UnitDetailsSheet Analytics Tracking should handle close analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle close analytics errors gracefully"}],"endTime":1755726227544,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/units/__tests__/unit-details-sheet.test.tsx","startTime":1755726227226,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useDispatchStore"],"duration":24,"failureDetails":[],"failureMessages":[],"fullName":"useDispatchStore should initialize without errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should initialize without errors"},{"ancestorTitles":["useDispatchStore"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useDispatchStore should have basic properties","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should have basic properties"}],"endTime":1755726227528,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/dispatch/__tests__/store.test.ts","startTime":1755726227300,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Security Store","useSecurityStore"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Security Store useSecurityStore should return default values when no rights are set","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should return default values when no rights are set"},{"ancestorTitles":["Security Store","useSecurityStore"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"Security Store useSecurityStore should return correct values when rights are set","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should return correct values when rights are set"},{"ancestorTitles":["Security Store","useSecurityStore"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Security Store useSecurityStore should correctly identify group admins","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should correctly identify group admins"},{"ancestorTitles":["Security Store","useSecurityStore"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Security Store useSecurityStore should handle false permissions correctly","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle false permissions correctly"},{"ancestorTitles":["Security Store","getRights"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Security Store getRights should fetch and set rights successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should fetch and set rights successfully"},{"ancestorTitles":["Security Store","getRights"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Security Store getRights should handle API errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle API errors gracefully"},{"ancestorTitles":["Security Store","Security Permissions Integration"],"duration":24,"failureDetails":[],"failureMessages":[],"fullName":"Security Store Security Permissions Integration should correctly handle all permission combinations","invocations":1,"location":null,"numPassingAsserts":18,"retryReasons":[],"status":"passed","title":"should correctly handle all permission combinations"}],"endTime":1755726227548,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/security/__tests__/store.test.ts","startTime":1755726227389,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["usePushNotificationModalStore","initial state"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore initial state should have correct initial state","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should have correct initial state"},{"ancestorTitles":["usePushNotificationModalStore","showNotificationModal"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore showNotificationModal should show modal with call notification","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show modal with call notification"},{"ancestorTitles":["usePushNotificationModalStore","showNotificationModal"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore showNotificationModal should show modal with message notification","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show modal with message notification"},{"ancestorTitles":["usePushNotificationModalStore","showNotificationModal"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore showNotificationModal should show modal with chat notification","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show modal with chat notification"},{"ancestorTitles":["usePushNotificationModalStore","showNotificationModal"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore showNotificationModal should show modal with group chat notification","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show modal with group chat notification"},{"ancestorTitles":["usePushNotificationModalStore","showNotificationModal"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore showNotificationModal should handle unknown notification type","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle unknown notification type"},{"ancestorTitles":["usePushNotificationModalStore","showNotificationModal"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore showNotificationModal should handle notification without valid eventCode","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle notification without valid eventCode"},{"ancestorTitles":["usePushNotificationModalStore","showNotificationModal"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore showNotificationModal should log info message when showing notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should log info message when showing notification"},{"ancestorTitles":["usePushNotificationModalStore","hideNotificationModal"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore hideNotificationModal should hide modal and clear notification","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should hide modal and clear notification"},{"ancestorTitles":["usePushNotificationModalStore","hideNotificationModal"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore hideNotificationModal should log info message when hiding notification","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should log info message when hiding notification"},{"ancestorTitles":["usePushNotificationModalStore","parseNotification"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore parseNotification should parse call event code correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should parse call event code correctly"},{"ancestorTitles":["usePushNotificationModalStore","parseNotification"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore parseNotification should parse message event code correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should parse message event code correctly"},{"ancestorTitles":["usePushNotificationModalStore","parseNotification"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore parseNotification should parse chat event code correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should parse chat event code correctly"},{"ancestorTitles":["usePushNotificationModalStore","parseNotification"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore parseNotification should parse group chat event code correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should parse group chat event code correctly"},{"ancestorTitles":["usePushNotificationModalStore","parseNotification"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore parseNotification should handle lowercase event codes","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle lowercase event codes"},{"ancestorTitles":["usePushNotificationModalStore","parseNotification"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore parseNotification should handle event code without colon","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle event code without colon"},{"ancestorTitles":["usePushNotificationModalStore","parseNotification"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore parseNotification should handle invalid event code format","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle invalid event code format"},{"ancestorTitles":["usePushNotificationModalStore","parseNotification"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"usePushNotificationModalStore parseNotification should handle empty event code","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle empty event code"}],"endTime":1755726227619,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/push-notification/__tests__/store.test.ts","startTime":1755726227495,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useAnalytics"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"useAnalytics should provide trackEvent function","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should provide trackEvent function"},{"ancestorTitles":["useAnalytics"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useAnalytics should call aptabaseService.trackEvent with correct parameters","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call aptabaseService.trackEvent with correct parameters"},{"ancestorTitles":["useAnalytics"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useAnalytics should call aptabaseService.trackEvent without properties","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call aptabaseService.trackEvent without properties"},{"ancestorTitles":["useAnalytics"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useAnalytics should maintain stable reference to trackEvent function","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should maintain stable reference to trackEvent function"}],"endTime":1755726227650,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/hooks/__tests__/use-analytics.test.ts","startTime":1755726227528,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Address Search Logic","Input Validation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Input Validation should reject empty address string","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should reject empty address string"},{"ancestorTitles":["Address Search Logic","Input Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Input Validation should reject whitespace-only address string","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should reject whitespace-only address string"},{"ancestorTitles":["Address Search Logic","API Configuration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic API Configuration should handle missing API key gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle missing API key gracefully"},{"ancestorTitles":["Address Search Logic","API Configuration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic API Configuration should use correct API endpoint and parameters","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use correct API endpoint and parameters"},{"ancestorTitles":["Address Search Logic","Geocoding Results"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Geocoding Results should handle single geocoding result","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle single geocoding result"},{"ancestorTitles":["Address Search Logic","Geocoding Results"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Geocoding Results should handle multiple geocoding results","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle multiple geocoding results"},{"ancestorTitles":["Address Search Logic","Geocoding Results"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Geocoding Results should handle no results from geocoding API","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle no results from geocoding API"},{"ancestorTitles":["Address Search Logic","Geocoding Results"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Geocoding Results should handle invalid status from geocoding API","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle invalid status from geocoding API"},{"ancestorTitles":["Address Search Logic","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Error Handling should handle network errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle network errors gracefully"},{"ancestorTitles":["Address Search Logic","Error Handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Error Handling should handle API timeout errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle API timeout errors"},{"ancestorTitles":["Address Search Logic","Error Handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Error Handling should handle null config","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle null config"},{"ancestorTitles":["Address Search Logic","Address Encoding"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Address Encoding should properly encode special characters in addresses","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should properly encode special characters in addresses"},{"ancestorTitles":["Address Search Logic","Address Encoding"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Address Encoding should handle addresses with unicode characters","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle addresses with unicode characters"},{"ancestorTitles":["Address Search Logic","Data Structure Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Data Structure Validation should validate geocoding result structure","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should validate geocoding result structure"},{"ancestorTitles":["Address Search Logic","Integration Flow"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Address Search Logic Integration Flow should complete entire geocoding flow successfully","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should complete entire geocoding flow successfully"}],"endTime":1755726227693,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/call/new/__tests__/address-search.test.ts","startTime":1755726227577,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["NoteDetailsSheet Integration"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Integration integrates analytics hook correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"integrates analytics hook correctly"},{"ancestorTitles":["NoteDetailsSheet Integration"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Integration integrates notes store correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"integrates notes store correctly"},{"ancestorTitles":["NoteDetailsSheet Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Integration tracks view analytics when note is selected and sheet is open","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks view analytics when note is selected and sheet is open"},{"ancestorTitles":["NoteDetailsSheet Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Integration does not track analytics when sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when sheet is closed"},{"ancestorTitles":["NoteDetailsSheet Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Integration does not track analytics when no note is selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when no note is selected"},{"ancestorTitles":["NoteDetailsSheet Integration"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Integration tracks close analytics when closeDetails is called","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks close analytics when closeDetails is called"},{"ancestorTitles":["NoteDetailsSheet Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Integration tracks delete analytics when deleteNote is called","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"tracks delete analytics when deleteNote is called"}],"endTime":1755726227723,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notes/__tests__/note-details-sheet-integration.test.tsx","startTime":1755726227546,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Hook Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Hook Integration should have analytics hook available in the component","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should have analytics hook available in the component"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Event Names"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Event Names should use correct analytics event names","invocations":1,"location":null,"numPassingAsserts":15,"retryReasons":[],"status":"passed","title":"should use correct analytics event names"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Calculations"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Calculations should calculate total signups correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should calculate total signups correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Calculations"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Calculations should calculate total needs correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should calculate total needs correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Calculations"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Calculations should calculate signup percentage correctly","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should calculate signup percentage correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Calculations"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Calculations should determine user signup status correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should determine user signup status correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Calculations"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Calculations should determine available needs correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should determine available needs correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Calculations"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Calculations should determine if user can sign up correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should determine if user can sign up correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Structure"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Structure should generate correct view analytics data structure","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should generate correct view analytics data structure"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Structure"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Structure should generate correct close analytics data structure","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should generate correct close analytics data structure"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Analytics Data Structure"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Analytics Data Structure should generate correct signup analytics data structure","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should generate correct signup analytics data structure"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Error Handling should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Error Handling"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Error Handling should ensure analytics failures do not break functionality","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should ensure analytics failures do not break functionality"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Component Integration"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Component Integration should validate that component imports analytics hook","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should validate that component imports analytics hook"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Component Integration"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Component Integration should validate analytics event names in component","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should validate analytics event names in component"},{"ancestorTitles":["ShiftDayDetailsSheet - Analytics Integration","Component Integration"],"duration":34,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Analytics Integration Component Integration should validate error handling in component","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should validate error handling in component"}],"endTime":1755726227788,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/shift-day-details-sheet-analytics.test.tsx","startTime":1755726227609,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Units"],"duration":139,"failureDetails":[],"failureMessages":[],"fullName":"Units should fetch units on mount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should fetch units on mount"},{"ancestorTitles":["Units"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Units should track analytics when view becomes visible","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track analytics when view becomes visible"},{"ancestorTitles":["Units"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Units should render component without errors when units are provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render component without errors when units are provided"},{"ancestorTitles":["Units"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Units should render component without errors when no units are provided","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render component without errors when no units are provided"},{"ancestorTitles":["Units"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Units should render component without errors when loading","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render component without errors when loading"},{"ancestorTitles":["Units"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Units should call setSearchQuery when search query changes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call setSearchQuery when search query changes"},{"ancestorTitles":["Units"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"Units should call selectUnit when unit is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call selectUnit when unit is selected"},{"ancestorTitles":["Units"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Units should handle different loading states correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle different loading states correctly"},{"ancestorTitles":["Units"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Units should call openFilterSheet when filter button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call openFilterSheet when filter button is pressed"},{"ancestorTitles":["Units"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Units should show filter badge when filters are selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should show filter badge when filters are selected"},{"ancestorTitles":["Units"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Units should not show filter badge when no filters are selected","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not show filter badge when no filters are selected"},{"ancestorTitles":["Units"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Units should track analytics with correct timestamp format","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track analytics with correct timestamp format"},{"ancestorTitles":["Units"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Units should maintain stable reference to trackEvent function","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should maintain stable reference to trackEvent function"}],"endTime":1755726227805,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/units.test.tsx","startTime":1755726227502,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Core Store","Initialization"],"duration":42,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Initialization should prevent multiple simultaneous initializations","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should prevent multiple simultaneous initializations"},{"ancestorTitles":["Core Store","Initialization"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Initialization should skip initialization if already initialized","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should skip initialization if already initialized"},{"ancestorTitles":["Core Store","Initialization"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Initialization should handle initialization with user data","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle initialization with user data"},{"ancestorTitles":["Core Store","Initialization"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Initialization should handle initialization without user ID","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle initialization without user ID"},{"ancestorTitles":["Core Store","Initialization"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Initialization should handle initialization errors","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle initialization errors"},{"ancestorTitles":["Core Store","Store State"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Store State should have correct initial state","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"status":"passed","title":"should have correct initial state"},{"ancestorTitles":["Core Store","Store State"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Store State should have all required methods","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should have all required methods"},{"ancestorTitles":["Core Store","Methods"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Methods should fetch config successfully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should fetch config successfully"},{"ancestorTitles":["Core Store","Methods"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Methods should handle config fetch errors","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle config fetch errors"},{"ancestorTitles":["Core Store","Methods"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Methods should get statuses and staffing successfully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should get statuses and staffing successfully"},{"ancestorTitles":["Core Store","Methods"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Core Store Methods should clear active call when setting null","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should clear active call when setting null"}],"endTime":1755726227810,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/app/__tests__/core-store.test.ts","startTime":1755726227567,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Security Integration Tests","Call Creation Permissions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Security Integration Tests Call Creation Permissions should allow call creation when user has CanCreateCalls permission","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should allow call creation when user has CanCreateCalls permission"},{"ancestorTitles":["Security Integration Tests","Call Creation Permissions"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Security Integration Tests Call Creation Permissions should prevent call creation when user lacks CanCreateCalls permission","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should prevent call creation when user lacks CanCreateCalls permission"},{"ancestorTitles":["Security Integration Tests","Call Creation Permissions"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Security Integration Tests Call Creation Permissions should allow call creation for department admins even without explicit permission","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should allow call creation for department admins even without explicit permission"},{"ancestorTitles":["Security Integration Tests","Group Admin Permissions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Security Integration Tests Group Admin Permissions should correctly identify group admin status","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should correctly identify group admin status"},{"ancestorTitles":["Security Integration Tests","Multiple Permissions Integration"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Security Integration Tests Multiple Permissions Integration should handle all permission types correctly for a super user","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should handle all permission types correctly for a super user"},{"ancestorTitles":["Security Integration Tests","Multiple Permissions Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Security Integration Tests Multiple Permissions Integration should handle all permission types correctly for a restricted user","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"should handle all permission types correctly for a restricted user"},{"ancestorTitles":["Security Integration Tests","Edge Cases"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Security Integration Tests Edge Cases should handle null/undefined rights gracefully","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle null/undefined rights gracefully"},{"ancestorTitles":["Security Integration Tests","Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Security Integration Tests Edge Cases should handle empty groups array","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty groups array"}],"endTime":1755726227824,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/security/__tests__/integration.test.ts","startTime":1755726227658,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useCallsStore","fetchCallTypes"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"useCallsStore fetchCallTypes should fetch call types when store is empty","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should fetch call types when store is empty"},{"ancestorTitles":["useCallsStore","fetchCallTypes"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"useCallsStore fetchCallTypes should not fetch call types when store already has data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should not fetch call types when store already has data"},{"ancestorTitles":["useCallsStore","fetchCallTypes"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useCallsStore fetchCallTypes should handle fetch call types error","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle fetch call types error"},{"ancestorTitles":["useCallsStore","fetchCallPriorities"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useCallsStore fetchCallPriorities should fetch call priorities successfully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should fetch call priorities successfully"},{"ancestorTitles":["useCallsStore","fetchCallPriorities"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"useCallsStore fetchCallPriorities should handle fetch call priorities error","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle fetch call priorities error"},{"ancestorTitles":["useCallsStore","init"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useCallsStore init should initialize all data successfully","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should initialize all data successfully"}],"endTime":1755726227819,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/calls/__tests__/store.test.ts","startTime":1755726227314,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["OfflineEventManager","queueUnitStatusEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager queueUnitStatusEvent should queue a unit status event","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue a unit status event"},{"ancestorTitles":["OfflineEventManager","queueUnitStatusEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager queueUnitStatusEvent should queue unit status event without optional parameters","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue unit status event without optional parameters"},{"ancestorTitles":["OfflineEventManager","queueLocationUpdateEvent"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager queueLocationUpdateEvent should queue a location update event","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue a location update event"},{"ancestorTitles":["OfflineEventManager","queueLocationUpdateEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager queueLocationUpdateEvent should queue location update event without optional parameters","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue location update event without optional parameters"},{"ancestorTitles":["OfflineEventManager","queueCallImageUploadEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager queueCallImageUploadEvent should queue a call image upload event","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue a call image upload event"},{"ancestorTitles":["OfflineEventManager","queueCallImageUploadEvent"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager queueCallImageUploadEvent should queue call image upload event without optional parameters","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should queue call image upload event without optional parameters"},{"ancestorTitles":["OfflineEventManager","getStats"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager getStats should return processing statistics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return processing statistics"},{"ancestorTitles":["OfflineEventManager","retryFailedEvents"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager retryFailedEvents should retry all failed events","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should retry all failed events"},{"ancestorTitles":["OfflineEventManager","clearCompletedEvents"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager clearCompletedEvents should clear completed events","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear completed events"},{"ancestorTitles":["OfflineEventManager","initialize"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager initialize should initialize network listener","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should initialize network listener"},{"ancestorTitles":["OfflineEventManager","startProcessing"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager startProcessing should start processing interval","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should start processing interval"},{"ancestorTitles":["OfflineEventManager","startProcessing"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager startProcessing should not start multiple intervals","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not start multiple intervals"},{"ancestorTitles":["OfflineEventManager","stopProcessing"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager stopProcessing should stop processing interval","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should stop processing interval"},{"ancestorTitles":["OfflineEventManager","event processing"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager event processing should set up processing interval but skip processing when offline","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set up processing interval but skip processing when offline"},{"ancestorTitles":["OfflineEventManager","event processing"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager event processing should set up processing interval when online","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should set up processing interval when online"},{"ancestorTitles":["OfflineEventManager","app state handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager app state handling should have set up app state listener during initialization","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should have set up app state listener during initialization"},{"ancestorTitles":["OfflineEventManager","app state handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"OfflineEventManager app state handling should be able to handle app state changes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should be able to handle app state changes"}],"endTime":1755726227847,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/offline-event-manager.service.test.ts","startTime":1755726227732,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["MapPins PII Protection"],"duration":59,"failureDetails":[],"failureMessages":[],"fullName":"MapPins PII Protection should show all pins when user can view PII","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should show all pins when user can view PII"},{"ancestorTitles":["MapPins PII Protection"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"MapPins PII Protection should hide personnel pins when user cannot view PII","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should hide personnel pins when user cannot view PII"},{"ancestorTitles":["MapPins PII Protection"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MapPins PII Protection should filter out multiple personnel pins when PII cannot be viewed","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should filter out multiple personnel pins when PII cannot be viewed"},{"ancestorTitles":["MapPins PII Protection"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MapPins PII Protection should handle different person ImagePath variations","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle different person ImagePath variations"},{"ancestorTitles":["MapPins PII Protection"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"MapPins PII Protection should handle empty pins array","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty pins array"},{"ancestorTitles":["MapPins PII Protection"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"MapPins PII Protection should handle pins with undefined or null ImagePath","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle pins with undefined or null ImagePath"},{"ancestorTitles":["MapPins PII Protection"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"MapPins PII Protection should be case insensitive when filtering personnel pins","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should be case insensitive when filtering personnel pins"}],"endTime":1755726227873,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/maps/__tests__/map-pins-pii.test.tsx","startTime":1755726227454,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["LoginInfoBottomSheet"],"duration":84,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet renders correctly when open","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"renders correctly when open"},{"ancestorTitles":["LoginInfoBottomSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet does not render when closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render when closed"},{"ancestorTitles":["LoginInfoBottomSheet"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet renders username field with correct properties","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"renders username field with correct properties"},{"ancestorTitles":["LoginInfoBottomSheet"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet renders password field with correct properties","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"renders password field with correct properties"},{"ancestorTitles":["LoginInfoBottomSheet"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet uses KeyboardAvoidingView with correct behavior for iOS","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"uses KeyboardAvoidingView with correct behavior for iOS"},{"ancestorTitles":["LoginInfoBottomSheet"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet renders cancel and save buttons","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"renders cancel and save buttons"},{"ancestorTitles":["LoginInfoBottomSheet"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"LoginInfoBottomSheet calls onClose when cancel button is pressed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"calls onClose when cancel button is pressed"}],"endTime":1755726227949,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/settings/__tests__/login-info-bottom-sheet-simple.test.tsx","startTime":1755726227720,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["loadSelectedTheme"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"loadSelectedTheme should load and apply saved theme from storage","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should load and apply saved theme from storage"},{"ancestorTitles":["loadSelectedTheme"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"loadSelectedTheme should handle no saved theme gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle no saved theme gracefully"},{"ancestorTitles":["loadSelectedTheme"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"loadSelectedTheme should handle storage errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle storage errors gracefully"},{"ancestorTitles":["loadSelectedTheme"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"loadSelectedTheme should apply light theme correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should apply light theme correctly"},{"ancestorTitles":["loadSelectedTheme"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"loadSelectedTheme should apply system theme correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should apply system theme correctly"}],"endTime":1755726227992,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/hooks/__tests__/use-selected-theme.test.ts","startTime":1755726227829,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Plus Code Search Logic","Input Validation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Input Validation should reject empty plus code string","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should reject empty plus code string"},{"ancestorTitles":["Plus Code Search Logic","Input Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Input Validation should reject whitespace-only plus code string","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should reject whitespace-only plus code string"},{"ancestorTitles":["Plus Code Search Logic","API Configuration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic API Configuration should handle missing API key gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle missing API key gracefully"},{"ancestorTitles":["Plus Code Search Logic","API Configuration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic API Configuration should use correct API endpoint and parameters","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should use correct API endpoint and parameters"},{"ancestorTitles":["Plus Code Search Logic","Plus Code Formats"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Plus Code Formats should handle full plus code with area code","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle full plus code with area code"},{"ancestorTitles":["Plus Code Search Logic","Plus Code Formats"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Plus Code Formats should handle short plus code (without area code)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle short plus code (without area code)"},{"ancestorTitles":["Plus Code Search Logic","Plus Code Formats"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Plus Code Formats should handle plus code with city context","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle plus code with city context"},{"ancestorTitles":["Plus Code Search Logic","Plus Code Formats"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Plus Code Formats should handle plus code with special characters","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle plus code with special characters"},{"ancestorTitles":["Plus Code Search Logic","Geocoding Results"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Geocoding Results should handle successful geocoding result","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle successful geocoding result"},{"ancestorTitles":["Plus Code Search Logic","Geocoding Results"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Geocoding Results should handle no results from geocoding API","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle no results from geocoding API"},{"ancestorTitles":["Plus Code Search Logic","Geocoding Results"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Geocoding Results should handle invalid status from geocoding API","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle invalid status from geocoding API"},{"ancestorTitles":["Plus Code Search Logic","Geocoding Results"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Geocoding Results should handle REQUEST_DENIED status","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle REQUEST_DENIED status"},{"ancestorTitles":["Plus Code Search Logic","Geocoding Results"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Geocoding Results should handle OVER_QUERY_LIMIT status","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle OVER_QUERY_LIMIT status"},{"ancestorTitles":["Plus Code Search Logic","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Error Handling should handle network errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle network errors gracefully"},{"ancestorTitles":["Plus Code Search Logic","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Error Handling should handle API timeout errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle API timeout errors"},{"ancestorTitles":["Plus Code Search Logic","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Error Handling should handle null config","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle null config"},{"ancestorTitles":["Plus Code Search Logic","Plus Code Encoding"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Plus Code Encoding should properly encode plus sign in plus codes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should properly encode plus sign in plus codes"},{"ancestorTitles":["Plus Code Search Logic","Plus Code Encoding"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Plus Code Encoding should handle plus codes with spaces","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle plus codes with spaces"},{"ancestorTitles":["Plus Code Search Logic","Plus Code Encoding"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Plus Code Encoding should handle plus codes with unicode characters","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle plus codes with unicode characters"},{"ancestorTitles":["Plus Code Search Logic","Data Structure Validation"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Data Structure Validation should validate geocoding result structure","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should validate geocoding result structure"},{"ancestorTitles":["Plus Code Search Logic","Integration Flow"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Integration Flow should complete entire plus code geocoding flow successfully","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should complete entire plus code geocoding flow successfully"},{"ancestorTitles":["Plus Code Search Logic","Performance Tests"],"duration":28,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Performance Tests should handle multiple concurrent plus code searches","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should handle multiple concurrent plus code searches"},{"ancestorTitles":["Plus Code Search Logic","Real-world Plus Code Examples"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Real-world Plus Code Examples should handle Mountain View, CA plus code","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle Mountain View, CA plus code"},{"ancestorTitles":["Plus Code Search Logic","Real-world Plus Code Examples"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Real-world Plus Code Examples should handle New York City plus code","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle New York City plus code"},{"ancestorTitles":["Plus Code Search Logic","Real-world Plus Code Examples"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Plus Code Search Logic Real-world Plus Code Examples should handle London, UK plus code","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle London, UK plus code"}],"endTime":1755726228000,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/call/new/__tests__/plus-code-search.test.ts","startTime":1755726227824,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useCallDetailMenu"],"duration":90,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu renders the header menu button","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"renders the header menu button"},{"ancestorTitles":["useCallDetailMenu"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu does not render the header menu button when user cannot create calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not render the header menu button when user cannot create calls"},{"ancestorTitles":["useCallDetailMenu"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu opens the action sheet when menu button is pressed","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"opens the action sheet when menu button is pressed"},{"ancestorTitles":["useCallDetailMenu"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu calls onEditCall when edit option is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"calls onEditCall when edit option is pressed"},{"ancestorTitles":["useCallDetailMenu"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu calls onCloseCall when close option is pressed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"calls onCloseCall when close option is pressed"},{"ancestorTitles":["useCallDetailMenu"],"duration":38,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu closes the action sheet after selecting an option","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"closes the action sheet after selecting an option"},{"ancestorTitles":["useCallDetailMenu"],"duration":47,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu tracks analytics when menu is opened","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics when menu is opened"},{"ancestorTitles":["useCallDetailMenu"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu tracks analytics when edit call is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when edit call is selected"},{"ancestorTitles":["useCallDetailMenu"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu tracks analytics when close call is selected","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when close call is selected"},{"ancestorTitles":["useCallDetailMenu"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useCallDetailMenu tracks analytics with canEditCall false when user cannot create calls","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics with canEditCall false when user cannot create calls"}],"endTime":1755726228009,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/call-detail-menu.test.tsx","startTime":1755726227633,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useSignalRStore","Basic Store Functionality"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore Basic Store Functionality should create a store instance with correct initial state","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"status":"passed","title":"should create a store instance with correct initial state"},{"ancestorTitles":["useSignalRStore","connectUpdateHub"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore connectUpdateHub should handle missing EventingUrl","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle missing EventingUrl"},{"ancestorTitles":["useSignalRStore","connectUpdateHub"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore connectUpdateHub should handle missing config","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle missing config"},{"ancestorTitles":["useSignalRStore","connectUpdateHub"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore connectUpdateHub should handle connection errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle connection errors"},{"ancestorTitles":["useSignalRStore","disconnectUpdateHub"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore disconnectUpdateHub should disconnect from update hub successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should disconnect from update hub successfully"},{"ancestorTitles":["useSignalRStore","disconnectUpdateHub"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore disconnectUpdateHub should handle disconnect errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle disconnect errors"},{"ancestorTitles":["useSignalRStore","connectGeolocationHub"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore connectGeolocationHub should handle missing EventingUrl","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle missing EventingUrl"},{"ancestorTitles":["useSignalRStore","disconnectGeolocationHub"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore disconnectGeolocationHub should disconnect from geolocation hub successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should disconnect from geolocation hub successfully"},{"ancestorTitles":["useSignalRStore","disconnectGeolocationHub"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"useSignalRStore disconnectGeolocationHub should handle disconnect errors","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle disconnect errors"}],"endTime":1755726227999,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/signalr/__tests__/signalr-store.test.ts","startTime":1755726227819,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Notes Screen Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics tracks notes view analytics event with correct data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks notes view analytics event with correct data"},{"ancestorTitles":["Notes Screen Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics tracks search analytics event with correct data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks search analytics event with correct data"},{"ancestorTitles":["Notes Screen Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics tracks note selection analytics event with correct data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks note selection analytics event with correct data"},{"ancestorTitles":["Notes Screen Analytics"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics tracks refresh analytics event with correct data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks refresh analytics event with correct data"},{"ancestorTitles":["Notes Screen Analytics","Note filtering logic tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics Note filtering logic tests filters notes by title correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"filters notes by title correctly"},{"ancestorTitles":["Notes Screen Analytics","Note filtering logic tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics Note filtering logic tests filters notes by body content correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"filters notes by body content correctly"},{"ancestorTitles":["Notes Screen Analytics","Note filtering logic tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics Note filtering logic tests filters notes by category correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"filters notes by category correctly"},{"ancestorTitles":["Notes Screen Analytics","Note filtering logic tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics Note filtering logic tests performs case-insensitive filtering","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"performs case-insensitive filtering"},{"ancestorTitles":["Notes Screen Analytics","Note filtering logic tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics Note filtering logic tests returns all notes when search query is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"returns all notes when search query is empty"},{"ancestorTitles":["Notes Screen Analytics","Note filtering logic tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Notes Screen Analytics Note filtering logic tests returns empty array for non-matching queries","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"returns empty array for non-matching queries"}],"endTime":1755726228012,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/notes.test.tsx","startTime":1755726227837,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["PII Protection","containsPII"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection containsPII should detect PII in events with sensitive data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should detect PII in events with sensitive data"},{"ancestorTitles":["PII Protection","containsPII"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection containsPII should not detect PII in events without sensitive data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should not detect PII in events without sensitive data"},{"ancestorTitles":["PII Protection","containsPII"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection containsPII should handle empty or null data fields","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty or null data fields"},{"ancestorTitles":["PII Protection","sanitizeEventForLogging"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection sanitizeEventForLogging should sanitize PII fields from events","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should sanitize PII fields from events"},{"ancestorTitles":["PII Protection","sanitizeEventForLogging"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection sanitizeEventForLogging should handle events without PII","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle events without PII"},{"ancestorTitles":["PII Protection","sanitizeEventForLogging"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection sanitizeEventForLogging should handle invalid coordinate values","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle invalid coordinate values"},{"ancestorTitles":["PII Protection","shouldDisableOfflineQueueForWeb"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection shouldDisableOfflineQueueForWeb should return false for non-web platforms","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return false for non-web platforms"},{"ancestorTitles":["PII Protection","shouldDisableOfflineQueueForWeb"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection shouldDisableOfflineQueueForWeb should return true for web without proper encryption support","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return true for web without proper encryption support"},{"ancestorTitles":["PII Protection","shouldDisableOfflineQueueForWeb"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection shouldDisableOfflineQueueForWeb should return false for web with proper encryption support","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return false for web with proper encryption support"},{"ancestorTitles":["PII Protection","auditPIIExposure"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection auditPIIExposure should provide correct audit results for mixed events","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should provide correct audit results for mixed events"},{"ancestorTitles":["PII Protection","auditPIIExposure"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection auditPIIExposure should classify risk levels correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should classify risk levels correctly"},{"ancestorTitles":["PII Protection","auditPIIExposure"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection auditPIIExposure should handle empty events array","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle empty events array"},{"ancestorTitles":["PII Protection","auditPIIExposure"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PII Protection auditPIIExposure should provide web-specific recommendations when on web platform","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should provide web-specific recommendations when on web platform"}],"endTime":1755726228073,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/__tests__/pii-protection.test.ts","startTime":1755726227957,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["UnitsFilterSheet"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should pass basic test","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should pass basic test"},{"ancestorTitles":["UnitsFilterSheet"],"duration":101,"failureDetails":[],"failureMessages":[],"fullName":"UnitsFilterSheet should render without crashing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render without crashing"}],"endTime":1755726228077,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/units/__tests__/units-filter-sheet-simple.test.tsx","startTime":1755726227883,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["LiveKit Store - Permission Management","Android permission flow"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management Android permission flow should successfully request permissions when not granted initially","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should successfully request permissions when not granted initially"},{"ancestorTitles":["LiveKit Store - Permission Management","Android permission flow"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management Android permission flow should skip request when permissions already granted","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should skip request when permissions already granted"},{"ancestorTitles":["LiveKit Store - Permission Management","Android permission flow"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management Android permission flow should handle permission denial","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle permission denial"},{"ancestorTitles":["LiveKit Store - Permission Management","Android permission flow"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management Android permission flow should handle permission errors gracefully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle permission errors gracefully"},{"ancestorTitles":["LiveKit Store - Permission Management","Android permission flow"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management Android permission flow should handle request API errors","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle request API errors"},{"ancestorTitles":["LiveKit Store - Permission Management","iOS permission flow"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management iOS permission flow should successfully request permissions on iOS","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should successfully request permissions on iOS"},{"ancestorTitles":["LiveKit Store - Permission Management","iOS permission flow"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management iOS permission flow should handle iOS permission denial","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle iOS permission denial"},{"ancestorTitles":["LiveKit Store - Permission Management","Unsupported platform handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management Unsupported platform handling should handle unsupported platform gracefully","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should handle unsupported platform gracefully"},{"ancestorTitles":["LiveKit Store - Permission Management","Permission response edge cases"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management Permission response edge cases should handle undefined permission response","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle undefined permission response"},{"ancestorTitles":["LiveKit Store - Permission Management","Permission response edge cases"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management Permission response edge cases should handle malformed permission response","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle malformed permission response"},{"ancestorTitles":["LiveKit Store - Permission Management","CallKeep Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management CallKeep Integration should have CallKeep service available for iOS integration","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should have CallKeep service available for iOS integration"},{"ancestorTitles":["LiveKit Store - Permission Management","CallKeep Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management CallKeep Integration should handle CallKeep setup calls","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle CallKeep setup calls"},{"ancestorTitles":["LiveKit Store - Permission Management","CallKeep Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management CallKeep Integration should handle CallKeep start and end call operations","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle CallKeep start and end call operations"},{"ancestorTitles":["LiveKit Store - Permission Management","CallKeep Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management CallKeep Integration should skip CallKeep operations on non-iOS platforms","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should skip CallKeep operations on non-iOS platforms"},{"ancestorTitles":["LiveKit Store - Permission Management","CallKeep Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"LiveKit Store - Permission Management CallKeep Integration should handle CallKeep service errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle CallKeep service errors gracefully"}],"endTime":1755726228109,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/app/__tests__/livekit-store.test.ts","startTime":1755726228004,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["MessagesStore - Minimal Test"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"MessagesStore - Minimal Test should create store without hanging","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should create store without hanging"}],"endTime":1755726228113,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/messages/__tests__/minimal.test.ts","startTime":1755726228034,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["App Initialization Logic","Initialization Conditions"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"App Initialization Logic Initialization Conditions should check initialization conditions correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should check initialization conditions correctly"}],"endTime":1755726228118,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/(app)/__tests__/initialization.test.tsx","startTime":1755726228047,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["units-filter storage"],"duration":74,"failureDetails":[],"failureMessages":[],"fullName":"units-filter storage should be importable","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should be importable"},{"ancestorTitles":["units-filter storage"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"units-filter storage should have correct function signatures","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should have correct function signatures"},{"ancestorTitles":["units-filter storage"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"units-filter storage should return correct storage key","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return correct storage key"}],"endTime":1755726228119,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/storage/__tests__/units-filter.test.ts","startTime":1755726227931,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useUnitsStore","fetchUnits"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore fetchUnits should fetch units successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch units successfully"},{"ancestorTitles":["useUnitsStore","fetchUnits"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore fetchUnits should handle fetch error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch error"},{"ancestorTitles":["useUnitsStore","fetchUnits"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore fetchUnits should handle generic error","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle generic error"},{"ancestorTitles":["useUnitsStore","fetchUnits"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore fetchUnits should set loading state during fetch","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should set loading state during fetch"},{"ancestorTitles":["useUnitsStore","setSearchQuery"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore setSearchQuery should update search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should update search query"},{"ancestorTitles":["useUnitsStore","setSearchQuery"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore setSearchQuery should clear search query","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear search query"},{"ancestorTitles":["useUnitsStore","selectUnit"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore selectUnit should select unit and open details","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should select unit and open details"},{"ancestorTitles":["useUnitsStore","selectUnit"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore selectUnit should select different unit","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should select different unit"},{"ancestorTitles":["useUnitsStore","closeDetails"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore closeDetails should close details sheet","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should close details sheet"},{"ancestorTitles":["useUnitsStore","closeDetails"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore closeDetails should work when details already closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should work when details already closed"},{"ancestorTitles":["useUnitsStore","initial state"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore initial state should have correct initial state","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should have correct initial state"},{"ancestorTitles":["useUnitsStore","multiple operations"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore multiple operations should handle multiple fetch operations","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle multiple fetch operations"},{"ancestorTitles":["useUnitsStore","multiple operations"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore multiple operations should handle search and selection together","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle search and selection together"},{"ancestorTitles":["useUnitsStore","error handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore error handling should clear error on successful fetch","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should clear error on successful fetch"},{"ancestorTitles":["useUnitsStore","error handling"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useUnitsStore error handling should clear error when starting new fetch","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should clear error when starting new fetch"}],"endTime":1755726228124,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/units/__tests__/store.test.ts","startTime":1755726227850,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["PersonnelFilterSheet"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelFilterSheet should import without crashing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should import without crashing"},{"ancestorTitles":["PersonnelFilterSheet"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelFilterSheet should integrate analytics hook","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should integrate analytics hook"},{"ancestorTitles":["PersonnelFilterSheet"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"PersonnelFilterSheet should track analytics event names correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should track analytics event names correctly"}],"endTime":1755726228170,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/personnel/__tests__/personnel-filter-sheet.test.tsx","startTime":1755726228086,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ShiftDayDetailsSheet - Basic Functionality"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Basic Functionality should have correct mock data structure","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should have correct mock data structure"},{"ancestorTitles":["ShiftDayDetailsSheet - Basic Functionality"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Basic Functionality should handle date formatting logic","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle date formatting logic"},{"ancestorTitles":["ShiftDayDetailsSheet - Basic Functionality"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Basic Functionality should check user signup status","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should check user signup status"}],"endTime":1755726228171,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/shift-day-details-sheet-basic.test.tsx","startTime":1755726228083,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["NoteDetailsSheet Analytics"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics should provide analytics hook","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should provide analytics hook"},{"ancestorTitles":["NoteDetailsSheet Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics should track note details view with correct data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track note details view with correct data"},{"ancestorTitles":["NoteDetailsSheet Analytics"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics should track note details view with minimal data","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track note details view with minimal data"},{"ancestorTitles":["NoteDetailsSheet Analytics"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics should track close analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track close analytics"},{"ancestorTitles":["NoteDetailsSheet Analytics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics should track delete analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should track delete analytics"},{"ancestorTitles":["NoteDetailsSheet Analytics"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"NoteDetailsSheet Analytics should handle analytics errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle analytics errors gracefully"}],"endTime":1755726228212,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/notes/__tests__/note-details-sheet-analytics.test.tsx","startTime":1755726228132,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Simple Test"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Simple Test should pass","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should pass"}],"endTime":1755726228227,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/simple-test.test.tsx","startTime":1755726228146,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Header Simple Test"],"duration":91,"failureDetails":[],"failureMessages":[],"fullName":"Header Simple Test should render without crashing","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render without crashing"},{"ancestorTitles":["Header Simple Test"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"Header Simple Test should render with title","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render with title"},{"ancestorTitles":["Header Simple Test"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"Header Simple Test should render with all props","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should render with all props"}],"endTime":1755726228224,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/ui/__tests__/header-simple.test.tsx","startTime":1755726228038,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Date and Time Formatting"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Date and Time Formatting should format time strings correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should format time strings correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Date and Time Formatting"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Date and Time Formatting should format date strings correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should format date strings correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Shift Type Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Shift Type Handling should return correct shift type text","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should return correct shift type text"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Signup Statistics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Signup Statistics should calculate total signups correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should calculate total signups correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Signup Statistics"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Signup Statistics should calculate total needs correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should calculate total needs correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","User Signup Status"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic User Signup Status should check if user is signed up correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should check if user is signed up correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","User Signup Status"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic User Signup Status should check if user can sign up correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should check if user can sign up correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Component State Logic"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Component State Logic should determine when component should render","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should determine when component should render"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Component State Logic"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Component State Logic should handle signup action logic","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle signup action logic"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Error Handling"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Error Handling should handle signup errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle signup errors gracefully"},{"ancestorTitles":["ShiftDayDetailsSheet - Business Logic","Data Validation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Business Logic Data Validation should validate shift day data structure","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should validate shift day data structure"}],"endTime":1755726228239,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/shift-day-details-sheet.test.tsx","startTime":1755726228144,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["CalendarItemDetailsSheet - Analytics Only"],"duration":88,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet - Analytics Only tracks analytics when sheet becomes visible","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"tracks analytics when sheet becomes visible"},{"ancestorTitles":["CalendarItemDetailsSheet - Analytics Only"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet - Analytics Only does not track analytics when sheet is closed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when sheet is closed"},{"ancestorTitles":["CalendarItemDetailsSheet - Analytics Only"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet - Analytics Only does not track analytics when item is null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"does not track analytics when item is null"},{"ancestorTitles":["CalendarItemDetailsSheet - Analytics Only"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"CalendarItemDetailsSheet - Analytics Only tracks analytics when item changes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"tracks analytics when item changes"}],"endTime":1755726228261,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calendar/__tests__/calendar-item-details-sheet-minimal.test.tsx","startTime":1755726228050,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Hook Integration"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Hook Integration should import and use useAnalytics hook correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should import and use useAnalytics hook correctly"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Hook Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Hook Integration should call trackEvent with audio stream bottom sheet viewed analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call trackEvent with audio stream bottom sheet viewed analytics"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Hook Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Hook Integration should call trackEvent with audio stream started analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call trackEvent with audio stream started analytics"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Hook Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Hook Integration should call trackEvent with audio stream stopped analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call trackEvent with audio stream stopped analytics"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Hook Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Hook Integration should call trackEvent with refresh streams analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call trackEvent with refresh streams analytics"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Hook Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Hook Integration should call trackEvent with bottom sheet closed analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call trackEvent with bottom sheet closed analytics"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Hook Integration"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Hook Integration should call trackEvent with error analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call trackEvent with error analytics"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Data Validation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Data Validation should validate audio_stream_bottom_sheet_viewed analytics structure","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should validate audio_stream_bottom_sheet_viewed analytics structure"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Data Validation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Data Validation should validate audio_stream_started analytics structure","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"should validate audio_stream_started analytics structure"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Data Validation"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Data Validation should validate audio_stream_stopped analytics structure","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should validate audio_stream_stopped analytics structure"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Data Validation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Data Validation should validate all required analytics properties are present","invocations":1,"location":null,"numPassingAsserts":18,"retryReasons":[],"status":"passed","title":"should validate all required analytics properties are present"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Data Validation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Data Validation should use valid ISO timestamp format in all analytics events","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should use valid ISO timestamp format in all analytics events"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Focus Effect Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Focus Effect Integration should call useFocusEffect with proper callback","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call useFocusEffect with proper callback"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Focus Effect Integration"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Focus Effect Integration should track page view when useFocusEffect callback is triggered","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should track page view when useFocusEffect callback is triggered"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Analytics Data Transformation"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Analytics Data Transformation should handle analytics data transformation for different stream states","invocations":1,"location":null,"numPassingAsserts":18,"retryReasons":[],"status":"passed","title":"should handle analytics data transformation for different stream states"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Error Handling and Edge Cases"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Error Handling and Edge Cases should handle empty stream data gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle empty stream data gracefully"},{"ancestorTitles":["AudioStreamBottomSheet Analytics","Error Handling and Edge Cases"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamBottomSheet Analytics Error Handling and Edge Cases should handle analytics service errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle analytics service errors gracefully"}],"endTime":1755726228273,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/audio-stream/__tests__/audio-stream-bottom-sheet.test.tsx","startTime":1755726228182,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Login Analytics Tests"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"Login Analytics Tests should call trackEvent with login_viewed when useFocusEffect is triggered","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call trackEvent with login_viewed when useFocusEffect is triggered"},{"ancestorTitles":["Login Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Login Analytics Tests should call trackEvent with login_attempted when onSubmit is called","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call trackEvent with login_attempted when onSubmit is called"},{"ancestorTitles":["Login Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Login Analytics Tests should call trackEvent with login_success when status changes to signedIn","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should call trackEvent with login_success when status changes to signedIn"},{"ancestorTitles":["Login Analytics Tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"Login Analytics Tests should call trackEvent with login_failed when status changes to error","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should call trackEvent with login_failed when status changes to error"},{"ancestorTitles":["Login Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Login Analytics Tests should handle unknown error in login_failed analytics","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle unknown error in login_failed analytics"},{"ancestorTitles":["Login Analytics Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Login Analytics Tests should validate analytics data structure","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"status":"passed","title":"should validate analytics data structure"}],"endTime":1755726228280,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/login/__tests__/index.test.tsx","startTime":1755726228190,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["useBackgroundGeolocation"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"useBackgroundGeolocation should be importable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should be importable"}],"endTime":1755726228281,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/lib/hooks/__tests__/use-background-geolocation.test.ts","startTime":1755726228188,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ShiftDayDetailsSheet - Minimal Logic Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Minimal Logic Tests should have correct shift data structure","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should have correct shift data structure"},{"ancestorTitles":["ShiftDayDetailsSheet - Minimal Logic Tests"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Minimal Logic Tests should calculate total signups correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should calculate total signups correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Minimal Logic Tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Minimal Logic Tests should calculate total needs correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should calculate total needs correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Minimal Logic Tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Minimal Logic Tests should determine shift type text correctly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should determine shift type text correctly"},{"ancestorTitles":["ShiftDayDetailsSheet - Minimal Logic Tests"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ShiftDayDetailsSheet - Minimal Logic Tests should check if user is signed up correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should check if user is signed up correctly"}],"endTime":1755726228301,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/shifts/__tests__/shift-day-details-sheet-minimal.test.tsx","startTime":1755726228231,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Simple Test"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"Simple Test should pass","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should pass"}],"endTime":1755726228307,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/calls/__tests__/simple.test.tsx","startTime":1755726228191,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["FullScreenLocationPicker"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"FullScreenLocationPicker should be importable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should be importable"}],"endTime":1755726228311,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/components/maps/__tests__/full-screen-location-picker.test.tsx","startTime":1755726228255,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["AppInitializationService","Initialization"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Initialization should initialize successfully on iOS","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should initialize successfully on iOS"},{"ancestorTitles":["AppInitializationService","Initialization"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Initialization should initialize successfully on Android","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should initialize successfully on Android"},{"ancestorTitles":["AppInitializationService","Initialization"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Initialization should be idempotent - calling initialize multiple times should not re-initialize","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should be idempotent - calling initialize multiple times should not re-initialize"},{"ancestorTitles":["AppInitializationService","Initialization"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Initialization should handle concurrent initialization calls","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle concurrent initialization calls"},{"ancestorTitles":["AppInitializationService","Initialization"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Initialization should handle CallKeep setup errors gracefully","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle CallKeep setup errors gracefully"},{"ancestorTitles":["AppInitializationService","Initialization"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Initialization should allow retry after failed initialization","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should allow retry after failed initialization"},{"ancestorTitles":["AppInitializationService","Cleanup"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Cleanup should cleanup resources properly","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should cleanup resources properly"},{"ancestorTitles":["AppInitializationService","Cleanup"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Cleanup should handle cleanup errors gracefully","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle cleanup errors gracefully"},{"ancestorTitles":["AppInitializationService","Reset functionality"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Reset functionality should reset initialization state","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"should reset initialization state"},{"ancestorTitles":["AppInitializationService","Singleton behavior"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AppInitializationService Singleton behavior should return the same instance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return the same instance"}],"endTime":1755726228340,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/app-initialization.service.test.ts","startTime":1755726228270,"status":"passed","summary":""},{"assertionResults":[],"coverage":{},"endTime":1755726230154,"message":" \u001b[1m● \u001b[22mTest suite failed to run\n\n TypeError: Cannot read properties of undefined (reading 'RNCNetInfo')\n\n \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 |\u001b[39m \u001b[36mimport\u001b[39m \u001b[33mNetInfo\u001b[39m \u001b[36mfrom\u001b[39m \u001b[32m'@react-native-community/netinfo'\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 2 |\u001b[39m \u001b[36mimport\u001b[39m \u001b[33m*\u001b[39m \u001b[36mas\u001b[39m \u001b[33mTaskManager\u001b[39m \u001b[36mfrom\u001b[39m \u001b[32m'expo-task-manager'\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 3 |\u001b[39m \u001b[36mimport\u001b[39m { \u001b[33mAppState\u001b[39m } \u001b[36mfrom\u001b[39m \u001b[32m'react-native'\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 4 |\u001b[39m\u001b[0m\n\n \u001b[2mat Object.RNCNetInfo (\u001b[22mnode_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.ts\u001b[2m:13:55)\u001b[22m\n \u001b[2mat Object.require (\u001b[22mnode_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.ts\u001b[2m:11:1)\u001b[22m\n \u001b[2mat Object.require (\u001b[22mnode_modules/@react-native-community/netinfo/lib/commonjs/index.ts\u001b[2m:13:1)\u001b[22m\n \u001b[2mat Object.require (\u001b[22m\u001b[0m\u001b[36msrc/services/__tests__/offline-queue-processor.test.ts\u001b[39m\u001b[0m\u001b[2m:1:1)\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/services/__tests__/offline-queue-processor.test.ts","startTime":1755726230154,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":["AudioStreamStore","initial state"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore initial state should have the correct initial state","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should have the correct initial state"},{"ancestorTitles":["AudioStreamStore","state setters"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore state setters should set available streams","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set available streams"},{"ancestorTitles":["AudioStreamStore","state setters"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore state setters should set loading streams state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set loading streams state"},{"ancestorTitles":["AudioStreamStore","state setters"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore state setters should set current stream","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set current stream"},{"ancestorTitles":["AudioStreamStore","state setters"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore state setters should set playing state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set playing state"},{"ancestorTitles":["AudioStreamStore","state setters"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore state setters should set loading state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set loading state"},{"ancestorTitles":["AudioStreamStore","state setters"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore state setters should set buffering state","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set buffering state"},{"ancestorTitles":["AudioStreamStore","state setters"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore state setters should set bottom sheet visibility","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should set bottom sheet visibility"},{"ancestorTitles":["AudioStreamStore","fetchAvailableStreams"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore fetchAvailableStreams should fetch streams successfully","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should fetch streams successfully"},{"ancestorTitles":["AudioStreamStore","fetchAvailableStreams"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore fetchAvailableStreams should handle fetch error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should handle fetch error"},{"ancestorTitles":["AudioStreamStore","fetchAvailableStreams"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore fetchAvailableStreams should handle empty response","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should handle empty response"},{"ancestorTitles":["AudioStreamStore","playStream"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore playStream should play stream successfully","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"status":"passed","title":"should play stream successfully"},{"ancestorTitles":["AudioStreamStore","playStream"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore playStream should stop current stream before playing new one","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should stop current stream before playing new one"},{"ancestorTitles":["AudioStreamStore","playStream"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore playStream should handle play stream error","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should handle play stream error"},{"ancestorTitles":["AudioStreamStore","stopStream"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore stopStream should stop stream successfully","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"should stop stream successfully"},{"ancestorTitles":["AudioStreamStore","stopStream"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore stopStream should handle stop stream error","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle stop stream error"},{"ancestorTitles":["AudioStreamStore","stopStream"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore stopStream should handle null sound object","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should handle null sound object"},{"ancestorTitles":["AudioStreamStore","cleanup"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore cleanup should cleanup successfully","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should cleanup successfully"},{"ancestorTitles":["AudioStreamStore","cleanup"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"AudioStreamStore cleanup should handle cleanup error","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should handle cleanup error"}],"endTime":1755726228356,"message":"","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/stores/app/__tests__/audio-stream-store.test.ts","startTime":1755726228246,"status":"passed","summary":""},{"assertionResults":[],"coverage":{},"endTime":1755726230154,"message":" \u001b[1m● \u001b[22mTest suite failed to run\n\n TypeError: Cannot read properties of undefined (reading 'select')\n\n \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 |\u001b[39m \u001b[36mimport\u001b[39m { useFocusEffect } \u001b[36mfrom\u001b[39m \u001b[32m'@react-navigation/native'\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 2 |\u001b[39m \u001b[36mimport\u001b[39m { format } \u001b[36mfrom\u001b[39m \u001b[32m'date-fns'\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 3 |\u001b[39m \u001b[36mimport\u001b[39m { \u001b[33mStack\u001b[39m\u001b[33m,\u001b[39m useLocalSearchParams\u001b[33m,\u001b[39m useRouter } \u001b[36mfrom\u001b[39m \u001b[32m'expo-router'\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 4 |\u001b[39m \u001b[36mimport\u001b[39m { \u001b[33mClockIcon\u001b[39m\u001b[33m,\u001b[39m \u001b[33mFileTextIcon\u001b[39m\u001b[33m,\u001b[39m \u001b[33mImageIcon\u001b[39m\u001b[33m,\u001b[39m \u001b[33mInfoIcon\u001b[39m\u001b[33m,\u001b[39m \u001b[33mPaperclipIcon\u001b[39m\u001b[33m,\u001b[39m \u001b[33mRouteIcon\u001b[39m\u001b[33m,\u001b[39m \u001b[33mUserIcon\u001b[39m\u001b[33m,\u001b[39m \u001b[33mUsersIcon\u001b[39m } \u001b[36mfrom\u001b[39m \u001b[32m'lucide-react-native'\u001b[39m\u001b[33m;\u001b[39m\u001b[0m\n\n \u001b[2mat Object.select (\u001b[22mnode_modules/@react-navigation/native/src/theming/fonts.tsx\u001b[2m:8:31)\u001b[22m\n \u001b[2mat Object.require (\u001b[22mnode_modules/@react-navigation/native/src/theming/DefaultTheme.tsx\u001b[2m:2:1)\u001b[22m\n \u001b[2mat Object.require (\u001b[22mnode_modules/@react-navigation/native/src/NavigationContainer.tsx\u001b[2m:19:1)\u001b[22m\n \u001b[2mat Object.require (\u001b[22mnode_modules/@react-navigation/native/src/createStaticNavigation.tsx\u001b[2m:10:1)\u001b[22m\n \u001b[2mat Object.require (\u001b[22mnode_modules/@react-navigation/native/src/index.tsx\u001b[2m:1:1)\u001b[22m\n \u001b[2mat Object.require (\u001b[22msrc/app/call/[id].tsx\u001b[2m:1:1)\u001b[22m\n \u001b[2mat Object.require (\u001b[22m\u001b[0m\u001b[36msrc/app/call/__tests__/[id].test.tsx\u001b[39m\u001b[0m\u001b[2m:258:1)\u001b[22m\n","name":"/Volumes/USBSSD/dev/Resgrid/Responder/src/app/call/__tests__/[id].test.tsx","startTime":1755726230154,"status":"failed","summary":""}],"wasInterrupted":false} diff --git a/package.json b/package.json index 1f80a9e..b6bb28c 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@config-plugins/react-native-webrtc": "~12.0.0", "@dev-plugins/react-query": "~0.3.1", "@expo/html-elements": "~0.10.1", - "@expo/metro-runtime": "~5.0.4", + "@expo/metro-runtime": "~5.0.5", "@gluestack-ui/accordion": "~1.0.6", "@gluestack-ui/actionsheet": "^0.2.44", "@gluestack-ui/alert": "~0.1.15", @@ -77,9 +77,9 @@ "@gorhom/bottom-sheet": "~5.0.5", "@hookform/resolvers": "~3.9.0", "@legendapp/motion": "~2.4.0", - "@livekit/react-native": "~2.7.4", + "@livekit/react-native": "~2.9.1", "@livekit/react-native-expo-plugin": "~1.0.1", - "@livekit/react-native-webrtc": "~125.0.11", + "@livekit/react-native-webrtc": "~137.0.2", "@microsoft/signalr": "~8.0.7", "@notifee/react-native": "^9.1.8", "@novu/react-native": "~2.6.6", @@ -90,13 +90,13 @@ "@shopify/flash-list": "1.7.6", "@tanstack/react-query": "~5.52.1", "app-icon-badge": "^0.1.2", - "axios": "^1.11.0", + "axios": "^1.12.0", "babel-plugin-module-resolver": "^5.0.2", "buffer": "^6.0.3", "countly-sdk-react-native-bridge": "^25.4.0", "crypto-js": "^4.2.0", "date-fns": "^4.1.0", - "expo": "~53.0.0", + "expo": "~53.0.23", "expo-application": "~6.1.5", "expo-asset": "~11.1.7", "expo-audio": "~0.4.9", @@ -117,7 +117,7 @@ "expo-location": "~18.1.6", "expo-navigation-bar": "~4.2.8", "expo-notifications": "~0.31.4", - "expo-router": "~5.1.5", + "expo-router": "~5.1.7", "expo-screen-orientation": "~8.1.7", "expo-secure-store": "~14.2.4", "expo-sharing": "~13.1.5", @@ -127,7 +127,7 @@ "expo-task-manager": "~13.1.6", "geojson": "~0.5.0", "i18next": "~23.14.0", - "livekit-client": "~2.15.2", + "livekit-client": "^2.15.7", "lodash": "^4.17.21", "lodash.memoize": "~4.1.2", "lucide-react-native": "~0.475.0", @@ -138,7 +138,7 @@ "react-error-boundary": "~4.0.13", "react-hook-form": "~7.53.0", "react-i18next": "~15.0.1", - "react-native": "0.79.5", + "react-native": "0.79.6", "react-native-base64": "~0.2.1", "react-native-ble-manager": "^12.1.5", "react-native-calendars": "^1.1313.0", diff --git a/src/api/calls/calls.ts b/src/api/calls/calls.ts index 62513c3..ff54558 100644 --- a/src/api/calls/calls.ts +++ b/src/api/calls/calls.ts @@ -19,14 +19,14 @@ export const getCalls = async () => { export const getCallExtraData = async (callId: string) => { const response = await getCallExtraDataApi.get({ - callId: encodeURIComponent(callId), + callId: callId, }); return response.data; }; export const getCall = async (callId: string) => { const response = await getCallApi.get({ - callId: encodeURIComponent(callId), + callId: callId, }); return response.data; }; diff --git a/src/api/messaging/messages.ts b/src/api/messaging/messages.ts index 92513ef..d874c1b 100644 --- a/src/api/messaging/messages.ts +++ b/src/api/messaging/messages.ts @@ -13,6 +13,8 @@ const recipientsApi = createCachedApiEndpoint('/Messages/GetRecipients', { enabled: true, }); +//const recipientsApi = createApiEndpoint('/Messages/GetRecipients'); + const getInboxMessagesApi = createApiEndpoint('/Messages/GetInboxMessages'); const getSentMessagesApi = createApiEndpoint('/Messages/GetOutboxMessages'); const getMessageApi = createApiEndpoint('/Messages/GetMessage'); diff --git a/src/app/(app)/contacts.tsx b/src/app/(app)/contacts.tsx index 7cfe0b5..75a24b0 100644 --- a/src/app/(app)/contacts.tsx +++ b/src/app/(app)/contacts.tsx @@ -1,8 +1,9 @@ import { useFocusEffect } from '@react-navigation/native'; +import { FlashList } from '@shopify/flash-list'; import { ContactIcon, Search, X } from 'lucide-react-native'; import * as React from 'react'; import { useTranslation } from 'react-i18next'; -import { FlatList, RefreshControl } from 'react-native'; +import { RefreshControl } from 'react-native'; import { Loading } from '@/components/common/loading'; import ZeroState from '@/components/common/zero-state'; @@ -80,7 +81,7 @@ export default function Contacts() { {filteredContacts.length > 0 ? ( - item.ContactId} diff --git a/src/app/(app)/home/personnel.tsx b/src/app/(app)/home/personnel.tsx index 967db23..f39415a 100644 --- a/src/app/(app)/home/personnel.tsx +++ b/src/app/(app)/home/personnel.tsx @@ -1,8 +1,9 @@ // Removed useFocusEffect to simplify analytics tracking on mount +import { FlashList } from '@shopify/flash-list'; import { Filter, Search, Users, X } from 'lucide-react-native'; import * as React from 'react'; import { useTranslation } from 'react-i18next'; -import { FlatList, RefreshControl, View } from 'react-native'; +import { RefreshControl, View } from 'react-native'; import { Loading } from '@/components/common/loading'; import ZeroState from '@/components/common/zero-state'; @@ -46,8 +47,8 @@ export default function Personnel() { const query = searchQuery.toLowerCase(); return personnel.filter( (person) => - person.FirstName.toLowerCase().includes(query) || - person.LastName.toLowerCase().includes(query) || + person.FirstName?.toLowerCase().includes(query) || + person.LastName?.toLowerCase().includes(query) || person.EmailAddress?.toLowerCase().includes(query) || person.GroupName?.toLowerCase().includes(query) || person.Status?.toLowerCase().includes(query) || @@ -89,7 +90,7 @@ export default function Personnel() { {isLoading && !refreshing ? ( ) : filteredPersonnel.length > 0 ? ( - item.UserId || `personnel-${index}`} renderItem={({ item }) => } diff --git a/src/app/(app)/home/units.tsx b/src/app/(app)/home/units.tsx index 8c91332..729d232 100644 --- a/src/app/(app)/home/units.tsx +++ b/src/app/(app)/home/units.tsx @@ -1,8 +1,9 @@ import { useFocusEffect } from '@react-navigation/native'; +import { FlashList } from '@shopify/flash-list'; import { Filter, Search, Truck, X } from 'lucide-react-native'; import * as React from 'react'; import { useTranslation } from 'react-i18next'; -import { FlatList, RefreshControl, View } from 'react-native'; +import { RefreshControl, View } from 'react-native'; import { Loading } from '@/components/common/loading'; import ZeroState from '@/components/common/zero-state'; @@ -51,8 +52,8 @@ export default function Units() { const query = searchQuery.toLowerCase(); return units.filter( (unit) => - unit.Name.toLowerCase().includes(query) || - unit.Type.toLowerCase().includes(query) || + unit.Name?.toLowerCase().includes(query) || + unit.Type?.toLowerCase().includes(query) || unit.PlateNumber?.toLowerCase().includes(query) || unit.Vin?.toLowerCase().includes(query) || unit.GroupName?.toLowerCase().includes(query) @@ -91,7 +92,7 @@ export default function Units() { {isLoading && !refreshing ? ( ) : filteredUnits.length > 0 ? ( - item.UnitId || `unit-${index}`} renderItem={({ item }) => } diff --git a/src/app/(app)/notes.tsx b/src/app/(app)/notes.tsx index cf1e327..3bac3ab 100644 --- a/src/app/(app)/notes.tsx +++ b/src/app/(app)/notes.tsx @@ -1,8 +1,9 @@ import { useFocusEffect } from '@react-navigation/native'; +import { FlashList } from '@shopify/flash-list'; import { FileText, Search, X } from 'lucide-react-native'; import * as React from 'react'; import { useTranslation } from 'react-i18next'; -import { FlatList, RefreshControl, View } from 'react-native'; +import { RefreshControl, View } from 'react-native'; import { Loading } from '@/components/common/loading'; import ZeroState from '@/components/common/zero-state'; @@ -107,7 +108,7 @@ export default function Notes() { {isLoading && !refreshing ? ( ) : filteredNotes.length > 0 ? ( - item.NoteId} renderItem={({ item }) => } diff --git a/src/app/(app)/protocols.tsx b/src/app/(app)/protocols.tsx index 759ca10..95d880d 100644 --- a/src/app/(app)/protocols.tsx +++ b/src/app/(app)/protocols.tsx @@ -1,8 +1,9 @@ import { useFocusEffect } from '@react-navigation/native'; +import { FlashList } from '@shopify/flash-list'; import { FileText, Search, X } from 'lucide-react-native'; import * as React from 'react'; import { useTranslation } from 'react-i18next'; -import { FlatList, RefreshControl } from 'react-native'; +import { RefreshControl } from 'react-native'; import { Loading } from '@/components/common/loading'; import ZeroState from '@/components/common/zero-state'; @@ -73,7 +74,7 @@ export default function Protocols() { {filteredProtocols.length > 0 ? ( - item.Id || `protocol-${index}`} diff --git a/src/app/(app)/shifts.tsx b/src/app/(app)/shifts.tsx index 25cd3ff..9a32cc5 100644 --- a/src/app/(app)/shifts.tsx +++ b/src/app/(app)/shifts.tsx @@ -216,10 +216,6 @@ const ShiftsScreen: React.FC = () => { contentContainerStyle={styles.listContent} refreshControl={} showsVerticalScrollIndicator={false} - removeClippedSubviews={true} - maxToRenderPerBatch={10} - windowSize={10} - initialNumToRender={10} /> ); }; @@ -246,10 +242,6 @@ const ShiftsScreen: React.FC = () => { contentContainerStyle={styles.listContent} refreshControl={} showsVerticalScrollIndicator={false} - removeClippedSubviews={true} - maxToRenderPerBatch={10} - windowSize={10} - initialNumToRender={10} /> ); }; diff --git a/src/app/onboarding.tsx b/src/app/onboarding.tsx index 48ed67e..a4393e0 100644 --- a/src/app/onboarding.tsx +++ b/src/app/onboarding.tsx @@ -1,9 +1,10 @@ import { useFocusEffect } from '@react-navigation/native'; +import { FlashList } from '@shopify/flash-list'; import { useRouter } from 'expo-router'; import { Bell, ChevronRight, MapPin, Users } from 'lucide-react-native'; import { useColorScheme } from 'nativewind'; import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { Dimensions, FlatList, Image } from 'react-native'; +import { Dimensions, Image } from 'react-native'; import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated'; import { FocusAwareStatusBar, SafeAreaView, View } from '@/components/ui'; @@ -66,7 +67,7 @@ export default function Onboarding() { const { trackEvent } = useAnalytics(); const router = useRouter(); const [currentIndex, setCurrentIndex] = useState(0); - const flatListRef = useRef(null); + const flatListRef = useRef>(null); const buttonOpacity = useSharedValue(0); const { colorScheme } = useColorScheme(); @@ -139,15 +140,15 @@ export default function Onboarding() {
- } + renderItem={({ item }: { item: OnboardingItemProps }) => } horizontal showsHorizontalScrollIndicator={false} pagingEnabled bounces={false} - keyExtractor={(item) => item.title} + keyExtractor={(item: OnboardingItemProps) => item.title} onScroll={handleScroll} scrollEventThrottle={16} testID="onboarding-flatlist" diff --git a/src/components/calls/call-images-modal.tsx b/src/components/calls/call-images-modal.tsx index 3fd7af3..07d0c1a 100644 --- a/src/components/calls/call-images-modal.tsx +++ b/src/components/calls/call-images-modal.tsx @@ -1,3 +1,4 @@ +import { FlashList } from '@shopify/flash-list'; import * as FileSystem from 'expo-file-system'; import { Image } from 'expo-image'; import * as ImageManipulator from 'expo-image-manipulator'; @@ -5,7 +6,7 @@ import * as ImagePicker from 'expo-image-picker'; import { CameraIcon, ChevronLeftIcon, ChevronRightIcon, ImageIcon, PlusIcon, XIcon } from 'lucide-react-native'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { Alert, Dimensions, FlatList, type ImageSourcePropType, Platform, StyleSheet, TouchableOpacity, View } from 'react-native'; +import { Alert, Dimensions, type ImageSourcePropType, Platform, StyleSheet, TouchableOpacity, View } from 'react-native'; import { KeyboardAwareScrollView } from 'react-native-keyboard-controller'; import { Loading } from '@/components/common/loading'; @@ -60,7 +61,7 @@ const CallImagesModal: React.FC = ({ isOpen, onClose, call const [isAddingImage, setIsAddingImage] = useState(false); const [imageErrors, setImageErrors] = useState>(new Set()); const [fullScreenImage, setFullScreenImage] = useState<{ source: ImageSourcePropType; name?: string } | null>(null); - const flatListRef = useRef(null); + const flatListRef = useRef>(null); const { callImages, isLoadingImages, errorImages, fetchCallImages, uploadCallImage } = useCallDetailStore(); @@ -386,11 +387,11 @@ const CallImagesModal: React.FC = ({ isOpen, onClose, call return ( - item?.Id || `image-${index}-${item?.Name || 'unknown'}`} + keyExtractor={(item: CallFileResultData, index: number) => item?.Id || `image-${index}-${item?.Name || 'unknown'}`} horizontal pagingEnabled showsHorizontalScrollIndicator={false} @@ -402,24 +403,9 @@ const CallImagesModal: React.FC = ({ isOpen, onClose, call snapToInterval={width} snapToAlignment="start" decelerationRate="fast" + estimatedItemSize={width} className="w-full" contentContainerStyle={{ paddingHorizontal: 0 }} - getItemLayout={(_, index) => ({ - length: width, - offset: width * index, - index, - })} - initialNumToRender={3} - maxToRenderPerBatch={3} - windowSize={5} - removeClippedSubviews={false} - initialScrollIndex={0} - onScrollToIndexFailed={(info) => { - const wait = new Promise((resolve) => setTimeout(resolve, 500)); - wait.then(() => { - flatListRef.current?.scrollToIndex({ index: info.index, animated: true }); - }); - }} ListEmptyComponent={() => ( {t('callImages.no_images')} diff --git a/src/components/calls/dispatch-selection-modal.tsx b/src/components/calls/dispatch-selection-modal.tsx index 584e7f1..c5decda 100644 --- a/src/components/calls/dispatch-selection-modal.tsx +++ b/src/components/calls/dispatch-selection-modal.tsx @@ -1,6 +1,6 @@ import { CheckIcon, SearchIcon, UsersIcon, X } from 'lucide-react-native'; import { useColorScheme } from 'nativewind'; -import React, { useCallback, useEffect, useMemo, useRef } from 'react'; +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { ScrollView, TouchableOpacity, View } from 'react-native'; @@ -27,10 +27,24 @@ export const DispatchSelectionModal: React.FC = ({ const { colorScheme } = useColorScheme(); const { trackEvent } = useAnalytics(); const wasModalOpenRef = useRef(false); - const { data, selection, isLoading, error, searchQuery, fetchDispatchData, setSelection, toggleEveryone, toggleUser, toggleGroup, toggleRole, toggleUnit, setSearchQuery, clearSelection, getFilteredData } = + + const { data, selection, isLoading, error, searchQuery, fetchDispatchData, refreshDispatchData, setSelection, toggleEveryone, toggleUser, toggleGroup, toggleRole, toggleUnit, setSearchQuery, clearSelection } = useDispatchStore(); - const filteredData = useMemo(() => getFilteredData(), [getFilteredData]); + // Calculate filtered data directly in component to ensure reactivity + const filteredData = useMemo(() => { + if (!searchQuery.trim()) { + return data; + } + + const query = searchQuery.toLowerCase(); + return { + users: data.users.filter((user) => user.Name.toLowerCase().includes(query)), + groups: data.groups.filter((group) => group.Name.toLowerCase().includes(query)), + roles: data.roles.filter((role) => role.Name.toLowerCase().includes(query)), + units: data.units.filter((unit) => unit.Name.toLowerCase().includes(query)), + }; + }, [data, searchQuery]); // Track analytics when modal becomes visible const trackViewAnalytics = useCallback(() => { @@ -53,7 +67,10 @@ export const DispatchSelectionModal: React.FC = ({ useEffect(() => { if (isVisible && !wasModalOpenRef.current) { wasModalOpenRef.current = true; + + // Always fetch data when modal opens fetchDispatchData(); + if (initialSelection) { setSelection(initialSelection); } @@ -246,6 +263,9 @@ export const DispatchSelectionModal: React.FC = ({ ) : error ? ( {error} + ) : ( @@ -275,9 +295,8 @@ export const DispatchSelectionModal: React.FC = ({ handleToggleUser(user.Id)}> {selection.users.includes(user.Id) && } @@ -302,9 +321,8 @@ export const DispatchSelectionModal: React.FC = ({ handleToggleGroup(group.Id)}> {selection.groups.includes(group.Id) && } @@ -329,9 +347,8 @@ export const DispatchSelectionModal: React.FC = ({ handleToggleRole(role.Id)}> {selection.roles.includes(role.Id) && } @@ -356,9 +373,8 @@ export const DispatchSelectionModal: React.FC = ({ handleToggleUnit(unit.Id)}> {selection.units.includes(unit.Id) && } @@ -372,25 +388,35 @@ export const DispatchSelectionModal: React.FC = ({ )} - {/* No Results */} - {searchQuery && filteredData.users.length === 0 && filteredData.groups.length === 0 && filteredData.roles.length === 0 && filteredData.units.length === 0 && ( + {/* No Results or Empty Data */} + {!isLoading && !error && searchQuery && filteredData.users.length === 0 && filteredData.groups.length === 0 && filteredData.roles.length === 0 && filteredData.units.length === 0 && ( {t('common.no_results_found')} )} + + {/* Empty State - No recipients available */} + {!isLoading && !error && !searchQuery && data.users.length === 0 && data.groups.length === 0 && data.roles.length === 0 && data.units.length === 0 && ( + + {t('common.no_data_available', { defaultValue: 'No recipients available' })} + + + )} )} {/* Footer */} - - + + {getSelectionCount()} {t('calls.selected')} - - - diff --git a/src/components/notifications/NotificationInbox.tsx b/src/components/notifications/NotificationInbox.tsx index d369820..64fc8fe 100644 --- a/src/components/notifications/NotificationInbox.tsx +++ b/src/components/notifications/NotificationInbox.tsx @@ -1,8 +1,10 @@ import { useNotifications } from '@novu/react-native'; +import { FlashList } from '@shopify/flash-list'; import { CheckCircle, ChevronRight, Circle, ExternalLink, MoreVertical, Trash2, X } from 'lucide-react-native'; import { colorScheme } from 'nativewind'; import React, { useEffect, useRef, useState } from 'react'; -import { ActivityIndicator, Animated, Dimensions, FlatList, Platform, Pressable, RefreshControl, SafeAreaView, StatusBar, StyleSheet, View } from 'react-native'; +import { useTranslation } from 'react-i18next'; +import { ActivityIndicator, Animated, Dimensions, Platform, Pressable, RefreshControl, SafeAreaView, StatusBar, StyleSheet, View } from 'react-native'; import { deleteMessage } from '@/api/novu/inbox'; import { NotificationDetail } from '@/components/notifications/NotificationDetail'; @@ -25,6 +27,7 @@ interface NotificationInboxProps { } export const NotificationInbox = ({ isOpen, onClose }: NotificationInboxProps) => { + const { t } = useTranslation(); const config = useCoreStore((state: any) => state.config); const userId = useAuthStore((state) => state.userId); const { notifications, isLoading, fetchMore, hasMore, refetch } = useNotifications(); @@ -130,27 +133,27 @@ export const NotificationInbox = ({ isOpen, onClose }: NotificationInboxProps) = const deletePromises = Array.from(selectedNotificationIds).map((id) => deleteMessage(id)); await Promise.all(deletePromises); - showToast('success', `${selectedNotificationIds.size} notification${selectedNotificationIds.size > 1 ? 's' : ''} removed`); + showToast('success', t('notifications.bulkDeleteSuccess', { count: selectedNotificationIds.size })); exitSelectionMode(); refetch(); } catch (error) { - showToast('error', 'Failed to remove notifications'); + showToast('error', t('notifications.bulkDeleteError')); } finally { setIsDeletingSelected(false); } - }, [selectedNotificationIds, showToast, exitSelectionMode, refetch]); + }, [selectedNotificationIds, showToast, exitSelectionMode, refetch, t]); const handleDeleteNotification = React.useCallback( async (_id: string) => { try { await deleteMessage(_id); - showToast('success', 'Notification removed'); + showToast('success', t('notifications.deleteSuccess')); refetch(); } catch (error) { - showToast('error', 'Failed to remove notification'); + showToast('error', t('notifications.deleteError')); } }, - [showToast, refetch] + [showToast, refetch, t] ); const handleNavigateToReference = (referenceType: string, referenceId: string) => { @@ -228,7 +231,7 @@ export const NotificationInbox = ({ isOpen, onClose }: NotificationInboxProps) = const renderEmpty = () => ( - No updates available + {t('notifications.empty')} ); @@ -259,23 +262,23 @@ export const NotificationInbox = ({ isOpen, onClose }: NotificationInboxProps) = {isSelectionMode ? ( <> - {selectedNotificationIds.size} selected + {t('notifications.selectedCount', { count: selectedNotificationIds.size })} ) : ( <> - Notifications + {t('notifications.title')} @@ -294,14 +297,13 @@ export const NotificationInbox = ({ isOpen, onClose }: NotificationInboxProps) = ) : !userId || !config ? ( - Unable to load notifications + {t('notifications.loadError')} ) : ( - item.id} - contentContainerStyle={styles.listContainer} + keyExtractor={(item: any) => item.id} onEndReached={fetchMore} onEndReachedThreshold={0.5} ListFooterComponent={renderFooter} @@ -319,19 +321,17 @@ export const NotificationInbox = ({ isOpen, onClose }: NotificationInboxProps) = - Confirm Delete + {t('notifications.confirmDelete.title')} - - Are you sure you want to delete {selectedNotificationIds.size} notification{selectedNotificationIds.size > 1 ? 's' : ''}? This action cannot be undone. - + {t('notifications.confirmDelete.message', { count: selectedNotificationIds.size })} diff --git a/src/components/notifications/__tests__/NotificationInbox.test.tsx b/src/components/notifications/__tests__/NotificationInbox.test.tsx index 69e06cf..fc6b7d9 100644 --- a/src/components/notifications/__tests__/NotificationInbox.test.tsx +++ b/src/components/notifications/__tests__/NotificationInbox.test.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { render, fireEvent, waitFor, act } from '@testing-library/react-native'; import { useNotifications } from '@novu/react-native'; +import { useTranslation } from 'react-i18next'; import { NotificationInbox } from '../NotificationInbox'; import { useCoreStore } from '@/stores/app/core-store'; import { useToastStore } from '@/stores/toast/store'; @@ -13,6 +14,7 @@ jest.mock('@/stores/app/core-store'); jest.mock('@/stores/toast/store'); jest.mock('@/lib/auth'); jest.mock('@/api/novu/inbox'); +jest.mock('react-i18next'); jest.mock('nativewind', () => ({ colorScheme: { get: jest.fn(() => 'light'), @@ -158,6 +160,7 @@ jest.mock('@gluestack-ui/hooks', () => ({ })); const mockUseNotifications = useNotifications as jest.MockedFunction; +const mockUseTranslation = useTranslation as jest.MockedFunction; const mockUseCoreStore = useCoreStore as unknown as jest.MockedFunction; const mockUseToastStore = useToastStore as unknown as jest.MockedFunction; const mockUseAuthStore = useAuthStore as jest.MockedFunction; @@ -168,6 +171,25 @@ describe('NotificationInbox', () => { const mockShowToast = jest.fn(); const mockRefetch = jest.fn(); const mockFetchMore = jest.fn(); + const mockT = jest.fn((key: string, options?: any) => { + const translations: Record = { + 'notifications.title': 'Notifications', + 'notifications.empty': 'No updates available', + 'notifications.loadError': 'Unable to load notifications', + 'notifications.selectAll': 'Select All', + 'notifications.deselectAll': 'Deselect All', + 'notifications.selectedCount': `${options?.count || 0} selected`, + 'notifications.deleteSuccess': 'Notification removed', + 'notifications.deleteError': 'Failed to remove notification', + 'notifications.bulkDeleteSuccess': `${options?.count || 0} notification${options?.count > 1 ? 's' : ''} removed`, + 'notifications.bulkDeleteError': 'Failed to remove notifications', + 'notifications.confirmDelete.title': 'Confirm Delete', + 'notifications.confirmDelete.message': `Are you sure you want to delete ${options?.count || 0} notification${options?.count > 1 ? 's' : ''}? This action cannot be undone.`, + 'common.cancel': 'Cancel', + 'common.delete': 'Delete', + }; + return translations[key] || key; + }); const mockNotifications = [ { @@ -212,6 +234,13 @@ describe('NotificationInbox', () => { jest.clearAllTimers(); jest.useFakeTimers(); + // Mock translation function + mockUseTranslation.mockReturnValue({ + t: mockT as any, + i18n: {} as any, + ready: true, + } as any); + // Provide a valid userId through auth store mockUseAuthStore.mockImplementation((selector: any) => { const state = { userId: 'user-1' }; @@ -470,4 +499,76 @@ describe('NotificationInbox', () => { expect(mockDeleteMessage).toHaveBeenCalledWith('1'); }); + + // Localization tests + describe('Localization', () => { + it('uses translation function for user-facing strings', () => { + render(); + + expect(mockT).toHaveBeenCalledWith('notifications.title'); + }); + + it('passes correct translation keys for header title', () => { + const { getByText } = render( + + ); + + expect(mockT).toHaveBeenCalledWith('notifications.title'); + expect(getByText('Notifications')).toBeTruthy(); + }); + + it('calls translation keys for delete confirmation', () => { + render(); + + // These are called during component initialization + expect(mockT).toHaveBeenCalledWith('notifications.confirmDelete.title'); + expect(mockT).toHaveBeenCalledWith('notifications.confirmDelete.message', { count: 0 }); + }); + + it('uses translation keys for selection mode buttons', () => { + render(); + + // These would be called when in selection mode + expect(mockT).toHaveBeenCalledWith('notifications.title'); + }); + + it('uses translation keys for modal confirmation dialog', () => { + render(); + + // Translation keys would be used when delete confirmation modal is shown + expect(mockT).toHaveBeenCalledWith('notifications.title'); + }); + + it('includes translation keys for common UI elements', () => { + render(); + + // These common keys are used in the delete confirmation modal + expect(mockT).toHaveBeenCalledWith('common.cancel'); + expect(mockT).toHaveBeenCalledWith('common.delete'); + }); + + it('formats pluralized messages correctly', () => { + render(); + + // Test that translation function can handle count parameters for pluralization + const testCount = 5; + mockT('notifications.selectedCount', { count: testCount }); + + expect(mockT).toHaveBeenCalledWith('notifications.selectedCount', { count: testCount }); + }); + + it('uses common translation keys for shared UI elements', () => { + render(); + + // Verify that common keys are available for reuse across components + expect(mockT).toHaveBeenCalledWith('notifications.title'); + + // These would be used in modal dialogs + const commonKeys = ['common.cancel', 'common.delete']; + commonKeys.forEach(key => { + mockT(key); + expect(mockT).toHaveBeenCalledWith(key); + }); + }); + }); }); diff --git a/src/components/ui/actionsheet/index.tsx b/src/components/ui/actionsheet/index.tsx index 9e18768..1bda744 100644 --- a/src/components/ui/actionsheet/index.tsx +++ b/src/components/ui/actionsheet/index.tsx @@ -5,9 +5,10 @@ import type { VariantProps } from '@gluestack-ui/nativewind-utils'; import { tva } from '@gluestack-ui/nativewind-utils/tva'; import { withStates } from '@gluestack-ui/nativewind-utils/withStates'; import { AnimatePresence, createMotionAnimatedComponent, Motion } from '@legendapp/motion'; +import { FlashList } from '@shopify/flash-list'; import { cssInterop } from 'nativewind'; import React, { type ComponentType, type RefAttributes, useMemo } from 'react'; -import { FlatList, Platform, Pressable, type PressableProps, ScrollView, SectionList, Text, View, VirtualizedList } from 'react-native'; +import { Platform, Pressable, type PressableProps, ScrollView, SectionList, Text, View, VirtualizedList } from 'react-native'; import { Svg } from 'react-native-svg'; type IPrimitiveIcon = { @@ -55,7 +56,7 @@ export const UIActionsheet = createActionsheet({ Backdrop: AnimatedPressable, ScrollView: ScrollView, VirtualizedList: VirtualizedList, - FlatList: FlatList, + FlatList: FlashList, SectionList: SectionList, SectionHeaderText: H4, Icon: PrimitiveIcon, diff --git a/src/components/ui/bottomsheet/index.tsx b/src/components/ui/bottomsheet/index.tsx index e83bc30..06800a6 100644 --- a/src/components/ui/bottomsheet/index.tsx +++ b/src/components/ui/bottomsheet/index.tsx @@ -42,8 +42,8 @@ const BottomSheetContext = createContext<{ }>({ visible: false, bottomSheetRef: { current: null }, - handleClose: () => { }, - handleOpen: () => { }, + handleClose: () => {}, + handleOpen: () => {}, }); type IBottomSheetProps = React.ComponentProps; @@ -166,14 +166,14 @@ export const BottomSheetContent = ({ ...props }: IBottomSheetContent) => { const keyDownHandlers = useMemo(() => { return Platform.OS === 'web' ? { - onKeyDown: (e: React.KeyboardEvent) => { - if (e.key === 'Escape') { - e.preventDefault(); - handleClose(); - return; - } - }, - } + onKeyDown: (e: React.KeyboardEvent) => { + if (e.key === 'Escape') { + e.preventDefault(); + handleClose(); + return; + } + }, + } : {}; }, [handleClose]); diff --git a/src/components/ui/flat-list/index.tsx b/src/components/ui/flat-list/index.tsx index 4ccadcd..d3e006f 100644 --- a/src/components/ui/flat-list/index.tsx +++ b/src/components/ui/flat-list/index.tsx @@ -1,2 +1,2 @@ 'use client'; -export { FlatList } from 'react-native'; +export { FlashList as FlatList } from '@shopify/flash-list'; diff --git a/src/components/ui/select/select-actionsheet.tsx b/src/components/ui/select/select-actionsheet.tsx index 8ab5378..a9d36cf 100644 --- a/src/components/ui/select/select-actionsheet.tsx +++ b/src/components/ui/select/select-actionsheet.tsx @@ -7,9 +7,10 @@ import type { VariantProps } from '@gluestack-ui/nativewind-utils'; import { tva } from '@gluestack-ui/nativewind-utils/tva'; import { withStyleContext } from '@gluestack-ui/nativewind-utils/withStyleContext'; import { AnimatePresence, createMotionAnimatedComponent, Motion, type MotionComponentProps } from '@legendapp/motion'; +import { FlashList } from '@shopify/flash-list'; import { cssInterop } from 'nativewind'; import React from 'react'; -import { FlatList, Pressable, ScrollView, SectionList, Text, View, type ViewStyle, VirtualizedList } from 'react-native'; +import { Pressable, ScrollView, SectionList, Text, View, type ViewStyle, VirtualizedList } from 'react-native'; type IAnimatedPressableProps = React.ComponentProps & MotionComponentProps; @@ -29,7 +30,7 @@ export const UIActionsheet = createActionsheet({ Backdrop: AnimatedPressable, ScrollView: ScrollView, VirtualizedList: VirtualizedList, - FlatList: FlatList, + FlatList: FlashList, SectionList: SectionList, SectionHeaderText: H4, Icon: UIIcon, diff --git a/src/stores/dispatch/store.ts b/src/stores/dispatch/store.ts index 3de4005..5326d78 100644 --- a/src/stores/dispatch/store.ts +++ b/src/stores/dispatch/store.ts @@ -33,6 +33,7 @@ interface DispatchState { error: string | null; searchQuery: string; fetchDispatchData: () => Promise; + refreshDispatchData: () => Promise; // Force refresh without cache setSelection: (selection: DispatchSelection) => void; toggleEveryone: () => void; toggleUser: (userId: string) => void; @@ -69,14 +70,38 @@ export const useDispatchStore = create((set, get) => ({ try { const recipients = await getRecipients(false, true); + // Check if Data is properly defined + if (!recipients || !recipients.Data || !Array.isArray(recipients.Data)) { + if (__DEV__) { + console.error('Invalid recipients data structure - missing or invalid Data array'); + } + set({ + error: 'Invalid data structure received from API', + isLoading: false, + }); + return; + } + + if (__DEV__) { + console.log(`Successfully fetched ${recipients.Data.length} recipients from API`); + } + // Initialize arrays for categorized recipients const categorizedUsers: RecipientsResultData[] = []; const categorizedGroups: RecipientsResultData[] = []; const categorizedRoles: RecipientsResultData[] = []; const categorizedUnits: RecipientsResultData[] = []; - // Categorize recipients based on Type field + // Categorize recipients based on Type field with both exact and flexible matching recipients.Data.forEach((recipient) => { + if (!recipient || !recipient.Type || !recipient.Name || !recipient.Id) { + if (__DEV__) { + console.warn('Skipping invalid recipient - missing required fields'); + } + return; + } + + // First try exact matching (as per the test data) if (recipient.Type === 'Personnel') { categorizedUsers.push(recipient); } else if (recipient.Type === 'Groups') { @@ -85,9 +110,39 @@ export const useDispatchStore = create((set, get) => ({ categorizedRoles.push(recipient); } else if (recipient.Type === 'Unit') { categorizedUnits.push(recipient); + } else { + // Fallback to case-insensitive matching + const type = recipient.Type.toLowerCase().trim(); + if (type === 'personnel' || type === 'user' || type === 'users') { + categorizedUsers.push(recipient); + } else if (type === 'groups' || type === 'group') { + categorizedGroups.push(recipient); + } else if (type === 'roles' || type === 'role') { + categorizedRoles.push(recipient); + } else if (type === 'unit' || type === 'units') { + categorizedUnits.push(recipient); + } else { + // Log unknown types for debugging + if (__DEV__) { + console.warn(`Unknown recipient type: '${recipient.Type}'`); + } + } } }); + if (__DEV__) { + console.log(`Categorized recipients: Users: ${categorizedUsers.length}, Groups: ${categorizedGroups.length}, Roles: ${categorizedRoles.length}, Units: ${categorizedUnits.length}`); + } + + // Only log if we have issues with categorization + const totalCategorized = categorizedUsers.length + categorizedGroups.length + categorizedRoles.length + categorizedUnits.length; + if (totalCategorized === 0 && recipients.Data.length > 0) { + if (__DEV__) { + console.warn('No recipients were successfully categorized!'); + console.warn('Available recipient types:', [...new Set(recipients.Data.map((r) => r.Type))]); + } + } + set({ data: { users: categorizedUsers, @@ -98,13 +153,22 @@ export const useDispatchStore = create((set, get) => ({ isLoading: false, }); } catch (error) { + if (__DEV__) { + console.error('Error fetching dispatch data:', error instanceof Error ? error.message : 'Unknown error'); + } set({ - error: 'Failed to fetch dispatch data', + error: error instanceof Error ? error.message : 'Failed to fetch dispatch data', isLoading: false, }); } }, + refreshDispatchData: async () => { + // Force fresh data fetch + const { fetchDispatchData } = get(); + return fetchDispatchData(); + }, + setSelection: (selection: DispatchSelection) => { set({ selection }); }, diff --git a/src/translations/ar.json b/src/translations/ar.json index b0727c1..bed6d08 100644 --- a/src/translations/ar.json +++ b/src/translations/ar.json @@ -352,6 +352,8 @@ "next": "التالي", "noActiveUnit": "لم يتم تعيين وحدة نشطة", "noActiveUnitDescription": "يرجى تعيين وحدة نشطة من صفحة الإعدادات للوصول إلى عناصر التحكم في الحالة", + "no_data_available": "لا توجد بيانات متاحة", + "no_results_found": "لم يتم العثور على نتائج", "no_unit_selected": "لم يتم اختيار وحدة", "of": "من", "optional": "اختياري", @@ -360,6 +362,7 @@ "retry": "إعادة المحاولة", "route": "مسار", "save": "حفظ", + "search": "بحث", "step": "خطوة", "submit": "إرسال", "submitting": "جاري الإرسال...", @@ -635,6 +638,22 @@ "search": "البحث في الملاحظات...", "title": "الملاحظات" }, + "notifications": { + "bulkDeleteError": "فشل في حذف الإشعارات", + "bulkDeleteSuccess": "تم حذف {{count}} إشعار{{count, plural, one {} other {ات}}}", + "confirmDelete": { + "message": "هل أنت متأكد من أنك تريد حذف {{count}} إشعار{{count, plural, one {} other {ات}}}؟ لا يمكن التراجع عن هذا الإجراء.", + "title": "تأكيد الحذف" + }, + "deleteError": "فشل في حذف الإشعار", + "deleteSuccess": "تم حذف الإشعار", + "deselectAll": "إلغاء تحديد الكل", + "empty": "لا توجد تحديثات متاحة", + "loadError": "غير قادر على تحميل الإشعارات", + "selectAll": "تحديد الكل", + "selectedCount": "{{count}} محدد", + "title": "الإشعارات" + }, "onboarding": { "message": "مرحبًا بك في تطبيق obytes" }, diff --git a/src/translations/en.json b/src/translations/en.json index 523aa69..3a2aefa 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -352,6 +352,8 @@ "next": "Next", "noActiveUnit": "No Active Unit", "noActiveUnitDescription": "Please select an active unit to see available statuses", + "no_data_available": "No data available", + "no_results_found": "No results found", "no_unit_selected": "No Unit Selected", "of": "of", "optional": "Optional", @@ -360,6 +362,7 @@ "retry": "Retry", "route": "Route", "save": "Save", + "search": "Search", "step": "Step", "submit": "Submit", "submitting": "Submitting...", @@ -635,6 +638,22 @@ "search": "Search notes...", "title": "Notes" }, + "notifications": { + "bulkDeleteError": "Failed to remove notifications", + "bulkDeleteSuccess": "{{count}} notification{{count, plural, one {} other {s}}} removed", + "confirmDelete": { + "message": "Are you sure you want to delete {{count}} notification{{count, plural, one {} other {s}}}? This action cannot be undone.", + "title": "Confirm Delete" + }, + "deleteError": "Failed to remove notification", + "deleteSuccess": "Notification removed", + "deselectAll": "Deselect All", + "empty": "No updates available", + "loadError": "Unable to load notifications", + "selectAll": "Select All", + "selectedCount": "{{count}} selected", + "title": "Notifications" + }, "onboarding": { "message": "Welcome to obytes app site" }, diff --git a/src/translations/es.json b/src/translations/es.json index 6c34af9..4c28a46 100644 --- a/src/translations/es.json +++ b/src/translations/es.json @@ -352,6 +352,8 @@ "next": "Siguiente", "noActiveUnit": "No hay unidad activa establecida", "noActiveUnitDescription": "Por favor establezca una unidad activa desde la página de configuración para acceder a los controles de estado", + "no_data_available": "No hay datos disponibles", + "no_results_found": "No se encontraron resultados", "no_unit_selected": "Ninguna unidad seleccionada", "of": "de", "optional": "Opcional", @@ -360,6 +362,7 @@ "retry": "Reintentar", "route": "Ruta", "save": "Guardar", + "search": "Buscar", "step": "Paso", "submit": "Enviar", "submitting": "Enviando...", @@ -635,6 +638,22 @@ "search": "Buscar notas...", "title": "Notas" }, + "notifications": { + "bulkDeleteError": "Error al eliminar las notificaciones", + "bulkDeleteSuccess": "{{count}} notificación{{count, plural, one {} other {es}}} eliminada{{count, plural, one {} other {s}}}", + "confirmDelete": { + "message": "¿Estás seguro de que quieres eliminar {{count}} notificación{{count, plural, one {} other {es}}}? Esta acción no se puede deshacer.", + "title": "Confirmar Eliminación" + }, + "deleteError": "Error al eliminar la notificación", + "deleteSuccess": "Notificación eliminada", + "deselectAll": "Deseleccionar Todo", + "empty": "No hay actualizaciones disponibles", + "loadError": "No se pueden cargar las notificaciones", + "selectAll": "Seleccionar Todo", + "selectedCount": "{{count}} seleccionadas", + "title": "Notificaciones" + }, "onboarding": { "message": "Bienvenido al sitio de la aplicación obytes" }, diff --git a/yarn.lock b/yarn.lock index 514d8ff..b7b72fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1079,10 +1079,10 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@expo/cli@0.24.21": - version "0.24.21" - resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.24.21.tgz#16090692059c24d55324060997510cf9e039f9f4" - integrity sha512-DT6K9vgFHqqWL/19mU1ofRcPoO1pn4qmgi76GtuiNU4tbBe/02mRHwFsQw7qRfFAT28If5e/wiwVozgSuZVL8g== +"@expo/cli@0.24.22": + version "0.24.22" + resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.24.22.tgz#75bef7ce8df0e239b489b70a396e9ddf9833bad1" + integrity sha512-cEg6/F8ZWjoVkEwm0rXKReWbsCUROFbLFBYht+d5RzHnDwJoTX4QWJKx4m+TGNDPamRUIGw36U4z41Fvev0XmA== dependencies: "@0no-co/graphql.web" "^1.0.8" "@babel/runtime" "^7.20.0" @@ -1097,7 +1097,7 @@ "@expo/osascript" "^2.2.5" "@expo/package-manager" "^1.8.6" "@expo/plist" "^0.3.5" - "@expo/prebuild-config" "^9.0.11" + "@expo/prebuild-config" "^9.0.12" "@expo/schema-utils" "^0.1.0" "@expo/spawn-async" "^1.7.2" "@expo/ws-tunnel" "^1.0.1" @@ -1290,10 +1290,10 @@ postcss "~8.4.32" resolve-from "^5.0.0" -"@expo/metro-runtime@5.0.4", "@expo/metro-runtime@~5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@expo/metro-runtime/-/metro-runtime-5.0.4.tgz#0ea7a7ecf27e3f159289705ef5160328b9fdde42" - integrity sha512-r694MeO+7Vi8IwOsDIDzH/Q5RPMt1kUDYbiTJwnO15nIqiDwlE8HU55UlRhffKZy6s5FmxQsZ8HA+T8DqUW8cQ== +"@expo/metro-runtime@5.0.5", "@expo/metro-runtime@~5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@expo/metro-runtime/-/metro-runtime-5.0.5.tgz#0b6d365e87034e3dde96fb2f7373fcb0de40af1e" + integrity sha512-P8UFTi+YsmiD1BmdTdiIQITzDMcZgronsA3RTQ4QKJjHM3bas11oGzLQOnFaIZnlEV8Rrr3m1m+RHxvnpL+t/A== "@expo/osascript@^2.2.5": version "2.2.5" @@ -1324,7 +1324,7 @@ base64-js "^1.2.3" xmlbuilder "^15.1.1" -"@expo/prebuild-config@^9.0.10", "@expo/prebuild-config@^9.0.11": +"@expo/prebuild-config@^9.0.10": version "9.0.11" resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.11.tgz#0cc3039522dafd04102163f02ee596b5683d9d2b" integrity sha512-0DsxhhixRbCCvmYskBTq8czsU0YOBsntYURhWPNpkl0IPVpeP9haE5W4OwtHGzXEbmHdzaoDwNmVcWjS/mqbDw== @@ -1340,6 +1340,22 @@ semver "^7.6.0" xml2js "0.6.0" +"@expo/prebuild-config@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.12.tgz#ee009b6b4e01ce93f90726f58b084016d2e820a3" + integrity sha512-AKH5Scf+gEMgGxZZaimrJI2wlUJlRoqzDNn7/rkhZa5gUTnO4l6slKak2YdaH+nXlOWCNfAQWa76NnpQIfmv6Q== + dependencies: + "@expo/config" "~11.0.13" + "@expo/config-plugins" "~10.1.2" + "@expo/config-types" "^53.0.5" + "@expo/image-utils" "^0.7.6" + "@expo/json-file" "^9.1.5" + "@react-native/normalize-colors" "0.79.6" + debug "^4.3.1" + resolve-from "^5.0.0" + semver "^7.6.0" + xml2js "0.6.0" + "@expo/schema-utils@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@expo/schema-utils/-/schema-utils-0.1.0.tgz#3f7dcfb6c32a03c5535d4748f1fa37f836cd903a" @@ -2502,25 +2518,27 @@ resolved "https://registry.yarnpkg.com/@livekit/react-native-expo-plugin/-/react-native-expo-plugin-1.0.1.tgz#8472299b1b399209463347ed27de7b0f743d700d" integrity sha512-CSPjjzgDDlBH1ZyFyaw7/FW2Ql1S51eUkIxv/vjGwVshn+lUD6eQ9VgfUh7ha84itvjXi9X87FvP0XWKn9CiFQ== -"@livekit/react-native-webrtc@~125.0.11": - version "125.0.11" - resolved "https://registry.yarnpkg.com/@livekit/react-native-webrtc/-/react-native-webrtc-125.0.11.tgz#fb64c6d4b66e664c15a8820aa929acb5584e03bf" - integrity sha512-d8bOH0rBVnyl08urRFcx9+sPCgOdcYj1VQFb0cBN87RRVF9ZdIMq8id6GGEcTv/GBIQPAZbsOcATACneMcX8ww== +"@livekit/react-native-webrtc@~137.0.2": + version "137.0.2" + resolved "https://registry.yarnpkg.com/@livekit/react-native-webrtc/-/react-native-webrtc-137.0.2.tgz#5fbd7876e6768a2247d04ef5653c373d92d74783" + integrity sha512-0aXYATcBraOMDTteKzmfH5ICNHw8xFyMPHmhKg14+94fAGZ2hGjdHZUSkzL14+e508W486aIAmbXipuSQCCJgA== dependencies: base64-js "1.5.1" debug "4.3.4" event-target-shim "6.0.2" -"@livekit/react-native@~2.7.4": - version "2.7.6" - resolved "https://registry.yarnpkg.com/@livekit/react-native/-/react-native-2.7.6.tgz#916ab594890e657c9e5544da713166b68d38800d" - integrity sha512-HWHtGpJwxrcMi5lUI7+8la8FQxf2vvhwq/opRS9mzpgGW+BCTyhabUe8GXtDbHYfbDvs4tix+0L1P2xwDsawbg== +"@livekit/react-native@~2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@livekit/react-native/-/react-native-2.9.1.tgz#1d0d9a40ebecd49e6c088cbe0d62b6380c1ff7ca" + integrity sha512-oN1aWQeAuo3NhhrQRCI/V9upi8PhRQRFyZHBqnU/AlxYFyTKWKGmtVJtJWkGW+zNUF3lEF+nZMnpIHft9aJdqQ== dependencies: "@livekit/components-react" "^2.8.1" array.prototype.at "^1.1.1" + event-target-shim "6.0.2" events "^3.3.0" loglevel "^1.8.0" promise.allsettled "^1.0.5" + react-native-quick-base64 "2.1.1" react-native-url-polyfill "^1.3.0" typed-emitter "^2.1.0" web-streams-polyfill "^4.1.0" @@ -3037,10 +3055,10 @@ resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-11.4.1.tgz#a3c247aceab35f75dd0aa4bfa85d2be5a4508688" integrity sha512-B0BYAkghz3Q2V09BF88RA601XursIEA111tnc2JOaN7axJWmNefmfjZqw/KdSxKZp7CZUuPpjBmz/WCR9uaHYg== -"@react-native/assets-registry@0.79.5": - version "0.79.5" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.79.5.tgz#90a178ec6646a22eb4218285cc2df7fd82603e34" - integrity sha512-N4Kt1cKxO5zgM/BLiyzuuDNquZPiIgfktEQ6TqJ/4nKA8zr4e8KJgU6Tb2eleihDO4E24HmkvGc73naybKRz/w== +"@react-native/assets-registry@0.79.6": + version "0.79.6" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.79.6.tgz#cecc2a1140a9584d590000b951a08a0611ec30c3" + integrity sha512-UVSP1224PWg0X+mRlZNftV5xQwZGfawhivuW8fGgxNK9MS/U84xZ+16lkqcPh1ank6MOt239lIWHQ1S33CHgqA== "@react-native/babel-plugin-codegen@0.79.6": version "0.79.6" @@ -3101,17 +3119,6 @@ babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/codegen@0.79.5": - version "0.79.5" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.79.5.tgz#f0f1f82b2603959b8e23711b55eac3dab6490596" - integrity sha512-FO5U1R525A1IFpJjy+KVznEinAgcs3u7IbnbRJUG9IH/MBXi2lEU2LtN+JarJ81MCfW4V2p0pg6t/3RGHFRrlQ== - dependencies: - glob "^7.1.1" - hermes-parser "0.25.1" - invariant "^2.2.4" - nullthrows "^1.1.1" - yargs "^17.6.2" - "@react-native/codegen@0.79.6": version "0.79.6" resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.79.6.tgz#25e9bb68ce02afcdb01b9b2b0bf8a3a7fd99bf8b" @@ -3125,12 +3132,12 @@ nullthrows "^1.1.1" yargs "^17.6.2" -"@react-native/community-cli-plugin@0.79.5": - version "0.79.5" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.5.tgz#1cf71637f575a322cdcf6f8b5aeb928aed842508" - integrity sha512-ApLO1ARS8JnQglqS3JAHk0jrvB+zNW3dvNJyXPZPoygBpZVbf8sjvqeBiaEYpn8ETbFWddebC4HoQelDndnrrA== +"@react-native/community-cli-plugin@0.79.6": + version "0.79.6" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.6.tgz#6d95bc10b0dff0150f8e971b4b0f0867b8c0c06c" + integrity sha512-ZHVst9vByGsegeaddkD2YbZ6NvYb4n3pD9H7Pit94u+NlByq2uBJghoOjT6EKqg+UVl8tLRdi88cU2pDPwdHqA== dependencies: - "@react-native/dev-middleware" "0.79.5" + "@react-native/dev-middleware" "0.79.6" chalk "^4.0.0" debug "^2.2.0" invariant "^2.2.4" @@ -3139,33 +3146,11 @@ metro-core "^0.82.0" semver "^7.1.3" -"@react-native/debugger-frontend@0.79.5": - version "0.79.5" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.79.5.tgz#76b8d77b62003b4ea99354fe435c01d727b64584" - integrity sha512-WQ49TRpCwhgUYo5/n+6GGykXmnumpOkl4Lr2l2o2buWU9qPOwoiBqJAtmWEXsAug4ciw3eLiVfthn5ufs0VB0A== - "@react-native/debugger-frontend@0.79.6": version "0.79.6" resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.79.6.tgz#ec0ea9c2f140a564d26789a18dc097519f1b9c48" integrity sha512-lIK/KkaH7ueM22bLO0YNaQwZbT/oeqhaghOvmZacaNVbJR1Cdh/XAqjT8FgCS+7PUnbxA8B55NYNKGZG3O2pYw== -"@react-native/dev-middleware@0.79.5": - version "0.79.5" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.79.5.tgz#8c7b2b790943f24e33a21da39a7c3959ea93304b" - integrity sha512-U7r9M/SEktOCP/0uS6jXMHmYjj4ESfYCkNAenBjFjjsRWekiHE+U/vRMeO+fG9gq4UCcBAUISClkQCowlftYBw== - dependencies: - "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.79.5" - chrome-launcher "^0.15.2" - chromium-edge-launcher "^0.2.0" - connect "^3.6.5" - debug "^2.2.0" - invariant "^2.2.4" - nullthrows "^1.1.1" - open "^7.0.3" - serve-static "^1.16.2" - ws "^6.2.3" - "@react-native/dev-middleware@0.79.6": version "0.79.6" resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.79.6.tgz#62a4c0b987e5d100eae3e8c95c58ae1c8abe377a" @@ -3183,15 +3168,15 @@ serve-static "^1.16.2" ws "^6.2.3" -"@react-native/gradle-plugin@0.79.5": - version "0.79.5" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.79.5.tgz#c2dbdf17a2b724b8f4442a01613c847564503813" - integrity sha512-K3QhfFNKiWKF3HsCZCEoWwJPSMcPJQaeqOmzFP4RL8L3nkpgUwn74PfSCcKHxooVpS6bMvJFQOz7ggUZtNVT+A== +"@react-native/gradle-plugin@0.79.6": + version "0.79.6" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.79.6.tgz#02d996aae3df87512c2a56e1f5fefffc883c8a18" + integrity sha512-C5odetI6py3CSELeZEVz+i00M+OJuFZXYnjVD4JyvpLn462GesHRh+Se8mSkU5QSaz9cnpMnyFLJAx05dokWbA== -"@react-native/js-polyfills@0.79.5": - version "0.79.5" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.79.5.tgz#61b6c43832b644669d1f00dbbaa51a079c5b9b4c" - integrity sha512-a2wsFlIhvd9ZqCD5KPRsbCQmbZi6KxhRN++jrqG0FUTEV5vY7MvjjUqDILwJd2ZBZsf7uiDuClCcKqA+EEdbvw== +"@react-native/js-polyfills@0.79.6": + version "0.79.6" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.79.6.tgz#11dab284ace2708f0483833cfff0c9aee81274df" + integrity sha512-6wOaBh1namYj9JlCNgX2ILeGUIwc6OP6MWe3Y5jge7Xz9fVpRqWQk88Q5Y9VrAtTMTcxoX3CvhrfRr3tGtSfQw== "@react-native/normalize-colors@0.79.5": version "0.79.5" @@ -3208,10 +3193,10 @@ resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.89.tgz#b8ac17d1bbccd3ef9a1f921665d04d42cff85976" integrity sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg== -"@react-native/virtualized-lists@0.79.5": - version "0.79.5" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.79.5.tgz#5dbc01dcb4c836d40edcb4034b240a300ee310fb" - integrity sha512-EUPM2rfGNO4cbI3olAbhPkIt3q7MapwCwAJBzUfWlZ/pu0PRNOnMQ1IvaXTf3TpeozXV52K1OdprLEI/kI5eUA== +"@react-native/virtualized-lists@0.79.6": + version "0.79.6" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.79.6.tgz#ab395e3a1edba1c8c564d3a85961f213cc164a99" + integrity sha512-khA/Hrbb+rB68YUHrLubfLgMOD9up0glJhw25UE3Kntj32YDyuO0Tqc81ryNTcCekFKJ8XrAaEjcfPg81zBGPw== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" @@ -5217,10 +5202,10 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axios@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.11.0.tgz#c2ec219e35e414c025b2095e8b8280278478fdb6" - integrity sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA== +axios@^1.12.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" + integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.4" @@ -7602,12 +7587,12 @@ expo-notifications@~0.31.4: expo-application "~6.1.5" expo-constants "~17.1.7" -expo-router@~5.1.5: - version "5.1.5" - resolved "https://registry.yarnpkg.com/expo-router/-/expo-router-5.1.5.tgz#832f6021d05d48a60d6317ea8979b10648736d95" - integrity sha512-VPhS21DPP+riJIUshs/qpb11L/nzmRK7N7mqSFCr/mjpziznYu/qS+BPeQ88akIuXv6QsXipY5UTfYINdV+P0Q== +expo-router@~5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/expo-router/-/expo-router-5.1.7.tgz#ce8d812df91dcbf9d15bb7e8a4bbec63c7ca60b5" + integrity sha512-E7hIqTZs4Cub4sbYPeednfYPi+2cyRGMdqc5IYBJ/vC+WBKoYJ8C9eU13ZLbPz//ZybSo2Dsm7v89uFIlO2Gow== dependencies: - "@expo/metro-runtime" "5.0.4" + "@expo/metro-runtime" "5.0.5" "@expo/schema-utils" "^0.1.0" "@expo/server" "^0.6.3" "@radix-ui/react-slot" "1.2.0" @@ -7672,13 +7657,13 @@ expo-updates-interface@~1.1.0: resolved "https://registry.yarnpkg.com/expo-updates-interface/-/expo-updates-interface-1.1.0.tgz#62497d4647b381da9fdb68868ed180203ae737ef" integrity sha512-DeB+fRe0hUDPZhpJ4X4bFMAItatFBUPjw/TVSbJsaf3Exeami+2qbbJhWkcTMoYHOB73nOIcaYcWXYJnCJXO0w== -expo@~53.0.0: - version "53.0.22" - resolved "https://registry.yarnpkg.com/expo/-/expo-53.0.22.tgz#ff61b6bcdf0855b7b88ca5ca0f622e12cbdb1d0f" - integrity sha512-sJ2I4W/e5iiM4u/wYCe3qmW4D7WPCRqByPDD0hJcdYNdjc9HFFFdO4OAudZVyC/MmtoWZEIH5kTJP1cw9FjzYA== +expo@~53.0.23: + version "53.0.23" + resolved "https://registry.yarnpkg.com/expo/-/expo-53.0.23.tgz#b6fd102ac74537d86f99e87bd26a254a1b560b9b" + integrity sha512-6TOLuNCP3AsSkXBJA5W6U/7wpZUop3Q6BxHMtRD2OOgT7CCPvnYgJdnTzqU+gD1hMfcryD8Ejq9RdHbLduXohg== dependencies: "@babel/runtime" "^7.20.0" - "@expo/cli" "0.24.21" + "@expo/cli" "0.24.22" "@expo/config" "~11.0.13" "@expo/config-plugins" "~10.1.2" "@expo/fingerprint" "0.13.4" @@ -10222,10 +10207,10 @@ listr@^0.14.3: p-map "^2.0.0" rxjs "^6.3.3" -livekit-client@~2.15.2: - version "2.15.2" - resolved "https://registry.yarnpkg.com/livekit-client/-/livekit-client-2.15.2.tgz#0d7f1c9bae26848327773d39c5c3b1f26bc58b38" - integrity sha512-hf0A0JFN7M0iVGZxMfTk6a3cW7TNTVdqxkykjKBweORlqhQX1ITVloh6aLvplLZOxpkUE5ZVLz1DeS3+ERglog== +livekit-client@^2.15.7: + version "2.15.7" + resolved "https://registry.yarnpkg.com/livekit-client/-/livekit-client-2.15.7.tgz#98a63cb259eaf6b54a15fe0376d212c6b37fe06b" + integrity sha512-19m8Q1cvRl5PslRawDUgWXeP8vL8584tX8kiZEJaPZo83U/L6VPS/O7pP06phfJaBWeeV8sAOVtEPlQiZEHtpg== dependencies: "@livekit/mutex" "1.1.1" "@livekit/protocol" "1.39.3" @@ -12132,6 +12117,13 @@ react-native-permissions@^5.4.1: resolved "https://registry.yarnpkg.com/react-native-permissions/-/react-native-permissions-5.4.1.tgz#b147e5901f2f5d847b367f2ba6e60378ebcee90c" integrity sha512-MTou5DVn8IADr7OQjYePJzcxrVNEeODBvSpB8XOt5qBI9ui3HduSBn/KTNZECH/Ph2Y20OnZBMqe6Wp9IryrgQ== +react-native-quick-base64@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-native-quick-base64/-/react-native-quick-base64-2.1.1.tgz#1fa72713e1da4b35e6f1f7b780e8a0328f0d3bf4" + integrity sha512-/L+SaapDLcLcHA3Kj0/cvEhFS/oLXyD6DUXwdckTR/75bzUjqf1FrusUTvJho/lzXnCR1VtBGn+EEvrLmkDTmw== + dependencies: + base64-js "^1.5.1" + react-native-reanimated@~3.17.4: version "3.17.5" resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.17.5.tgz#09ebe3c9e3379c5c0c588b7ab30c131ea29b60f0" @@ -12234,19 +12226,19 @@ react-native-webview@~13.13.1: escape-string-regexp "^4.0.0" invariant "2.2.4" -react-native@0.79.5: - version "0.79.5" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.5.tgz#a91cd92bb282a4f8420fdd64fe3a9434580404b2" - integrity sha512-jVihwsE4mWEHZ9HkO1J2eUZSwHyDByZOqthwnGrVZCh6kTQBCm4v8dicsyDa6p0fpWNE5KicTcpX/XXl0ASJFg== +react-native@0.79.6: + version "0.79.6" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.6.tgz#ee95428f67da2f62ede473eaa6e8a2f4ee40e272" + integrity sha512-kvIWSmf4QPfY41HC25TR285N7Fv0Pyn3DAEK8qRL9dA35usSaxsJkHfw+VqnonqJjXOaoKCEanwudRAJ60TBGA== dependencies: "@jest/create-cache-key-function" "^29.7.0" - "@react-native/assets-registry" "0.79.5" - "@react-native/codegen" "0.79.5" - "@react-native/community-cli-plugin" "0.79.5" - "@react-native/gradle-plugin" "0.79.5" - "@react-native/js-polyfills" "0.79.5" - "@react-native/normalize-colors" "0.79.5" - "@react-native/virtualized-lists" "0.79.5" + "@react-native/assets-registry" "0.79.6" + "@react-native/codegen" "0.79.6" + "@react-native/community-cli-plugin" "0.79.6" + "@react-native/gradle-plugin" "0.79.6" + "@react-native/js-polyfills" "0.79.6" + "@react-native/normalize-colors" "0.79.6" + "@react-native/virtualized-lists" "0.79.6" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0"