{
  "testModules": [
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/components/CommunityStationCard.test.tsx",
      "tests": [
        {
          "name": "should render station details",
          "fullName": "CommunityStationCard should render station details",
          "state": "passed"
        },
        {
          "name": "should display 93 octane status",
          "fullName": "CommunityStationCard should display 93 octane status",
          "state": "passed"
        },
        {
          "name": "should display price when available",
          "fullName": "CommunityStationCard should display price when available",
          "state": "passed"
        },
        {
          "name": "should display status badge",
          "fullName": "CommunityStationCard should display status badge",
          "state": "passed"
        },
        {
          "name": "should show withdraw button for user view",
          "fullName": "CommunityStationCard should show withdraw button for user view",
          "state": "failed",
          "errors": [
            {
              "message": "TestingLibraryElementError: Found multiple elements with the role \"button\"\n\nHere are the matching elements:\n\nIgnored nodes: comments, script, style\n\u001b[36m<button\u001b[39m\n  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-bbrslu-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n  \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n  \u001b[33mtitle\u001b[39m=\u001b[32m\"Get directions\"\u001b[39m\n  \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n\u001b[36m>\u001b[39m\n  \u001b[36m<svg\u001b[39m\n    \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n    \u001b[33mdata-testid\u001b[39m=\u001b[32m\"DirectionsIcon\"\u001b[39m\n    \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n    \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n  \u001b[36m>\u001b[39m\n    \u001b[36m<path\u001b[39m\n      \u001b[33md\u001b[39m=\u001b[32m\"m21.41 10.59-7.99-8c-.78-.78-2.05-.78-2.83 0l-8.01 8c-.78.78-.78 2.05 0 2.83l8.01 8c.78.78 2.05.78 2.83 0l7.99-8c.79-.79.79-2.05 0-2.83M13.5 14.5V12H10v3H8v-4c0-.55.45-1 1-1h4.5V7.5L17 11z\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n  \u001b[36m</svg>\u001b[39m\n\u001b[36m</button>\u001b[39m\n\nIgnored nodes: comments, script, style\n\u001b[36m<button\u001b[39m\n  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-b9iu8-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n  \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n  \u001b[33mtitle\u001b[39m=\u001b[32m\"Premium 93 status\"\u001b[39m\n  \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n\u001b[36m>\u001b[39m\n  \u001b[36m<svg\u001b[39m\n    \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n    \u001b[33mdata-testid\u001b[39m=\u001b[32m\"LocalGasStationIcon\"\u001b[39m\n    \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n    \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n  \u001b[36m>\u001b[39m\n    \u001b[36m<path\u001b[39m\n      \u001b[33md\u001b[39m=\u001b[32m\"m19.77 7.23.01-.01-3.72-3.72L15 4.56l2.11 2.11c-.94.36-1.61 1.26-1.61 2.33 0 1.38 1.12 2.5 2.5 2.5.36 0 .69-.08 1-.21v7.21c0 .55-.45 1-1 1s-1-.45-1-1V14c0-1.1-.9-2-2-2h-1V5c0-1.1-.9-2-2-2H6c-1.1 0-2 .9-2 2v16h10v-7.5h1.5v5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V9c0-.69-.28-1.32-.73-1.77M12 10H6V5h6zm6 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n  \u001b[36m</svg>\u001b[39m\n\u001b[36m</button>\u001b[39m\n\nIgnored nodes: comments, script, style\n\u001b[36m<button\u001b[39m\n  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-1ka29m2-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n  \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n  \u001b[33mtitle\u001b[39m=\u001b[32m\"Add to favorites\"\u001b[39m\n  \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n\u001b[36m>\u001b[39m\n  \u001b[36m<svg\u001b[39m\n    \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n    \u001b[33mdata-testid\u001b[39m=\u001b[32m\"BookmarkBorderIcon\"\u001b[39m\n    \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n    \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n  \u001b[36m>\u001b[39m\n    \u001b[36m<path\u001b[39m\n      \u001b[33md\u001b[39m=\u001b[32m\"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2m0 15-5-2.18L7 18V5h10z\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n  \u001b[36m</svg>\u001b[39m\n\u001b[36m</button>\u001b[39m\n\n(If this is intentional, then use the `*AllBy*` variant of the query (like `queryAllByText`, `getAllByText`, or `findAllByText`)).\n\nIgnored nodes: comments, script, style\n\u001b[36m<body>\u001b[39m\n  \u001b[36m<div>\u001b[39m\n    \u001b[36m<div\u001b[39m\n      \u001b[33mclass\u001b[39m=\u001b[32m\"MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root css-1qjf81r-MuiPaper-root-MuiCard-root\"\u001b[39m\n      \u001b[33mstyle\u001b[39m=\u001b[32m\"--Paper-shadow: 0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12);\"\u001b[39m\n    \u001b[36m>\u001b[39m\n      \u001b[36m<div\u001b[39m\n        \u001b[33mclass\u001b[39m=\u001b[32m\"MuiCardContent-root css-x4lmbv-MuiCardContent-root\"\u001b[39m\n      \u001b[36m>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-21y1cj\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<div\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-h6 css-chhebq-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mShell Downtown\u001b[0m\n          \u001b[36m</div>\u001b[39m\n          \u001b[36m<div\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-root MuiChip-filled MuiChip-sizeSmall MuiChip-colorSuccess MuiChip-filledSuccess css-1fiq0pv-MuiChip-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<span\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-label MuiChip-labelSmall css-eccknh-MuiChip-label\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[0mapproved\u001b[0m\n            \u001b[36m</span>\u001b[39m\n          \u001b[36m</div>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<p\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 css-1yqh81p-MuiTypography-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[0m123 Main St\u001b[0m\n        \u001b[36m</p>\u001b[39m\n        \u001b[36m<p\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 css-do3ns5-MuiTypography-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[0mDenver, CO, 80202\u001b[0m\n        \u001b[36m</p>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-root MuiChip-outlined MuiChip-sizeSmall MuiChip-colorDefault MuiChip-outlinedDefault css-1wkvewh-MuiChip-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-label MuiChip-labelSmall css-19m61dl-MuiChip-label\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mBrand: Shell\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-root MuiChip-filled MuiChip-sizeSmall MuiChip-colorSuccess MuiChip-filledSuccess css-1t3caiy-MuiChip-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-label MuiChip-labelSmall css-eccknh-MuiChip-label\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0m93 Octane · w/ Ethanol\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-root MuiChip-outlined MuiChip-sizeSmall MuiChip-colorDefault MuiChip-outlinedDefault css-1wkvewh-MuiChip-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-label MuiChip-labelSmall css-19m61dl-MuiChip-label\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0m$3.599/gal\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-brgqcg\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-829dqb-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mNotes:\u001b[0m\n          \u001b[36m</span>\u001b[39m\n          \u001b[36m<p\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 css-7ctihp-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mGood quality fuel\u001b[0m\n          \u001b[36m</p>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-14kkhip\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-1jkzbat-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mSubmitted by: \u001b[0m\n            \u001b[0muser@example.com\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n      \u001b[36m</div>\u001b[39m\n      \u001b[36m<div\u001b[39m\n        \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-dre66w\"\u001b[39m\n      \u001b[36m>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-dvxtzn\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<button\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-bbrslu-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n            \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n            \u001b[33mtitle\u001b[39m=\u001b[32m\"Get directions\"\u001b[39m\n            \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<svg\u001b[39m\n              \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n              \u001b[33mdata-testid\u001b[39m=\u001b[32m\"DirectionsIcon\"\u001b[39m\n              \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n              \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[36m<path\u001b[39m\n                \u001b[33md\u001b[39m=\u001b[32m\"m21.41 10.59-7.99-8c-.78-.78-2.05-.78-2.83 0l-8.01 8c-.78.78-.78 2.05 0 2.83l8.01 8c.78.78 2.05.78 2.83 0l7.99-8c.79-.79.79-2.05 0-2.83M13.5 14.5V12H10v3H8v-4c0-.55.45-1 1-1h4.5V7.5L17 11z\"\u001b[39m\n              \u001b[36m/>\u001b[39m\n            \u001b[36m</svg>\u001b[39m\n          \u001b[36m</button>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-kxuwnm-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mNavigate\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-dvxtzn\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<button\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-b9iu8-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n            \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n            \u001b[33mtitle\u001b[39m=\u001b[32m\"Premium 93 status\"\u001b[39m\n            \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<svg\u001b[39m\n              \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n              \u001b[33mdata-testid\u001b[39m=\u001b[32m\"LocalGasStationIcon\"\u001b[39m\n              \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n              \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[36m<path\u001b[39m\n                \u001b[33md\u001b[39m=\u001b[32m\"m19.77 7.23.01-.01-3.72-3.72L15 4.56l2.11 2.11c-.94.36-1.61 1.26-1.61 2.33 0 1.38 1.12 2.5 2.5 2.5.36 0 .69-.08 1-.21v7.21c0 .55-.45 1-1 1s-1-.45-1-1V14c0-1.1-.9-2-2-2h-1V5c0-1.1-.9-2-2-2H6c-1.1 0-2 .9-2 2v16h10v-7.5h1.5v5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V9c0-.69-.28-1.32-.73-1.77M12 10H6V5h6zm6 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1\"\u001b[39m\n              \u001b[36m/>\u001b[39m\n            \u001b[36m</svg>\u001b[39m\n          \u001b[36m</button>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-182y4m6-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mPremium 93\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-dvxtzn\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<button\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-1ka29m2-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n            \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n            \u001b[33mtitle\u001b[39m=\u001b[32m\"Add to favorites\"\u001b[39m\n            \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<svg\u001b[39m\n              \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n              \u001b[33mdata-testid\u001b[39m=\u001b[32m\"BookmarkBorderIcon\"\u001b[39m\n              \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n              \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[36m<path\u001b[39m\n                \u001b[33md\u001b[39m=\u001b[32m\"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2m0 15-5-2.18L7 18V5h10z\"\u001b[39m\n              \u001b[36m/>\u001b[39m\n            \u001b[36m</svg>\u001b[39m\n          \u001b[36m</button>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-kxuwnm-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mFavorite\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n      \u001b[36m</div>\u001b[39m\n    \u001b[36m</div>\u001b[39m\n  \u001b[36m</div>\u001b[39m\n\u001b[36m</body>\u001b[39m\n    at Object.getElementError (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/config.js:37:19)\n    at getElementError (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:20:35)\n    at getMultipleElementsFoundError (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:23:10)\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:55:13\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:95:19\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/components/CommunityStationCard.test.tsx:66:19)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)",
              "name": "TestingLibraryElementError"
            }
          ]
        },
        {
          "name": "should show approve and reject buttons for admin",
          "fullName": "CommunityStationCard should show approve and reject buttons for admin",
          "state": "passed"
        },
        {
          "name": "should call onWithdraw when withdraw button is clicked",
          "fullName": "CommunityStationCard should call onWithdraw when withdraw button is clicked",
          "state": "failed",
          "errors": [
            {
              "message": "TestingLibraryElementError: Found multiple elements with the role \"button\"\n\nHere are the matching elements:\n\nIgnored nodes: comments, script, style\n\u001b[36m<button\u001b[39m\n  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-bbrslu-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n  \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n  \u001b[33mtitle\u001b[39m=\u001b[32m\"Get directions\"\u001b[39m\n  \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n\u001b[36m>\u001b[39m\n  \u001b[36m<svg\u001b[39m\n    \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n    \u001b[33mdata-testid\u001b[39m=\u001b[32m\"DirectionsIcon\"\u001b[39m\n    \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n    \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n  \u001b[36m>\u001b[39m\n    \u001b[36m<path\u001b[39m\n      \u001b[33md\u001b[39m=\u001b[32m\"m21.41 10.59-7.99-8c-.78-.78-2.05-.78-2.83 0l-8.01 8c-.78.78-.78 2.05 0 2.83l8.01 8c.78.78 2.05.78 2.83 0l7.99-8c.79-.79.79-2.05 0-2.83M13.5 14.5V12H10v3H8v-4c0-.55.45-1 1-1h4.5V7.5L17 11z\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n  \u001b[36m</svg>\u001b[39m\n\u001b[36m</button>\u001b[39m\n\nIgnored nodes: comments, script, style\n\u001b[36m<button\u001b[39m\n  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-b9iu8-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n  \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n  \u001b[33mtitle\u001b[39m=\u001b[32m\"Premium 93 status\"\u001b[39m\n  \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n\u001b[36m>\u001b[39m\n  \u001b[36m<svg\u001b[39m\n    \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n    \u001b[33mdata-testid\u001b[39m=\u001b[32m\"LocalGasStationIcon\"\u001b[39m\n    \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n    \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n  \u001b[36m>\u001b[39m\n    \u001b[36m<path\u001b[39m\n      \u001b[33md\u001b[39m=\u001b[32m\"m19.77 7.23.01-.01-3.72-3.72L15 4.56l2.11 2.11c-.94.36-1.61 1.26-1.61 2.33 0 1.38 1.12 2.5 2.5 2.5.36 0 .69-.08 1-.21v7.21c0 .55-.45 1-1 1s-1-.45-1-1V14c0-1.1-.9-2-2-2h-1V5c0-1.1-.9-2-2-2H6c-1.1 0-2 .9-2 2v16h10v-7.5h1.5v5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V9c0-.69-.28-1.32-.73-1.77M12 10H6V5h6zm6 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n  \u001b[36m</svg>\u001b[39m\n\u001b[36m</button>\u001b[39m\n\nIgnored nodes: comments, script, style\n\u001b[36m<button\u001b[39m\n  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-1ka29m2-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n  \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n  \u001b[33mtitle\u001b[39m=\u001b[32m\"Add to favorites\"\u001b[39m\n  \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n\u001b[36m>\u001b[39m\n  \u001b[36m<svg\u001b[39m\n    \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n    \u001b[33mdata-testid\u001b[39m=\u001b[32m\"BookmarkBorderIcon\"\u001b[39m\n    \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n    \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n  \u001b[36m>\u001b[39m\n    \u001b[36m<path\u001b[39m\n      \u001b[33md\u001b[39m=\u001b[32m\"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2m0 15-5-2.18L7 18V5h10z\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n  \u001b[36m</svg>\u001b[39m\n\u001b[36m</button>\u001b[39m\n\n(If this is intentional, then use the `*AllBy*` variant of the query (like `queryAllByText`, `getAllByText`, or `findAllByText`)).\n\nIgnored nodes: comments, script, style\n\u001b[36m<body>\u001b[39m\n  \u001b[36m<div>\u001b[39m\n    \u001b[36m<div\u001b[39m\n      \u001b[33mclass\u001b[39m=\u001b[32m\"MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root css-1qjf81r-MuiPaper-root-MuiCard-root\"\u001b[39m\n      \u001b[33mstyle\u001b[39m=\u001b[32m\"--Paper-shadow: 0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12);\"\u001b[39m\n    \u001b[36m>\u001b[39m\n      \u001b[36m<div\u001b[39m\n        \u001b[33mclass\u001b[39m=\u001b[32m\"MuiCardContent-root css-x4lmbv-MuiCardContent-root\"\u001b[39m\n      \u001b[36m>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-21y1cj\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<div\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-h6 css-chhebq-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mShell Downtown\u001b[0m\n          \u001b[36m</div>\u001b[39m\n          \u001b[36m<div\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-root MuiChip-filled MuiChip-sizeSmall MuiChip-colorSuccess MuiChip-filledSuccess css-1fiq0pv-MuiChip-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<span\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-label MuiChip-labelSmall css-eccknh-MuiChip-label\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[0mapproved\u001b[0m\n            \u001b[36m</span>\u001b[39m\n          \u001b[36m</div>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<p\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 css-1yqh81p-MuiTypography-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[0m123 Main St\u001b[0m\n        \u001b[36m</p>\u001b[39m\n        \u001b[36m<p\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 css-do3ns5-MuiTypography-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[0mDenver, CO, 80202\u001b[0m\n        \u001b[36m</p>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-root MuiChip-outlined MuiChip-sizeSmall MuiChip-colorDefault MuiChip-outlinedDefault css-1wkvewh-MuiChip-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-label MuiChip-labelSmall css-19m61dl-MuiChip-label\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mBrand: Shell\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-root MuiChip-filled MuiChip-sizeSmall MuiChip-colorSuccess MuiChip-filledSuccess css-1t3caiy-MuiChip-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-label MuiChip-labelSmall css-eccknh-MuiChip-label\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0m93 Octane · w/ Ethanol\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-root MuiChip-outlined MuiChip-sizeSmall MuiChip-colorDefault MuiChip-outlinedDefault css-1wkvewh-MuiChip-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiChip-label MuiChip-labelSmall css-19m61dl-MuiChip-label\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0m$3.599/gal\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-brgqcg\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-829dqb-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mNotes:\u001b[0m\n          \u001b[36m</span>\u001b[39m\n          \u001b[36m<p\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 css-7ctihp-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mGood quality fuel\u001b[0m\n          \u001b[36m</p>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-14kkhip\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-1jkzbat-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mSubmitted by: \u001b[0m\n            \u001b[0muser@example.com\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n      \u001b[36m</div>\u001b[39m\n      \u001b[36m<div\u001b[39m\n        \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-dre66w\"\u001b[39m\n      \u001b[36m>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-dvxtzn\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<button\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-bbrslu-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n            \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n            \u001b[33mtitle\u001b[39m=\u001b[32m\"Get directions\"\u001b[39m\n            \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<svg\u001b[39m\n              \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n              \u001b[33mdata-testid\u001b[39m=\u001b[32m\"DirectionsIcon\"\u001b[39m\n              \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n              \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[36m<path\u001b[39m\n                \u001b[33md\u001b[39m=\u001b[32m\"m21.41 10.59-7.99-8c-.78-.78-2.05-.78-2.83 0l-8.01 8c-.78.78-.78 2.05 0 2.83l8.01 8c.78.78 2.05.78 2.83 0l7.99-8c.79-.79.79-2.05 0-2.83M13.5 14.5V12H10v3H8v-4c0-.55.45-1 1-1h4.5V7.5L17 11z\"\u001b[39m\n              \u001b[36m/>\u001b[39m\n            \u001b[36m</svg>\u001b[39m\n          \u001b[36m</button>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-kxuwnm-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mNavigate\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-dvxtzn\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<button\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-b9iu8-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n            \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n            \u001b[33mtitle\u001b[39m=\u001b[32m\"Premium 93 status\"\u001b[39m\n            \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<svg\u001b[39m\n              \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n              \u001b[33mdata-testid\u001b[39m=\u001b[32m\"LocalGasStationIcon\"\u001b[39m\n              \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n              \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[36m<path\u001b[39m\n                \u001b[33md\u001b[39m=\u001b[32m\"m19.77 7.23.01-.01-3.72-3.72L15 4.56l2.11 2.11c-.94.36-1.61 1.26-1.61 2.33 0 1.38 1.12 2.5 2.5 2.5.36 0 .69-.08 1-.21v7.21c0 .55-.45 1-1 1s-1-.45-1-1V14c0-1.1-.9-2-2-2h-1V5c0-1.1-.9-2-2-2H6c-1.1 0-2 .9-2 2v16h10v-7.5h1.5v5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V9c0-.69-.28-1.32-.73-1.77M12 10H6V5h6zm6 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1\"\u001b[39m\n              \u001b[36m/>\u001b[39m\n            \u001b[36m</svg>\u001b[39m\n          \u001b[36m</button>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-182y4m6-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mPremium 93\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-dvxtzn\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<button\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge css-1ka29m2-MuiButtonBase-root-MuiIconButton-root\"\u001b[39m\n            \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n            \u001b[33mtitle\u001b[39m=\u001b[32m\"Add to favorites\"\u001b[39m\n            \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<svg\u001b[39m\n              \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1umw9bq-MuiSvgIcon-root\"\u001b[39m\n              \u001b[33mdata-testid\u001b[39m=\u001b[32m\"BookmarkBorderIcon\"\u001b[39m\n              \u001b[33mfocusable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n              \u001b[33mviewBox\u001b[39m=\u001b[32m\"0 0 24 24\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[36m<path\u001b[39m\n                \u001b[33md\u001b[39m=\u001b[32m\"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2m0 15-5-2.18L7 18V5h10z\"\u001b[39m\n              \u001b[36m/>\u001b[39m\n            \u001b[36m</svg>\u001b[39m\n          \u001b[36m</button>\u001b[39m\n          \u001b[36m<span\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-caption css-kxuwnm-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mFavorite\u001b[0m\n          \u001b[36m</span>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n      \u001b[36m</div>\u001b[39m\n    \u001b[36m</div>\u001b[39m\n  \u001b[36m</div>\u001b[39m\n\u001b[36m</body>\u001b[39m\n    at Object.getElementError (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/config.js:37:19)\n    at getElementError (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:20:35)\n    at getMultipleElementsFoundError (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:23:10)\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:55:13\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:95:19\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/components/CommunityStationCard.test.tsx:94:35)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)",
              "name": "TestingLibraryElementError"
            }
          ]
        },
        {
          "name": "should handle rejection with reason",
          "fullName": "CommunityStationCard should handle rejection with reason",
          "state": "passed"
        },
        {
          "name": "should work on mobile viewport",
          "fullName": "CommunityStationCard should work on mobile viewport",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/AdminSkeleton.test.tsx",
      "tests": [
        {
          "name": "should render default number of rows",
          "fullName": "AdminSkeleton SkeletonRow should render default number of rows",
          "state": "passed"
        },
        {
          "name": "should render specified number of rows",
          "fullName": "AdminSkeleton SkeletonRow should render specified number of rows",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(received).toHaveLength(expected)\n\nExpected length: 15\nReceived length: 20\nReceived object: [<span class=\"MuiSkeleton-root MuiSkeleton-rectangular MuiSkeleton-pulse css-3sr0vz-MuiSkeleton-root\" style=\"width: 40px; height: 40px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-text MuiSkeleton-pulse css-kkcbhd-MuiSkeleton-root\" style=\"width: 60%; height: 24px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-text MuiSkeleton-pulse css-kkcbhd-MuiSkeleton-root\" style=\"width: 40%; height: 20px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-rectangular MuiSkeleton-pulse css-3sr0vz-MuiSkeleton-root\" style=\"width: 80px; height: 32px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-rectangular MuiSkeleton-pulse css-3sr0vz-MuiSkeleton-root\" style=\"width: 40px; height: 40px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-text MuiSkeleton-pulse css-kkcbhd-MuiSkeleton-root\" style=\"width: 60%; height: 24px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-text MuiSkeleton-pulse css-kkcbhd-MuiSkeleton-root\" style=\"width: 40%; height: 20px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-rectangular MuiSkeleton-pulse css-3sr0vz-MuiSkeleton-root\" style=\"width: 80px; height: 32px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-rectangular MuiSkeleton-pulse css-3sr0vz-MuiSkeleton-root\" style=\"width: 40px; height: 40px;\" />, <span class=\"MuiSkeleton-root MuiSkeleton-text MuiSkeleton-pulse css-kkcbhd-MuiSkeleton-root\" style=\"width: 60%; height: 24px;\" />, …]\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/AdminSkeleton.test.tsx:20:63)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        },
        {
          "name": "should render default number of cards",
          "fullName": "AdminSkeleton SkeletonCard should render default number of cards",
          "state": "passed"
        },
        {
          "name": "should render specified number of cards",
          "fullName": "AdminSkeleton SkeletonCard should render specified number of cards",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/shared-minimal/components/VehicleLimitDialog.test.tsx",
      "tests": [
        {
          "name": "renders when open",
          "fullName": "VehicleLimitDialog Dialog rendering renders when open",
          "state": "passed"
        },
        {
          "name": "does not render when closed",
          "fullName": "VehicleLimitDialog Dialog rendering does not render when closed",
          "state": "passed"
        },
        {
          "name": "displays current count and limit",
          "fullName": "VehicleLimitDialog Props display displays current count and limit",
          "state": "passed"
        },
        {
          "name": "displays free tier upgrade prompt",
          "fullName": "VehicleLimitDialog Props display displays free tier upgrade prompt",
          "state": "passed"
        },
        {
          "name": "displays pro tier upgrade prompt",
          "fullName": "VehicleLimitDialog Props display displays pro tier upgrade prompt",
          "state": "passed"
        },
        {
          "name": "shows tier chips for free user",
          "fullName": "VehicleLimitDialog Props display shows tier chips for free user",
          "state": "passed"
        },
        {
          "name": "shows tier chips for pro user",
          "fullName": "VehicleLimitDialog Props display shows tier chips for pro user",
          "state": "passed"
        },
        {
          "name": "calls onClose when \"Maybe Later\" is clicked",
          "fullName": "VehicleLimitDialog User interactions calls onClose when \"Maybe Later\" is clicked",
          "state": "passed"
        },
        {
          "name": "calls onClose when \"Upgrade (Coming Soon)\" is clicked",
          "fullName": "VehicleLimitDialog User interactions calls onClose when \"Upgrade (Coming Soon)\" is clicked",
          "state": "passed"
        },
        {
          "name": "renders fullscreen on mobile",
          "fullName": "VehicleLimitDialog Mobile responsiveness renders fullscreen on mobile",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(received).toBeInTheDocument()\n\nreceived value must be an HTMLElement or an SVGElement.\nReceived has value: null\n    at __EXTERNAL_MATCHER_TRAP__ (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/expect/build/index.js:325:30)\n    at Object.throwingMatcher [as toBeInTheDocument] (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/expect/build/index.js:326:15)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/shared-minimal/components/VehicleLimitDialog.test.tsx:185:22)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        },
        {
          "name": "shows close button on mobile",
          "fullName": "VehicleLimitDialog Mobile responsiveness shows close button on mobile",
          "state": "passed"
        },
        {
          "name": "hides close button on desktop",
          "fullName": "VehicleLimitDialog Mobile responsiveness hides close button on desktop",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/components/DocumentCardMetadata.test.tsx",
      "tests": [
        {
          "name": "displays expiration date",
          "fullName": "DocumentCardMetadata insurance documents displays expiration date",
          "state": "passed"
        },
        {
          "name": "displays policy number",
          "fullName": "DocumentCardMetadata insurance documents displays policy number",
          "state": "passed"
        },
        {
          "name": "displays insurance company",
          "fullName": "DocumentCardMetadata insurance documents displays insurance company",
          "state": "passed"
        },
        {
          "name": "limits to 3 fields in card variant",
          "fullName": "DocumentCardMetadata insurance documents limits to 3 fields in card variant",
          "state": "passed"
        },
        {
          "name": "shows all fields in detail variant",
          "fullName": "DocumentCardMetadata insurance documents shows all fields in detail variant",
          "state": "passed"
        },
        {
          "name": "displays expiration date",
          "fullName": "DocumentCardMetadata registration documents displays expiration date",
          "state": "passed"
        },
        {
          "name": "displays license plate",
          "fullName": "DocumentCardMetadata registration documents displays license plate",
          "state": "passed"
        },
        {
          "name": "shows cost in detail variant only",
          "fullName": "DocumentCardMetadata registration documents shows cost in detail variant only",
          "state": "passed"
        },
        {
          "name": "displays issued date if set",
          "fullName": "DocumentCardMetadata manual documents displays issued date if set",
          "state": "passed"
        },
        {
          "name": "shows notes preview in detail variant only",
          "fullName": "DocumentCardMetadata manual documents shows notes preview in detail variant only",
          "state": "passed"
        },
        {
          "name": "truncates long notes in detail variant",
          "fullName": "DocumentCardMetadata manual documents truncates long notes in detail variant",
          "state": "passed"
        },
        {
          "name": "returns null when no metadata to display",
          "fullName": "DocumentCardMetadata empty states returns null when no metadata to display",
          "state": "passed"
        },
        {
          "name": "handles missing details gracefully",
          "fullName": "DocumentCardMetadata empty states handles missing details gracefully",
          "state": "passed"
        },
        {
          "name": "uses text-xs for mobile variant",
          "fullName": "DocumentCardMetadata variant styling uses text-xs for mobile variant",
          "state": "passed"
        },
        {
          "name": "uses text-sm for card variant",
          "fullName": "DocumentCardMetadata variant styling uses text-sm for card variant",
          "state": "passed"
        },
        {
          "name": "uses grid layout for detail variant",
          "fullName": "DocumentCardMetadata variant styling uses grid layout for detail variant",
          "state": "passed"
        },
        {
          "name": "formats premium correctly",
          "fullName": "DocumentCardMetadata currency formatting formats premium correctly",
          "state": "passed"
        },
        {
          "name": "handles string numbers",
          "fullName": "DocumentCardMetadata currency formatting handles string numbers",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/dashboard/components/__tests__/DashboardScreen.test.tsx",
      "tests": [
        {
          "name": "renders vehicle roster cards",
          "fullName": "DashboardScreen renders vehicle roster cards",
          "state": "passed"
        },
        {
          "name": "renders empty state when 0 vehicles",
          "fullName": "DashboardScreen renders empty state when 0 vehicles",
          "state": "passed"
        },
        {
          "name": "renders loading skeletons when loading",
          "fullName": "DashboardScreen renders loading skeletons when loading",
          "state": "passed"
        },
        {
          "name": "renders \"Your Fleet\" heading",
          "fullName": "DashboardScreen renders \"Your Fleet\" heading",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/BulkActionDialog.test.tsx",
      "tests": [
        {
          "name": "should render dialog when open",
          "fullName": "BulkActionDialog should render dialog when open",
          "state": "passed"
        },
        {
          "name": "should display list of items",
          "fullName": "BulkActionDialog should display list of items",
          "state": "passed"
        },
        {
          "name": "should call onConfirm when confirm button clicked",
          "fullName": "BulkActionDialog should call onConfirm when confirm button clicked",
          "state": "passed"
        },
        {
          "name": "should call onCancel when cancel button clicked",
          "fullName": "BulkActionDialog should call onCancel when cancel button clicked",
          "state": "passed"
        },
        {
          "name": "should disable buttons when loading",
          "fullName": "BulkActionDialog should disable buttons when loading",
          "state": "failed",
          "errors": [
            {
              "message": "TestingLibraryElementError: Unable to find an accessible element with the role \"button\" and name `/confirm/i`\n\nHere are the accessible roles:\n\n  presentation:\n\n  Name \"\":\n  \u001b[36m<div\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiDialog-root MuiModal-root css-1424xw8-MuiModal-root-MuiDialog-root\"\u001b[39m\n    \u001b[33mrole\u001b[39m=\u001b[32m\"presentation\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  Name \"\":\n  \u001b[36m<div\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiDialog-container MuiDialog-scrollPaper css-19do60a-MuiDialog-container\"\u001b[39m\n    \u001b[33mrole\u001b[39m=\u001b[32m\"presentation\"\u001b[39m\n    \u001b[33mstyle\u001b[39m=\u001b[32m\"opacity: 1; webkit-transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\"\u001b[39m\n    \u001b[33mtabindex\u001b[39m=\u001b[32m\"-1\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  --------------------------------------------------\n  dialog:\n\n  Name \"Delete Items?\":\n  \u001b[36m<div\u001b[39m\n    \u001b[33maria-labelledby\u001b[39m=\u001b[32m\"bulk-action-dialog-title\"\u001b[39m\n    \u001b[33maria-modal\u001b[39m=\u001b[32m\"true\"\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation24 MuiDialog-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm MuiDialog-paperFullWidth css-16htz67-MuiPaper-root-MuiDialog-paper\"\u001b[39m\n    \u001b[33mrole\u001b[39m=\u001b[32m\"dialog\"\u001b[39m\n    \u001b[33mstyle\u001b[39m=\u001b[32m\"--Paper-shadow: 0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12);\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  --------------------------------------------------\n  heading:\n\n  Name \"Delete Items?\":\n  \u001b[36m<h2\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-h6 MuiDialogTitle-root css-rvoa5x-MuiTypography-root-MuiDialogTitle-root\"\u001b[39m\n    \u001b[33mid\u001b[39m=\u001b[32m\"bulk-action-dialog-title\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  --------------------------------------------------\n  paragraph:\n\n  Name \"\":\n  \u001b[36m<p\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body1 css-9ebprp-MuiTypography-root\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  Name \"\":\n  \u001b[36m<p\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 MuiListItemText-primary css-7ctihp-MuiTypography-root\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  Name \"\":\n  \u001b[36m<p\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 MuiListItemText-primary css-7ctihp-MuiTypography-root\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  Name \"\":\n  \u001b[36m<p\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 MuiListItemText-primary css-7ctihp-MuiTypography-root\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  --------------------------------------------------\n  list:\n\n  Name \"\":\n  \u001b[36m<ul\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiList-root MuiList-padding MuiList-dense css-b7dj7n-MuiList-root\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  --------------------------------------------------\n  listitem:\n\n  Name \"\":\n  \u001b[36m<li\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItem-root MuiListItem-dense MuiListItem-gutters MuiListItem-padding css-qyw6ft-MuiListItem-root\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  Name \"\":\n  \u001b[36m<li\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItem-root MuiListItem-dense MuiListItem-gutters MuiListItem-padding css-qyw6ft-MuiListItem-root\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  Name \"\":\n  \u001b[36m<li\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItem-root MuiListItem-dense MuiListItem-gutters MuiListItem-padding css-qyw6ft-MuiListItem-root\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  --------------------------------------------------\n  button:\n\n  Name \"Cancel\":\n  \u001b[36m<button\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary Mui-disabled MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-o2na8-MuiButtonBase-root-MuiButton-root\"\u001b[39m\n    \u001b[33mdisabled\u001b[39m=\u001b[32m\"\"\u001b[39m\n    \u001b[33mtabindex\u001b[39m=\u001b[32m\"-1\"\u001b[39m\n    \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  Name \"\":\n  \u001b[36m<button\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedError MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorError Mui-disabled MuiButton-root MuiButton-contained MuiButton-containedError MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorError css-1gn3f0d-MuiButtonBase-root-MuiButton-root\"\u001b[39m\n    \u001b[33mdisabled\u001b[39m=\u001b[32m\"\"\u001b[39m\n    \u001b[33mtabindex\u001b[39m=\u001b[32m\"-1\"\u001b[39m\n    \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  --------------------------------------------------\n  progressbar:\n\n  Name \"\":\n  \u001b[36m<span\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-gxw4l9-MuiCircularProgress-root\"\u001b[39m\n    \u001b[33mrole\u001b[39m=\u001b[32m\"progressbar\"\u001b[39m\n    \u001b[33mstyle\u001b[39m=\u001b[32m\"width: 24px; height: 24px;\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n\n  --------------------------------------------------\n\nIgnored nodes: comments, script, style\n\u001b[36m<body\u001b[39m\n  \u001b[33mstyle\u001b[39m=\u001b[32m\"padding-right: 1024px; overflow: hidden;\"\u001b[39m\n\u001b[36m>\u001b[39m\n  \u001b[36m<div\u001b[39m\n    \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n  \u001b[36m/>\u001b[39m\n  \u001b[36m<div\u001b[39m\n    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiDialog-root MuiModal-root css-1424xw8-MuiModal-root-MuiDialog-root\"\u001b[39m\n    \u001b[33mrole\u001b[39m=\u001b[32m\"presentation\"\u001b[39m\n  \u001b[36m>\u001b[39m\n    \u001b[36m<div\u001b[39m\n      \u001b[33maria-hidden\u001b[39m=\u001b[32m\"true\"\u001b[39m\n      \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBackdrop-root MuiModal-backdrop css-1cennmq-MuiBackdrop-root-MuiDialog-backdrop\"\u001b[39m\n      \u001b[33mstyle\u001b[39m=\u001b[32m\"opacity: 1; webkit-transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n    \u001b[36m<div\u001b[39m\n      \u001b[33mdata-testid\u001b[39m=\u001b[32m\"sentinelStart\"\u001b[39m\n      \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n    \u001b[36m<div\u001b[39m\n      \u001b[33mclass\u001b[39m=\u001b[32m\"MuiDialog-container MuiDialog-scrollPaper css-19do60a-MuiDialog-container\"\u001b[39m\n      \u001b[33mrole\u001b[39m=\u001b[32m\"presentation\"\u001b[39m\n      \u001b[33mstyle\u001b[39m=\u001b[32m\"opacity: 1; webkit-transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\"\u001b[39m\n      \u001b[33mtabindex\u001b[39m=\u001b[32m\"-1\"\u001b[39m\n    \u001b[36m>\u001b[39m\n      \u001b[36m<div\u001b[39m\n        \u001b[33maria-labelledby\u001b[39m=\u001b[32m\"bulk-action-dialog-title\"\u001b[39m\n        \u001b[33maria-modal\u001b[39m=\u001b[32m\"true\"\u001b[39m\n        \u001b[33mclass\u001b[39m=\u001b[32m\"MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation24 MuiDialog-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm MuiDialog-paperFullWidth css-16htz67-MuiPaper-root-MuiDialog-paper\"\u001b[39m\n        \u001b[33mrole\u001b[39m=\u001b[32m\"dialog\"\u001b[39m\n        \u001b[33mstyle\u001b[39m=\u001b[32m\"--Paper-shadow: 0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12);\"\u001b[39m\n      \u001b[36m>\u001b[39m\n        \u001b[36m<h2\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-h6 MuiDialogTitle-root css-rvoa5x-MuiTypography-root-MuiDialogTitle-root\"\u001b[39m\n          \u001b[33mid\u001b[39m=\u001b[32m\"bulk-action-dialog-title\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[0mDelete Items?\u001b[0m\n        \u001b[36m</h2>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiDialogContent-root css-kw13he-MuiDialogContent-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<p\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body1 css-9ebprp-MuiTypography-root\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mThis action cannot be undone.\u001b[0m\n          \u001b[36m</p>\u001b[39m\n          \u001b[36m<div\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiBox-root css-1nkluan\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<ul\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiList-root MuiList-padding MuiList-dense css-b7dj7n-MuiList-root\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[36m<li\u001b[39m\n                \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItem-root MuiListItem-dense MuiListItem-gutters MuiListItem-padding css-qyw6ft-MuiListItem-root\"\u001b[39m\n              \u001b[36m>\u001b[39m\n                \u001b[36m<div\u001b[39m\n                  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItemText-root MuiListItemText-dense css-cfq8qh-MuiListItemText-root\"\u001b[39m\n                \u001b[36m>\u001b[39m\n                  \u001b[36m<p\u001b[39m\n                    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 MuiListItemText-primary css-7ctihp-MuiTypography-root\"\u001b[39m\n                  \u001b[36m>\u001b[39m\n                    \u001b[0mItem 1\u001b[0m\n                  \u001b[36m</p>\u001b[39m\n                \u001b[36m</div>\u001b[39m\n              \u001b[36m</li>\u001b[39m\n              \u001b[36m<li\u001b[39m\n                \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItem-root MuiListItem-dense MuiListItem-gutters MuiListItem-padding css-qyw6ft-MuiListItem-root\"\u001b[39m\n              \u001b[36m>\u001b[39m\n                \u001b[36m<div\u001b[39m\n                  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItemText-root MuiListItemText-dense css-cfq8qh-MuiListItemText-root\"\u001b[39m\n                \u001b[36m>\u001b[39m\n                  \u001b[36m<p\u001b[39m\n                    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 MuiListItemText-primary css-7ctihp-MuiTypography-root\"\u001b[39m\n                  \u001b[36m>\u001b[39m\n                    \u001b[0mItem 2\u001b[0m\n                  \u001b[36m</p>\u001b[39m\n                \u001b[36m</div>\u001b[39m\n              \u001b[36m</li>\u001b[39m\n              \u001b[36m<li\u001b[39m\n                \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItem-root MuiListItem-dense MuiListItem-gutters MuiListItem-padding css-qyw6ft-MuiListItem-root\"\u001b[39m\n              \u001b[36m>\u001b[39m\n                \u001b[36m<div\u001b[39m\n                  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiListItemText-root MuiListItemText-dense css-cfq8qh-MuiListItemText-root\"\u001b[39m\n                \u001b[36m>\u001b[39m\n                  \u001b[36m<p\u001b[39m\n                    \u001b[33mclass\u001b[39m=\u001b[32m\"MuiTypography-root MuiTypography-body2 MuiListItemText-primary css-7ctihp-MuiTypography-root\"\u001b[39m\n                  \u001b[36m>\u001b[39m\n                    \u001b[0mItem 3\u001b[0m\n                  \u001b[36m</p>\u001b[39m\n                \u001b[36m</div>\u001b[39m\n              \u001b[36m</li>\u001b[39m\n            \u001b[36m</ul>\u001b[39m\n          \u001b[36m</div>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"MuiDialogActions-root MuiDialogActions-spacing css-s92rvs-MuiDialogActions-root\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<button\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary Mui-disabled MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-o2na8-MuiButtonBase-root-MuiButton-root\"\u001b[39m\n            \u001b[33mdisabled\u001b[39m=\u001b[32m\"\"\u001b[39m\n            \u001b[33mtabindex\u001b[39m=\u001b[32m\"-1\"\u001b[39m\n            \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mCancel\u001b[0m\n          \u001b[36m</button>\u001b[39m\n          \u001b[36m<button\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedError MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorError Mui-disabled MuiButton-root MuiButton-contained MuiButton-containedError MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorError css-1gn3f0d-MuiButtonBase-root-MuiButton-root\"\u001b[39m\n            \u001b[33mdisabled\u001b[39m=\u001b[32m\"\"\u001b[39m\n            \u001b[33mtabindex\u001b[39m=\u001b[32m\"-1\"\u001b[39m\n            \u001b[33mtype\u001b[39m=\u001b[32m\"button\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[36m<span\u001b[39m\n              \u001b[33mclass\u001b[39m=\u001b[32m\"MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-gxw4l9-MuiCircularProgress-root\"\u001b[39m\n              \u001b[33mrole\u001b[39m=\u001b[32m\"progressbar\"\u001b[39m\n              \u001b[33mstyle\u001b[39m=\u001b[32m\"width: 24px; height: 24px;\"\u001b[39m\n            \u001b[36m>\u001b[39m\n              \u001b[36m<svg\u001b[39m\n                \u001b[33mclass\u001b[39m=\u001b[32m\"MuiCircularProgress-svg css-54pwck-MuiCircularProgress-svg\"\u001b[39m\n                \u001b[33mviewBox\u001b[39m=\u001b[32m\"22 22 44 44\"\u001b[39m\n              \u001b[36m>\u001b[39m\n                \u001b[36m<circle\u001b[39m\n                  \u001b[33mclass\u001b[39m=\u001b[32m\"MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-19t5dcl-MuiCircularProgress-circle\"\u001b[39m\n                  \u001b[33mcx\u001b[39m=\u001b[32m\"44\"\u001b[39m\n                  \u001b[33mcy\u001b[39m=\u001b[32m\"44\"\u001b[39m\n                  \u001b[33mfill\u001b[39m=\u001b[32m\"none\"\u001b[39m\n                  \u001b[33mr\u001b[39m=\u001b[32m\"20.2\"\u001b[39m\n                  \u001b[33mstroke-width\u001b[39m=\u001b[32m\"3.6\"\u001b[39m\n                \u001b[36m/>\u001b[39m\n              \u001b[36m</svg>\u001b[39m\n            \u001b[36m</span>\u001b[39m\n          \u001b[36m</button>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n      \u001b[36m</div>\u001b[39m\n    \u001b[36m</div>\u001b[39m\n    \u001b[36m<div\u001b[39m\n      \u001b[33mdata-testid\u001b[39m=\u001b[32m\"sentinelEnd\"\u001b[39m\n      \u001b[33mtabindex\u001b[39m=\u001b[32m\"0\"\u001b[39m\n    \u001b[36m/>\u001b[39m\n  \u001b[36m</div>\u001b[39m\n\u001b[36m</body>\u001b[39m\n    at Object.getElementError (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/config.js:37:19)\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:76:38\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:52:17\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:95:19\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/BulkActionDialog.test.tsx:55:34)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)",
              "name": "TestingLibraryElementError"
            }
          ]
        },
        {
          "name": "should show loading spinner when loading",
          "fullName": "BulkActionDialog should show loading spinner when loading",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(received).toBeInTheDocument()\n\nreceived value must be an HTMLElement or an SVGElement.\nReceived has value: null\n    at __EXTERNAL_MATCHER_TRAP__ (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/expect/build/index.js:325:30)\n    at Object.throwingMatcher [as toBeInTheDocument] (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/expect/build/index.js:326:15)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/BulkActionDialog.test.tsx:67:66)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        },
        {
          "name": "should support custom button text",
          "fullName": "BulkActionDialog should support custom button text",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/useAdminAccess.test.tsx",
      "tests": [
        {
          "name": "should return loading state initially",
          "fullName": "useAdminAccess should return loading state initially",
          "state": "passed"
        },
        {
          "name": "should return isAdmin true when user is admin",
          "fullName": "useAdminAccess should return isAdmin true when user is admin",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(received).toBeUndefined()\n\nReceived: null\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/useAdminAccess.test.tsx:76:34)"
            }
          ]
        },
        {
          "name": "should return isAdmin false when user is not admin",
          "fullName": "useAdminAccess should return isAdmin false when user is not admin",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(received).toBeUndefined()\n\nReceived: null\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/useAdminAccess.test.tsx:98:34)"
            }
          ]
        },
        {
          "name": "should handle errors gracefully",
          "fullName": "useAdminAccess should handle errors gracefully",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(received).toBe(expected) // Object.is equality\n\nExpected: false\nReceived: true\n\nIgnored nodes: comments, script, style\n\u001b[36m<html>\u001b[39m\n  \u001b[36m<head />\u001b[39m\n  \u001b[36m<body>\u001b[39m\n    \u001b[36m<div />\u001b[39m\n  \u001b[36m</body>\u001b[39m\n\u001b[36m</html>\u001b[39m\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/useAdminAccess.test.tsx:114:56\n    at runWithExpensiveErrorDiagnosticsDisabled (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/config.js:47:12)\n    at checkCallback (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/wait-for.js:124:77)\n    at checkRealTimersCallback (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/wait-for.js:118:16)\n    at Timeout.task [as _onTimeout] (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)\n    at listOnTimeout (node:internal/timers:605:17)\n    at processTimers (node:internal/timers:541:7)"
            }
          ]
        },
        {
          "name": "should not query when user is not authenticated",
          "fullName": "useAdminAccess should not query when user is not authenticated",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/dashboard/hooks/__tests__/useDashboardData.test.ts",
      "tests": [
        {
          "name": "should return green health with no schedules and no documents",
          "fullName": "computeVehicleHealth Green health should return green health with no schedules and no documents",
          "state": "passed"
        },
        {
          "name": "should return green health with schedule due in 20 days and 1 upcoming attention item",
          "fullName": "computeVehicleHealth Green health should return green health with schedule due in 20 days and 1 upcoming attention item",
          "state": "passed"
        },
        {
          "name": "should return yellow health with schedule due in 10 days, no overdue",
          "fullName": "computeVehicleHealth Yellow health should return yellow health with schedule due in 10 days, no overdue",
          "state": "passed"
        },
        {
          "name": "should return yellow health with registration expiring in 7 days",
          "fullName": "computeVehicleHealth Yellow health should return yellow health with registration expiring in 7 days",
          "state": "passed"
        },
        {
          "name": "should return red health with maintenance overdue by 5 days",
          "fullName": "computeVehicleHealth Red health should return red health with maintenance overdue by 5 days",
          "state": "passed"
        },
        {
          "name": "should return red health with insurance expired 3 days ago",
          "fullName": "computeVehicleHealth Red health should return red health with insurance expired 3 days ago",
          "state": "passed"
        },
        {
          "name": "should return red health with one overdue maintenance and one due-soon document",
          "fullName": "computeVehicleHealth Red health should return red health with one overdue maintenance and one due-soon document",
          "state": "passed"
        },
        {
          "name": "should sort attention items with overdue first by most overdue, then due-soon by proximity",
          "fullName": "computeVehicleHealth Attention items sorting should sort attention items with overdue first by most overdue, then due-soon by proximity",
          "state": "passed"
        },
        {
          "name": "should enforce max 3 attention items when 5 items are present",
          "fullName": "computeVehicleHealth Max 3 attention items enforcement should enforce max 3 attention items when 5 items are present",
          "state": "passed"
        },
        {
          "name": "should ignore inactive schedules (isActive: false)",
          "fullName": "computeVehicleHealth Inactive schedule handling should ignore inactive schedules (isActive: false)",
          "state": "passed"
        },
        {
          "name": "should ignore schedules without nextDueDate",
          "fullName": "computeVehicleHealth Missing date handling should ignore schedules without nextDueDate",
          "state": "passed"
        },
        {
          "name": "should ignore documents without expirationDate",
          "fullName": "computeVehicleHealth Missing date handling should ignore documents without expirationDate",
          "state": "passed"
        },
        {
          "name": "should use first subtype as label when subtypes array is not empty",
          "fullName": "computeVehicleHealth Label extraction should use first subtype as label when subtypes array is not empty",
          "state": "passed"
        },
        {
          "name": "should use formatted category as label when subtypes array is empty",
          "fullName": "computeVehicleHealth Label extraction should use formatted category as label when subtypes array is empty",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/components/ExpirationBadge.test.tsx",
      "tests": [
        {
          "name": "renders nothing for null",
          "fullName": "ExpirationBadge when no expiration date is provided renders nothing for null",
          "state": "passed"
        },
        {
          "name": "renders nothing for undefined",
          "fullName": "ExpirationBadge when no expiration date is provided renders nothing for undefined",
          "state": "passed"
        },
        {
          "name": "renders nothing for empty string",
          "fullName": "ExpirationBadge when no expiration date is provided renders nothing for empty string",
          "state": "passed"
        },
        {
          "name": "shows \"Expired\" badge for past dates",
          "fullName": "ExpirationBadge when document is expired shows \"Expired\" badge for past dates",
          "state": "passed"
        },
        {
          "name": "shows \"Expired\" badge for dates far in the past",
          "fullName": "ExpirationBadge when document is expired shows \"Expired\" badge for dates far in the past",
          "state": "passed"
        },
        {
          "name": "has red styling for expired badge",
          "fullName": "ExpirationBadge when document is expired has red styling for expired badge",
          "state": "passed"
        },
        {
          "name": "shows \"Expires today\" badge",
          "fullName": "ExpirationBadge when document expires today shows \"Expires today\" badge",
          "state": "passed"
        },
        {
          "name": "has amber styling for expiring soon badge",
          "fullName": "ExpirationBadge when document expires today has amber styling for expiring soon badge",
          "state": "passed"
        },
        {
          "name": "shows \"Expires tomorrow\" badge",
          "fullName": "ExpirationBadge when document expires tomorrow shows \"Expires tomorrow\" badge",
          "state": "passed"
        },
        {
          "name": "shows \"Expires in X days\" badge for 15 days",
          "fullName": "ExpirationBadge when document expires within 30 days shows \"Expires in X days\" badge for 15 days",
          "state": "passed"
        },
        {
          "name": "shows \"Expires in X days\" badge for 30 days",
          "fullName": "ExpirationBadge when document expires within 30 days shows \"Expires in X days\" badge for 30 days",
          "state": "passed"
        },
        {
          "name": "shows \"Expires in X days\" badge for 2 days",
          "fullName": "ExpirationBadge when document expires within 30 days shows \"Expires in X days\" badge for 2 days",
          "state": "passed"
        },
        {
          "name": "renders nothing for 31 days out",
          "fullName": "ExpirationBadge when document expires after 30 days renders nothing for 31 days out",
          "state": "passed"
        },
        {
          "name": "renders nothing for dates far in the future",
          "fullName": "ExpirationBadge when document expires after 30 days renders nothing for dates far in the future",
          "state": "passed"
        },
        {
          "name": "applies custom className to the badge",
          "fullName": "ExpirationBadge className prop applies custom className to the badge",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/AdminSectionHeader.test.tsx",
      "tests": [
        {
          "name": "should render with title and stats",
          "fullName": "AdminSectionHeader should render with title and stats",
          "state": "passed"
        },
        {
          "name": "should render with empty stats",
          "fullName": "AdminSectionHeader should render with empty stats",
          "state": "passed"
        },
        {
          "name": "should format large numbers with locale",
          "fullName": "AdminSectionHeader should format large numbers with locale",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/shared/components/CameraCapture/CameraCapture.test.tsx",
      "tests": [
        {
          "name": "shows loading state while requesting permission",
          "fullName": "CameraCapture Permission handling shows loading state while requesting permission",
          "state": "passed"
        },
        {
          "name": "shows error when permission denied",
          "fullName": "CameraCapture Permission handling shows error when permission denied",
          "state": "passed"
        },
        {
          "name": "shows error when camera unavailable",
          "fullName": "CameraCapture Permission handling shows error when camera unavailable",
          "state": "passed"
        },
        {
          "name": "shows viewfinder when camera access granted",
          "fullName": "CameraCapture Viewfinder shows viewfinder when camera access granted",
          "state": "passed"
        },
        {
          "name": "shows cancel button in viewfinder",
          "fullName": "CameraCapture Viewfinder shows cancel button in viewfinder",
          "state": "passed"
        },
        {
          "name": "calls onCancel when cancel button clicked",
          "fullName": "CameraCapture Viewfinder calls onCancel when cancel button clicked",
          "state": "passed"
        },
        {
          "name": "shows VIN guidance when guidanceType is vin",
          "fullName": "CameraCapture Guidance overlay shows VIN guidance when guidanceType is vin",
          "state": "passed"
        },
        {
          "name": "shows receipt guidance when guidanceType is receipt",
          "fullName": "CameraCapture Guidance overlay shows receipt guidance when guidanceType is receipt",
          "state": "passed"
        },
        {
          "name": "shows upload file button in viewfinder",
          "fullName": "CameraCapture File fallback shows upload file button in viewfinder",
          "state": "passed"
        },
        {
          "name": "switches to file fallback when upload file clicked",
          "fullName": "CameraCapture File fallback switches to file fallback when upload file clicked",
          "state": "passed"
        },
        {
          "name": "renders upload area",
          "fullName": "FileInputFallback renders upload area",
          "state": "passed"
        },
        {
          "name": "shows accepted formats",
          "fullName": "FileInputFallback shows accepted formats",
          "state": "passed"
        },
        {
          "name": "shows max file size",
          "fullName": "FileInputFallback shows max file size",
          "state": "passed"
        },
        {
          "name": "calls onCancel when cancel clicked",
          "fullName": "FileInputFallback calls onCancel when cancel clicked",
          "state": "passed"
        },
        {
          "name": "shows error for invalid file type",
          "fullName": "FileInputFallback shows error for invalid file type",
          "state": "passed"
        },
        {
          "name": "shows error for file too large",
          "fullName": "FileInputFallback shows error for file too large",
          "state": "passed"
        },
        {
          "name": "calls onFileSelect with valid file",
          "fullName": "FileInputFallback calls onFileSelect with valid file",
          "state": "passed"
        },
        {
          "name": "renders nothing when type is none",
          "fullName": "GuidanceOverlay renders nothing when type is none",
          "state": "passed"
        },
        {
          "name": "renders VIN guidance with correct description",
          "fullName": "GuidanceOverlay renders VIN guidance with correct description",
          "state": "passed"
        },
        {
          "name": "renders receipt guidance with correct description",
          "fullName": "GuidanceOverlay renders receipt guidance with correct description",
          "state": "passed"
        },
        {
          "name": "renders document guidance with correct description",
          "fullName": "GuidanceOverlay renders document guidance with correct description",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/SelectionToolbar.test.tsx",
      "tests": [
        {
          "name": "should not render when selectedCount is 0",
          "fullName": "SelectionToolbar should not render when selectedCount is 0",
          "state": "passed"
        },
        {
          "name": "should render when items are selected",
          "fullName": "SelectionToolbar should render when items are selected",
          "state": "passed"
        },
        {
          "name": "should call onClear when Clear button clicked",
          "fullName": "SelectionToolbar should call onClear when Clear button clicked",
          "state": "passed"
        },
        {
          "name": "should call onSelectAll when Select All button clicked",
          "fullName": "SelectionToolbar should call onSelectAll when Select All button clicked",
          "state": "passed"
        },
        {
          "name": "should render custom action buttons",
          "fullName": "SelectionToolbar should render custom action buttons",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/components/StationCard.test.tsx",
      "tests": [
        {
          "name": "should render station name and address",
          "fullName": "StationCard Rendering should render station name and address",
          "state": "passed"
        },
        {
          "name": "should render station photo if available",
          "fullName": "StationCard Rendering should render station photo if available",
          "state": "passed"
        },
        {
          "name": "should render rating when available",
          "fullName": "StationCard Rendering should render rating when available",
          "state": "passed"
        },
        {
          "name": "should render distance chip",
          "fullName": "StationCard Rendering should render distance chip",
          "state": "passed"
        },
        {
          "name": "should not crash when photo is missing",
          "fullName": "StationCard Rendering should not crash when photo is missing",
          "state": "passed"
        },
        {
          "name": "should call onSave when bookmark button clicked (not saved)",
          "fullName": "StationCard Save/Delete Actions should call onSave when bookmark button clicked (not saved)",
          "state": "passed"
        },
        {
          "name": "should call onDelete when bookmark button clicked (saved)",
          "fullName": "StationCard Save/Delete Actions should call onDelete when bookmark button clicked (saved)",
          "state": "passed"
        },
        {
          "name": "should show filled bookmark icon when saved",
          "fullName": "StationCard Save/Delete Actions should show filled bookmark icon when saved",
          "state": "passed"
        },
        {
          "name": "should show outline bookmark icon when not saved",
          "fullName": "StationCard Save/Delete Actions should show outline bookmark icon when not saved",
          "state": "passed"
        },
        {
          "name": "should open Google Maps when directions button clicked",
          "fullName": "StationCard Directions Link should open Google Maps when directions button clicked",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)\n\nExpected: StringContaining \"google.com/maps\", \"_blank\"\n\nNumber of calls: 0\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/components/StationCard.test.tsx:120:27)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        },
        {
          "name": "should encode address in directions URL",
          "fullName": "StationCard Directions Link should encode address in directions URL",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)\n\nExpected: StringContaining \"123%20Main%20St%2C%20San%20Francisco%2C%20CA%2094105\", \"_blank\"\n\nNumber of calls: 0\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/components/StationCard.test.tsx:132:27)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        },
        {
          "name": "should have minimum 44px button heights",
          "fullName": "StationCard Touch Targets should have minimum 44px button heights",
          "state": "passed"
        },
        {
          "name": "should call onSelect when card is clicked",
          "fullName": "StationCard Card Selection should call onSelect when card is clicked",
          "state": "passed"
        },
        {
          "name": "should not call onSelect when button is clicked",
          "fullName": "StationCard Card Selection should not call onSelect when button is clicked",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/hooks/useBulkSelection.test.ts",
      "tests": [
        {
          "name": "should initialize with empty selection",
          "fullName": "useBulkSelection should initialize with empty selection",
          "state": "passed"
        },
        {
          "name": "should toggle individual item selection",
          "fullName": "useBulkSelection should toggle individual item selection",
          "state": "passed"
        },
        {
          "name": "should toggle all items",
          "fullName": "useBulkSelection should toggle all items",
          "state": "passed"
        },
        {
          "name": "should reset all selections",
          "fullName": "useBulkSelection should reset all selections",
          "state": "passed"
        },
        {
          "name": "should return selected items",
          "fullName": "useBulkSelection should return selected items",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/useAdmins.test.tsx",
      "tests": [
        {
          "name": "should fetch admin users",
          "fullName": "Admin user management hooks useAdmins should fetch admin users",
          "state": "passed"
        },
        {
          "name": "should create admin and show success toast",
          "fullName": "Admin user management hooks useCreateAdmin should create admin and show success toast",
          "state": "passed"
        },
        {
          "name": "should handle create admin error",
          "fullName": "Admin user management hooks useCreateAdmin should handle create admin error",
          "state": "passed"
        },
        {
          "name": "should revoke admin and show success toast",
          "fullName": "Admin user management hooks useRevokeAdmin should revoke admin and show success toast",
          "state": "passed"
        },
        {
          "name": "should reinstate admin and show success toast",
          "fullName": "Admin user management hooks useReinstateAdmin should reinstate admin and show success toast",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/shared/components/CameraCapture/__tests__/getInitialCropForGuidance.test.ts",
      "tests": [
        {
          "name": "returns undefined for \"none\" guidance type",
          "fullName": "getInitialCropForGuidance returns undefined for \"none\" guidance type",
          "state": "passed"
        },
        {
          "name": "returns centered 85%-width crop with 6:1 AR for VIN",
          "fullName": "getInitialCropForGuidance returns centered 85%-width crop with 6:1 AR for VIN",
          "state": "passed"
        },
        {
          "name": "returns centered 70%-height crop with 2:3 AR for receipt",
          "fullName": "getInitialCropForGuidance returns centered 70%-height crop with 2:3 AR for receipt",
          "state": "passed"
        },
        {
          "name": "returns centered 70%-height crop with 8.5:11 AR for document",
          "fullName": "getInitialCropForGuidance returns centered 70%-height crop with 8.5:11 AR for document",
          "state": "passed"
        },
        {
          "name": "returns crop areas within 0-100 bounds for all types",
          "fullName": "getInitialCropForGuidance returns crop areas within 0-100 bounds for all types",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/dashboard/components/__tests__/VehicleRosterCard.test.tsx",
      "tests": [
        {
          "name": "renders vehicle label with year make model",
          "fullName": "VehicleRosterCard renders vehicle label with year make model",
          "state": "passed"
        },
        {
          "name": "renders health badge with correct color class for green health",
          "fullName": "VehicleRosterCard renders health badge with correct color class for green health",
          "state": "passed"
        },
        {
          "name": "renders health badge with correct color class for yellow health",
          "fullName": "VehicleRosterCard renders health badge with correct color class for yellow health",
          "state": "passed"
        },
        {
          "name": "renders health badge with correct color class for red health",
          "fullName": "VehicleRosterCard renders health badge with correct color class for red health",
          "state": "passed"
        },
        {
          "name": "renders attention items text",
          "fullName": "VehicleRosterCard renders attention items text",
          "state": "passed"
        },
        {
          "name": "renders odometer with formatting",
          "fullName": "VehicleRosterCard renders odometer with formatting",
          "state": "passed"
        },
        {
          "name": "calls onClick with vehicle ID when clicked",
          "fullName": "VehicleRosterCard calls onClick with vehicle ID when clicked",
          "state": "passed"
        },
        {
          "name": "renders All clear when no attention items",
          "fullName": "VehicleRosterCard renders All clear when no attention items",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/catalogShared.test.ts",
      "tests": [
        {
          "name": "describes dependent counts for makes",
          "fullName": "getCascadeSummary describes dependent counts for makes",
          "state": "passed"
        },
        {
          "name": "returns empty string when nothing selected",
          "fullName": "getCascadeSummary returns empty string when nothing selected",
          "state": "passed"
        },
        {
          "name": "prefills parent context for create operations",
          "fullName": "buildDefaultValues prefills parent context for create operations",
          "state": "passed"
        },
        {
          "name": "hydrates existing entity data for editing engines",
          "fullName": "buildDefaultValues hydrates existing entity data for editing engines",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/utils/navigation-links.test.ts",
      "tests": [
        {
          "name": "uses coordinates when valid",
          "fullName": "buildNavigationLinks uses coordinates when valid",
          "state": "passed"
        },
        {
          "name": "falls back to query when coordinates are missing",
          "fullName": "buildNavigationLinks falls back to query when coordinates are missing",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/dashboard/components/__tests__/ActionBar.test.tsx",
      "tests": [
        {
          "name": "renders both buttons with correct text",
          "fullName": "ActionBar renders both buttons with correct text",
          "state": "passed"
        },
        {
          "name": "calls onAddVehicle when Add Vehicle button clicked",
          "fullName": "ActionBar calls onAddVehicle when Add Vehicle button clicked",
          "state": "passed"
        },
        {
          "name": "calls onLogFuel when Log Fuel button clicked",
          "fullName": "ActionBar calls onLogFuel when Log Fuel button clicked",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/api/community-stations.api.test.ts",
      "tests": [
        {
          "name": "Module failed to load (Error)",
          "fullName": "Module failed to load (Error)",
          "state": "failed",
          "errors": [
            {
              "message": "Cannot use 'import.meta' outside a module",
              "name": "Error",
              "stack": "Jest encountered an unexpected token\n\nJest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.\n\nOut of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.\n\nBy default \"node_modules\" folder is ignored by transformers.\n\nHere's what you can do:\n • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.\n • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript\n • To have some of your \"node_modules\" files transformed, you can specify a custom \"transformIgnorePatterns\" in your config.\n • If you need a custom transformation specify a \"transform\" option in your config.\n • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the \"moduleNameMapper\" config option.\n\nYou'll find more details and examples of these config options in the docs:\nhttps://jestjs.io/docs/configuration\nFor information about custom transformations, see:\nhttps://jestjs.io/docs/code-transformation\n\nDetails:\n\n/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/core/api/client.ts:46\nconst API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api';\n                            ^^^^\n\nSyntaxError: Cannot use 'import.meta' outside a module\n    at new Script (node:vm:117:7)\n    at Runtime.createScriptFromCode (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1505:14)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1399:25)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/api/community-stations.api.ts:5:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/api/community-stations.api.test.ts:6:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/api/stations.api.test.ts",
      "tests": [
        {
          "name": "Module failed to load (Error)",
          "fullName": "Module failed to load (Error)",
          "state": "failed",
          "errors": [
            {
              "message": "Cannot use 'import.meta' outside a module",
              "name": "Error",
              "stack": "Jest encountered an unexpected token\n\nJest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.\n\nOut of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.\n\nBy default \"node_modules\" folder is ignored by transformers.\n\nHere's what you can do:\n • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.\n • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript\n • To have some of your \"node_modules\" files transformed, you can specify a custom \"transformIgnorePatterns\" in your config.\n • If you need a custom transformation specify a \"transform\" option in your config.\n • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the \"moduleNameMapper\" config option.\n\nYou'll find more details and examples of these config options in the docs:\nhttps://jestjs.io/docs/configuration\nFor information about custom transformations, see:\nhttps://jestjs.io/docs/code-transformation\n\nDetails:\n\n/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/core/api/client.ts:46\nconst API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api';\n                            ^^^^\n\nSyntaxError: Cannot use 'import.meta' outside a module\n    at new Script (node:vm:117:7)\n    at Runtime.createScriptFromCode (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1505:14)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1399:25)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/api/stations.api.ts:5:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/api/stations.api.test.ts:6:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/hooks/useStationsSearch.test.ts",
      "tests": [
        {
          "name": "Module failed to load (Error)",
          "fullName": "Module failed to load (Error)",
          "state": "failed",
          "errors": [
            {
              "message": "Cannot use 'import.meta' outside a module",
              "name": "Error",
              "stack": "Jest encountered an unexpected token\n\nJest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.\n\nOut of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.\n\nBy default \"node_modules\" folder is ignored by transformers.\n\nHere's what you can do:\n • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.\n • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript\n • To have some of your \"node_modules\" files transformed, you can specify a custom \"transformIgnorePatterns\" in your config.\n • If you need a custom transformation specify a \"transform\" option in your config.\n • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the \"moduleNameMapper\" config option.\n\nYou'll find more details and examples of these config options in the docs:\nhttps://jestjs.io/docs/configuration\nFor information about custom transformations, see:\nhttps://jestjs.io/docs/code-transformation\n\nDetails:\n\n/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/core/api/client.ts:46\nconst API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api';\n                            ^^^^\n\nSyntaxError: Cannot use 'import.meta' outside a module\n    at new Script (node:vm:117:7)\n    at Runtime.createScriptFromCode (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1505:14)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1399:25)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/api/stations.api.ts:5:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime._generateMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1690:34)\n    at Runtime.requireMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:996:39)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1046:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/hooks/useStationsSearch.ts:6:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/hooks/useStationsSearch.test.ts:8:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/hooks/useCommunityStations.test.ts",
      "tests": [
        {
          "name": "Module failed to load (Error)",
          "fullName": "Module failed to load (Error)",
          "state": "failed",
          "errors": [
            {
              "message": "Cannot use 'import.meta' outside a module",
              "name": "Error",
              "stack": "Jest encountered an unexpected token\n\nJest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.\n\nOut of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.\n\nBy default \"node_modules\" folder is ignored by transformers.\n\nHere's what you can do:\n • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.\n • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript\n • To have some of your \"node_modules\" files transformed, you can specify a custom \"transformIgnorePatterns\" in your config.\n • If you need a custom transformation specify a \"transform\" option in your config.\n • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the \"moduleNameMapper\" config option.\n\nYou'll find more details and examples of these config options in the docs:\nhttps://jestjs.io/docs/configuration\nFor information about custom transformations, see:\nhttps://jestjs.io/docs/code-transformation\n\nDetails:\n\n/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/core/api/client.ts:46\nconst API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api';\n                            ^^^^\n\nSyntaxError: Cannot use 'import.meta' outside a module\n    at new Script (node:vm:117:7)\n    at Runtime.createScriptFromCode (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1505:14)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1399:25)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/api/community-stations.api.ts:5:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime._generateMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1690:34)\n    at Runtime.requireMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:996:39)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1046:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/hooks/useCommunityStations.ts:6:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/stations/__tests__/hooks/useCommunityStations.test.ts:8:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/pages/__tests__/GuidePage.test.tsx",
      "tests": [
        {
          "name": "renders page heading and subheading",
          "fullName": "GuidePage renders page heading and subheading",
          "state": "passed"
        },
        {
          "name": "renders all 10 section headings",
          "fullName": "GuidePage renders all 10 section headings",
          "state": "passed"
        },
        {
          "name": "renders TOC with correct section titles",
          "fullName": "GuidePage renders TOC with correct section titles",
          "state": "passed"
        },
        {
          "name": "renders navigation bar with Guide link highlighted",
          "fullName": "GuidePage renders navigation bar with Guide link highlighted",
          "state": "passed"
        },
        {
          "name": "renders GuideScreenshot components with loading=\"lazy\"",
          "fullName": "GuidePage renders GuideScreenshot components with loading=\"lazy\"",
          "state": "passed"
        },
        {
          "name": "renders footer with copyright",
          "fullName": "GuidePage renders footer with copyright",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/mobile/DocumentsMobileScreen.test.tsx",
      "tests": [
        {
          "name": "Module failed to load (Error)",
          "fullName": "Module failed to load (Error)",
          "state": "failed",
          "errors": [
            {
              "message": "Cannot use 'import.meta' outside a module",
              "name": "Error",
              "stack": "Jest encountered an unexpected token\n\nJest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.\n\nOut of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.\n\nBy default \"node_modules\" folder is ignored by transformers.\n\nHere's what you can do:\n • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.\n • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript\n • To have some of your \"node_modules\" files transformed, you can specify a custom \"transformIgnorePatterns\" in your config.\n • If you need a custom transformation specify a \"transform\" option in your config.\n • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the \"moduleNameMapper\" config option.\n\nYou'll find more details and examples of these config options in the docs:\nhttps://jestjs.io/docs/configuration\nFor information about custom transformations, see:\nhttps://jestjs.io/docs/code-transformation\n\nDetails:\n\n/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/core/api/client.ts:46\nconst API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api';\n                            ^^^^\n\nSyntaxError: Cannot use 'import.meta' outside a module\n    at new Script (node:vm:117:7)\n    at Runtime.createScriptFromCode (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1505:14)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1399:25)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/core/hooks/useTierAccess.ts:8:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/shared-minimal/components/UpgradeRequiredDialog.tsx:22:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/components/DocumentForm.tsx:3:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/components/AddDocumentDialog.tsx:3:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/mobile/DocumentsMobileScreen.tsx:9:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at Runtime.requireModuleOrMock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1048:21)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/mobile/DocumentsMobileScreen.test.tsx:8:1)\n    at Runtime._execModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1439:24)\n    at Runtime._loadModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:1022:12)\n    at Runtime.requireModule (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runtime/build/index.js:882:12)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/EmptyState.test.tsx",
      "tests": [
        {
          "name": "should render with title and description",
          "fullName": "EmptyState should render with title and description",
          "state": "passed"
        },
        {
          "name": "should render with icon",
          "fullName": "EmptyState should render with icon",
          "state": "passed"
        },
        {
          "name": "should render action button when provided",
          "fullName": "EmptyState should render action button when provided",
          "state": "passed"
        },
        {
          "name": "should not render action button when not provided",
          "fullName": "EmptyState should not render action button when not provided",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/components/DocumentPreview.test.tsx",
      "tests": [
        {
          "name": "should render PDF preview for PDF documents",
          "fullName": "DocumentPreview PDF Preview should render PDF preview for PDF documents",
          "state": "failed",
          "errors": [
            {
              "message": "Error: Unable to find role=\"application\" and name \"PDF Preview\"\n\nIgnored nodes: comments, script, style\n\u001b[36m<body>\u001b[39m\n  \u001b[36m<div>\u001b[39m\n    \u001b[36m<object\u001b[39m\n      \u001b[33maria-label\u001b[39m=\u001b[32m\"PDF Preview\"\u001b[39m\n      \u001b[33mclass\u001b[39m=\u001b[32m\"w-full h-[60vh] rounded-lg border\"\u001b[39m\n      \u001b[33mdata\u001b[39m=\u001b[32m\"blob:http://localhost/test-blob\"\u001b[39m\n      \u001b[33mtype\u001b[39m=\u001b[32m\"application/pdf\"\u001b[39m\n    \u001b[36m>\u001b[39m\n      \u001b[36m<a\u001b[39m\n        \u001b[33mhref\u001b[39m=\u001b[32m\"blob:http://localhost/test-blob\"\u001b[39m\n        \u001b[33mrel\u001b[39m=\u001b[32m\"noopener noreferrer\"\u001b[39m\n        \u001b[33mtarget\u001b[39m=\u001b[32m\"_blank\"\u001b[39m\n      \u001b[36m>\u001b[39m\n        \u001b[0mOpen PDF\u001b[0m\n      \u001b[36m</a>\u001b[39m\n    \u001b[36m</object>\u001b[39m\n  \u001b[36m</div>\u001b[39m\n\u001b[36m</body>\u001b[39m\n    at waitForWrapper (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/wait-for.js:163:27)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/components/DocumentPreview.test.tsx:82:20)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)",
              "name": "TestingLibraryElementError"
            }
          ]
        },
        {
          "name": "should provide fallback link for PDF when object fails",
          "fullName": "DocumentPreview PDF Preview should provide fallback link for PDF when object fails",
          "state": "passed"
        },
        {
          "name": "should render image preview for image documents",
          "fullName": "DocumentPreview Image Preview should render image preview for image documents",
          "state": "passed"
        },
        {
          "name": "should have proper image styling",
          "fullName": "DocumentPreview Image Preview should have proper image styling",
          "state": "failed",
          "errors": [
            {
              "message": "Error: expect(element).toHaveClass(\"max-w-full h-auto rounded-lg border\")\n\nExpected the element to have class:\n  max-w-full h-auto rounded-lg border\nReceived:\n  w-full h-auto object-contain pointer-events-none\n\nIgnored nodes: comments, script, style\n\u001b[36m<html>\u001b[39m\n  \u001b[36m<head />\u001b[39m\n  \u001b[36m<body>\u001b[39m\n    \u001b[36m<div>\u001b[39m\n      \u001b[36m<div\u001b[39m\n        \u001b[33mclass\u001b[39m=\u001b[32m\"rounded-lg border overflow-hidden bg-gray-50\"\u001b[39m\n      \u001b[36m>\u001b[39m\n        \u001b[36m<div\u001b[39m\n          \u001b[33mclass\u001b[39m=\u001b[32m\"relative overflow-hidden touch-none select-none max-w-full h-auto min-h-[300px] max-h-[80vh]\"\u001b[39m\n        \u001b[36m>\u001b[39m\n          \u001b[36m<img\u001b[39m\n            \u001b[33malt\u001b[39m=\u001b[32m\"Registration Photo\"\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"w-full h-auto object-contain pointer-events-none\"\u001b[39m\n            \u001b[33mdraggable\u001b[39m=\u001b[32m\"false\"\u001b[39m\n            \u001b[33msrc\u001b[39m=\u001b[32m\"blob:http://localhost/test-blob\"\u001b[39m\n            \u001b[33mstyle\u001b[39m=\u001b[32m\"transform: scale(1) translate(0px, 0px); transform-origin: center center; transition: transform 0.2s ease-out;\"\u001b[39m\n          \u001b[36m/>\u001b[39m\n          \u001b[36m<div\u001b[39m\n            \u001b[33mclass\u001b[39m=\u001b[32m\"absolute bottom-4 left-1/2 transform -translate-x-1/2 bg-black bg-opacity-50 text-white px-3 py-1 rounded-full text-xs backdrop-blur-sm pointer-events-none\"\u001b[39m\n          \u001b[36m>\u001b[39m\n            \u001b[0mPinch to zoom • Double-tap to zoom • Drag to pan\u001b[0m\n          \u001b[36m</div>\u001b[39m\n        \u001b[36m</div>\u001b[39m\n      \u001b[36m</div>\u001b[39m\n    \u001b[36m</div>\u001b[39m\n  \u001b[36m</body>\u001b[39m\n\u001b[36m</html>\u001b[39m\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/components/DocumentPreview.test.tsx:138:23\n    at runWithExpensiveErrorDiagnosticsDisabled (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/config.js:47:12)\n    at checkCallback (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/wait-for.js:124:77)\n    at checkRealTimersCallback (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/wait-for.js:118:16)\n    at Timeout.task [as _onTimeout] (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)\n    at listOnTimeout (node:internal/timers:605:17)\n    at processTimers (node:internal/timers:541:7)"
            }
          ]
        },
        {
          "name": "should show no preview message for non-previewable documents",
          "fullName": "DocumentPreview Non-previewable Documents should show no preview message for non-previewable documents",
          "state": "passed"
        },
        {
          "name": "should not create blob URL for non-previewable documents",
          "fullName": "DocumentPreview Non-previewable Documents should not create blob URL for non-previewable documents",
          "state": "passed"
        },
        {
          "name": "should show error message when download fails",
          "fullName": "DocumentPreview Error Handling should show error message when download fails",
          "state": "passed"
        },
        {
          "name": "should handle network errors gracefully",
          "fullName": "DocumentPreview Error Handling should handle network errors gracefully",
          "state": "passed"
        },
        {
          "name": "should detect PDF from content type",
          "fullName": "DocumentPreview Content Type Detection should detect PDF from content type",
          "state": "passed"
        },
        {
          "name": "should detect images from content type",
          "fullName": "DocumentPreview Content Type Detection should detect images from content type",
          "state": "passed"
        },
        {
          "name": "should handle PNG images",
          "fullName": "DocumentPreview Content Type Detection should handle PNG images",
          "state": "passed"
        },
        {
          "name": "should handle documents with undefined content type",
          "fullName": "DocumentPreview Content Type Detection should handle documents with undefined content type",
          "state": "failed",
          "errors": [
            {
              "message": "TestingLibraryElementError: Unable to find an element with the text: No preview available.. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.\n\nIgnored nodes: comments, script, style\n\u001b[36m<body>\u001b[39m\n  \u001b[36m<div>\u001b[39m\n    \u001b[36m<div\u001b[39m\n      \u001b[33mclass\u001b[39m=\u001b[32m\"text-slate-500 text-sm\"\u001b[39m\n    \u001b[36m>\u001b[39m\n      \u001b[0mLoading preview...\u001b[0m\n    \u001b[36m</div>\u001b[39m\n  \u001b[36m</div>\u001b[39m\n\u001b[36m</body>\u001b[39m\n    at Object.getElementError (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/config.js:37:19)\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:76:38\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:52:17\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/dom/dist/query-helpers.js:95:19\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/documents/components/DocumentPreview.test.tsx:217:21)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at runNextTicks (node:internal/process/task_queues:65:5)\n    at listOnTimeout (node:internal/timers:567:9)\n    at processTimers (node:internal/timers:541:7)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)",
              "name": "TestingLibraryElementError"
            }
          ]
        },
        {
          "name": "should clean up blob URL on unmount",
          "fullName": "DocumentPreview Memory Management should clean up blob URL on unmount",
          "state": "passed"
        },
        {
          "name": "should clean up blob URL when document changes",
          "fullName": "DocumentPreview Memory Management should clean up blob URL when document changes",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/maintenance/components/MaintenanceScheduleReviewScreen.test.tsx",
      "tests": [
        {
          "name": "should render extracted items with checkboxes",
          "fullName": "MaintenanceScheduleReviewScreen Rendering should render extracted items with checkboxes",
          "state": "passed"
        },
        {
          "name": "should display interval information",
          "fullName": "MaintenanceScheduleReviewScreen Rendering should display interval information",
          "state": "passed"
        },
        {
          "name": "should display details text when present",
          "fullName": "MaintenanceScheduleReviewScreen Rendering should display details text when present",
          "state": "passed"
        },
        {
          "name": "should display subtypes in SubtypeCheckboxGroup",
          "fullName": "MaintenanceScheduleReviewScreen Rendering should display subtypes in SubtypeCheckboxGroup",
          "state": "passed"
        },
        {
          "name": "should toggle item selection on checkbox click",
          "fullName": "MaintenanceScheduleReviewScreen Selection should toggle item selection on checkbox click",
          "state": "passed"
        },
        {
          "name": "should deselect all items",
          "fullName": "MaintenanceScheduleReviewScreen Selection should deselect all items",
          "state": "passed"
        },
        {
          "name": "should select all items after deselecting",
          "fullName": "MaintenanceScheduleReviewScreen Selection should select all items after deselecting",
          "state": "passed"
        },
        {
          "name": "should disable create button when no items selected",
          "fullName": "MaintenanceScheduleReviewScreen Selection should disable create button when no items selected",
          "state": "passed"
        },
        {
          "name": "should show no items found message for empty extraction",
          "fullName": "MaintenanceScheduleReviewScreen Empty state should show no items found message for empty extraction",
          "state": "passed"
        },
        {
          "name": "should create selected schedules on button click",
          "fullName": "MaintenanceScheduleReviewScreen Schedule creation should create selected schedules on button click",
          "state": "passed"
        },
        {
          "name": "should only create selected items",
          "fullName": "MaintenanceScheduleReviewScreen Schedule creation should only create selected items",
          "state": "passed"
        },
        {
          "name": "should show error on creation failure",
          "fullName": "MaintenanceScheduleReviewScreen Schedule creation should show error on creation failure",
          "state": "passed"
        },
        {
          "name": "should update item data via inline editing",
          "fullName": "MaintenanceScheduleReviewScreen Editing should update item data via inline editing",
          "state": "passed"
        },
        {
          "name": "should disable create button when selected item has empty subtypes",
          "fullName": "MaintenanceScheduleReviewScreen Subtype validation should disable create button when selected item has empty subtypes",
          "state": "passed"
        },
        {
          "name": "should enable create button after deselecting item with empty subtypes",
          "fullName": "MaintenanceScheduleReviewScreen Subtype validation should enable create button after deselecting item with empty subtypes",
          "state": "passed"
        },
        {
          "name": "should show warning alert for items missing subtypes",
          "fullName": "MaintenanceScheduleReviewScreen Subtype validation should show warning alert for items missing subtypes",
          "state": "passed"
        },
        {
          "name": "should hide warning alert after deselecting items with empty subtypes",
          "fullName": "MaintenanceScheduleReviewScreen Subtype validation should hide warning alert after deselecting items with empty subtypes",
          "state": "passed"
        },
        {
          "name": "should disable create button when selected item has no intervals",
          "fullName": "MaintenanceScheduleReviewScreen Interval validation should disable create button when selected item has no intervals",
          "state": "passed"
        },
        {
          "name": "should enable create button after deselecting item with missing intervals",
          "fullName": "MaintenanceScheduleReviewScreen Interval validation should enable create button after deselecting item with missing intervals",
          "state": "passed"
        },
        {
          "name": "should show warning alert for items missing intervals",
          "fullName": "MaintenanceScheduleReviewScreen Interval validation should show warning alert for items missing intervals",
          "state": "passed"
        },
        {
          "name": "should enable create button after editing interval on item",
          "fullName": "MaintenanceScheduleReviewScreen Interval validation should enable create button after editing interval on item",
          "state": "passed"
        },
        {
          "name": "should render in fullscreen mode on mobile viewports",
          "fullName": "MaintenanceScheduleReviewScreen Responsive layout should render in fullscreen mode on mobile viewports",
          "state": "passed"
        },
        {
          "name": "should render as modal dialog on desktop viewports",
          "fullName": "MaintenanceScheduleReviewScreen Responsive layout should render as modal dialog on desktop viewports",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/components/ErrorState.test.tsx",
      "tests": [
        {
          "name": "should render error message",
          "fullName": "ErrorState should render error message",
          "state": "passed"
        },
        {
          "name": "should render retry button when onRetry provided",
          "fullName": "ErrorState should render retry button when onRetry provided",
          "state": "passed"
        },
        {
          "name": "should not render retry button when onRetry not provided",
          "fullName": "ErrorState should not render retry button when onRetry not provided",
          "state": "passed"
        },
        {
          "name": "should show default message when error has no message",
          "fullName": "ErrorState should show default message when error has no message",
          "state": "passed"
        }
      ]
    },
    {
      "moduleId": "/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/AdminUsersPage.test.tsx",
      "tests": [
        {
          "name": "should show loading state",
          "fullName": "AdminUsersPage should show loading state",
          "state": "failed",
          "errors": [
            {
              "message": "Error: No QueryClient set, use QueryClientProvider to set one\n    at useQueryClient (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/QueryClientProvider.tsx:18:11)\n    at useBaseQuery (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/useBaseQuery.ts:54:18)\n    at useQuery (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/useQuery.ts:51:10)\n    at useUsers (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/hooks/useUsers.ts:47:18)\n    at AdminUsersPage (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/pages/admin/AdminUsersPage.tsx:139:46)\n    at Object.react_stack_bottom_frame (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20)\n    at renderWithHooks (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22)\n    at updateFunctionComponent (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19)\n    at beginWork (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18)\n    at runWithFiberInDEV (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:874:13)\n    at performUnitOfWork (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22)\n    at workLoopSync (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41)\n    at renderRootSync (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17450:11)\n    at performWorkOnRoot (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:16583:35)\n    at performWorkOnRootViaSchedulerTask (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:18957:7)\n    at flushActQueue (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react/cjs/react.development.js:590:34)\n    at Object.<anonymous>.process.env.NODE_ENV.exports.act (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react/cjs/react.development.js:884:10)\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/act-compat.js:46:25\n    at renderRoot (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/pure.js:189:26)\n    at render (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/pure.js:291:10)\n    at renderWithRouter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/AdminUsersPage.test.tsx:16:16)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/AdminUsersPage.test.tsx:28:5)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        },
        {
          "name": "should redirect non-admin users",
          "fullName": "AdminUsersPage should redirect non-admin users",
          "state": "failed",
          "errors": [
            {
              "message": "Error: No QueryClient set, use QueryClientProvider to set one\n    at useQueryClient (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/QueryClientProvider.tsx:18:11)\n    at useBaseQuery (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/useBaseQuery.ts:54:18)\n    at useQuery (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/useQuery.ts:51:10)\n    at useUsers (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/hooks/useUsers.ts:47:18)\n    at AdminUsersPage (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/pages/admin/AdminUsersPage.tsx:139:46)\n    at Object.react_stack_bottom_frame (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20)\n    at renderWithHooks (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22)\n    at updateFunctionComponent (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19)\n    at beginWork (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18)\n    at runWithFiberInDEV (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:874:13)\n    at performUnitOfWork (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22)\n    at workLoopSync (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41)\n    at renderRootSync (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17450:11)\n    at performWorkOnRoot (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:16583:35)\n    at performWorkOnRootViaSchedulerTask (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:18957:7)\n    at flushActQueue (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react/cjs/react.development.js:590:34)\n    at Object.<anonymous>.process.env.NODE_ENV.exports.act (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react/cjs/react.development.js:884:10)\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/act-compat.js:46:25\n    at renderRoot (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/pure.js:189:26)\n    at render (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/pure.js:291:10)\n    at renderWithRouter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/AdminUsersPage.test.tsx:16:16)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/AdminUsersPage.test.tsx:41:5)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        },
        {
          "name": "should render page for admin users",
          "fullName": "AdminUsersPage should render page for admin users",
          "state": "failed",
          "errors": [
            {
              "message": "Error: No QueryClient set, use QueryClientProvider to set one\n    at useQueryClient (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/QueryClientProvider.tsx:18:11)\n    at useBaseQuery (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/useBaseQuery.ts:54:18)\n    at useQuery (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@tanstack/react-query/src/useQuery.ts:51:10)\n    at useUsers (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/hooks/useUsers.ts:47:18)\n    at AdminUsersPage (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/pages/admin/AdminUsersPage.tsx:139:46)\n    at Object.react_stack_bottom_frame (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20)\n    at renderWithHooks (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22)\n    at updateFunctionComponent (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19)\n    at beginWork (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18)\n    at runWithFiberInDEV (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:874:13)\n    at performUnitOfWork (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22)\n    at workLoopSync (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41)\n    at renderRootSync (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:17450:11)\n    at performWorkOnRoot (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:16583:35)\n    at performWorkOnRootViaSchedulerTask (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react-dom/cjs/react-dom-client.development.js:18957:7)\n    at flushActQueue (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react/cjs/react.development.js:590:34)\n    at Object.<anonymous>.process.env.NODE_ENV.exports.act (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/react/cjs/react.development.js:884:10)\n    at /Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/act-compat.js:46:25\n    at renderRoot (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/pure.js:189:26)\n    at render (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/@testing-library/react/dist/pure.js:291:10)\n    at renderWithRouter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/AdminUsersPage.test.tsx:16:16)\n    at Object.<anonymous> (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/src/features/admin/__tests__/AdminUsersPage.test.tsx:63:5)\n    at Promise.then.completed (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:298:28)\n    at new Promise (<anonymous>)\n    at callAsyncCircusFn (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/utils.js:231:10)\n    at _callCircusTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:316:40)\n    at processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at _runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:252:3)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:126:9)\n    at _runTestsForDescribeBlock (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:121:9)\n    at run (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/run.js:71:3)\n    at runAndTransformResultsToJestFormat (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)\n    at jestAdapter (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)\n    at runTestInternal (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:367:16)\n    at runTest (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/runTest.js:444:34)\n    at Object.worker (/Users/egullickson/Documents/Technology/coding/motovaultpro/frontend/node_modules/jest-runner/build/testWorker.js:106:12)"
            }
          ]
        }
      ]
    }
  ],
  "unhandledErrors": [],
  "reason": "failed"
}