{ "results": { "tool": { "name": "jest" }, "summary": { "tests": 717, "passed": 708, "failed": 0, "pending": 0, "skipped": 0, "other": 9, "start": 1765578485570, "stop": 1765578514673 }, "tests": [ { "name": "useObservationsUpdates should return an object", "duration": 20, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates" }, { "name": "useObservationsUpdates when there is no local observation with the resource_uuid should return without writing to a local observation", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when there is no local observation with the resource_uuid" }, { "name": "useObservationsUpdates when the update is a comment when the local observation has viewed fields not initialized should write correct viewed status for comments and identifications", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a comment > when the local observation has viewed fields not initialized" }, { "name": "useObservationsUpdates when the update is a comment when the local observation has viewed comments and viewed identifications should write correct viewed status for comments and identifications", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a comment > when the local observation has viewed comments and viewed identifications" }, { "name": "useObservationsUpdates when the update is a comment when the local observation has viewed comments and not viewed identifications should write correct viewed status for comments and identifications", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a comment > when the local observation has viewed comments and not viewed identifications" }, { "name": "useObservationsUpdates when the update is a comment when the local observation has not viewed comments and viewed identifications should write correct viewed status for comments and identifications", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a comment > when the local observation has not viewed comments and viewed identifications" }, { "name": "useObservationsUpdates when the update is a comment when the local observation has not viewed comments and not viewed identifications should write correct viewed status for comments and identifications", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a comment > when the local observation has not viewed comments and not viewed identifications" }, { "name": "useObservationsUpdates when the update is a identification when the local observation has viewed fields not initialized should write correct viewed status for comments and identifications", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a identification > when the local observation has viewed fields not initialized" }, { "name": "useObservationsUpdates when the update is a identification when the local observation has viewed comments and viewed identifications should write correct viewed status for comments and identifications", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a identification > when the local observation has viewed comments and viewed identifications" }, { "name": "useObservationsUpdates when the update is a identification when the local observation has viewed comments and not viewed identifications should write correct viewed status for comments and identifications", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a identification > when the local observation has viewed comments and not viewed identifications" }, { "name": "useObservationsUpdates when the update is a identification when the local observation has not viewed comments and viewed identifications should write correct viewed status for comments and identifications", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a identification > when the local observation has not viewed comments and viewed identifications" }, { "name": "useObservationsUpdates when the update is a identification when the local observation has not viewed comments and not viewed identifications should write correct viewed status for comments and identifications", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a identification > when the local observation has not viewed comments and not viewed identifications" }, { "name": "useObservationsUpdates when the update is a both when the local observation has viewed fields not initialized should write correct viewed status for comments and identifications", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a both > when the local observation has viewed fields not initialized" }, { "name": "useObservationsUpdates when the update is a both when the local observation has viewed comments and viewed identifications should write correct viewed status for comments and identifications", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a both > when the local observation has viewed comments and viewed identifications" }, { "name": "useObservationsUpdates when the update is a both when the local observation has viewed comments and not viewed identifications should write correct viewed status for comments and identifications", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a both > when the local observation has viewed comments and not viewed identifications" }, { "name": "useObservationsUpdates when the update is a both when the local observation has not viewed comments and viewed identifications should write correct viewed status for comments and identifications", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a both > when the local observation has not viewed comments and viewed identifications" }, { "name": "useObservationsUpdates when the update is a both when the local observation has not viewed comments and not viewed identifications should write correct viewed status for comments and identifications", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationsUpdates.test.js", "retries": 0, "flaky": false, "suite": "useObservationsUpdates.test.js > useObservationsUpdates > when the update is a both > when the local observation has not viewed comments and not viewed identifications" }, { "name": "Notifications should show a notification", "duration": 222, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/Notifications.test.js", "retries": 0, "flaky": false, "suite": "Notifications.test.js > Notifications" }, { "name": "Notifications should show a photo for an observation not in the local database", "duration": 64, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/Notifications.test.js", "retries": 0, "flaky": false, "suite": "Notifications.test.js > Notifications" }, { "name": "MyObservations localization for current user should be English by default", "duration": 210, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservationsLocalization.test.js", "retries": 0, "flaky": false, "suite": "MyObservationsLocalization.test.js > MyObservations > localization for current user" }, { "name": "with local taxon should return an object", "duration": 112, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useTaxon.test.js", "retries": 0, "flaky": false, "suite": "useTaxon.test.js > with local taxon" }, { "name": "with local taxon when there is a local taxon with taxon id should return local taxon with default photo", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useTaxon.test.js", "retries": 0, "flaky": false, "suite": "useTaxon.test.js > with local taxon > when there is a local taxon with taxon id" }, { "name": "with local taxon when there is a local taxon with taxon id should request a taxon from the API if the local copy is out of date", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useTaxon.test.js", "retries": 0, "flaky": false, "suite": "useTaxon.test.js > with local taxon > when there is a local taxon with taxon id" }, { "name": "when there is no local taxon with taxon id with fetchRemote: true should request the taxon from the API", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useTaxon.test.js", "retries": 0, "flaky": false, "suite": "useTaxon.test.js > when there is no local taxon with taxon id > with fetchRemote: true" }, { "name": "when there is no local taxon with taxon id with fetchRemote: true should return the argument taxon if request fails", "duration": 37, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useTaxon.test.js", "retries": 0, "flaky": false, "suite": "useTaxon.test.js > when there is no local taxon with taxon id > with fetchRemote: true" }, { "name": "when there is no local taxon with taxon id with fetchRemote: true should return a taxon like a local taxon record if the request succeeds", "duration": 66, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useTaxon.test.js", "retries": 0, "flaky": false, "suite": "useTaxon.test.js > when there is no local taxon with taxon id > with fetchRemote: true" }, { "name": "when there is no local taxon with taxon id with fetchRemote: false should not call the API and return passed in taxon", "duration": 20, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useTaxon.test.js", "retries": 0, "flaky": false, "suite": "useTaxon.test.js > when there is no local taxon with taxon id > with fetchRemote: false" }, { "name": "ObsDetails ObsDetailsContainer with an observation where we don't know if the user has viewed comments should make a request to observation/viewedUpdates", "duration": 277, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails > ObsDetailsContainer > with an observation where we don't know if the user has viewed comments" }, { "name": "ObsDetails ObsDetailsDefaultModeScreensWrapper with an observation where we don't know if the user has viewed comments should make a request to observation/viewedUpdates", "duration": 111, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails > ObsDetailsDefaultModeScreensWrapper > with an observation where we don't know if the user has viewed comments" }, { "name": "ActivityHeaderContainer withdraw ID should request an update to the identification without touching the body", "duration": 245, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsDetails/ActivityTab/ActivityHeaderContainer.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderContainer.test.js > ActivityHeaderContainer > withdraw ID" }, { "name": "ActivityHeaderContainer restore ID should update the identification's current attribute to false", "duration": 141, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsDetails/ActivityTab/ActivityHeaderContainer.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderContainer.test.js > ActivityHeaderContainer > restore ID" }, { "name": "Explore should render observations view list correctly on page load", "duration": 221, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > Explore" }, { "name": "Explore should switch to species view list correctly", "duration": 171, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > Explore" }, { "name": "Explore should display observations view grid correctly", "duration": 80, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > Explore" }, { "name": "Explore should trigger new observation fetch on pull-to-refresh in list view", "duration": 137, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > Explore" }, { "name": "Explore should trigger new observation fetch when filters change", "duration": 186, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > Explore" }, { "name": "basic rendering should render place_guess and latitude", "duration": 251, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOnline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOnline.test.js > basic rendering" }, { "name": "location fetching should fetch location when new observation hasn't saved", "duration": 91, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOnline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOnline.test.js > location fetching" }, { "name": "location fetching shouldn't fetch location for existing obs on device that hasn't uploaded", "duration": 101, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOnline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOnline.test.js > location fetching" }, { "name": "location fetching shouldn't fetch location for existing observation created elsewhere", "duration": 118, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOnline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOnline.test.js > location fetching" }, { "name": "multiple observation upload/save progress should show upload status when upload button pressed", "duration": 135, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOnline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOnline.test.js > multiple observation upload/save progress" }, { "name": "multiple observation upload/save progress should show saved status when saved button pressed", "duration": 103, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOnline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOnline.test.js > multiple observation upload/save progress" }, { "name": "multiple observation upload/save progress should show both saved and uploading status when saved and upload button pressed", "duration": 160, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOnline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOnline.test.js > multiple observation upload/save progress" }, { "name": "multiple observation upload/save progress should show uploaded status when 1 observation is uploaded in multi-observation upload flow", "duration": 116, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOnline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOnline.test.js > multiple observation upload/save progress" }, { "name": "ObsEdit offline creation should fetch coordinates", "duration": 425, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/ObsEditOffline.test.js", "retries": 0, "flaky": false, "suite": "ObsEditOffline.test.js > ObsEdit offline > creation" }, { "name": "SimpleUploadBannerContainer displays syncing text before beginning uploads when sync button tapped", "duration": 40, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays a pending upload", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays an upload in progress", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays a completed upload", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays multiple pending uploads", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays multiple uploads in progress", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays multiple completed uploads", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays 1 upload completed and 4 failed", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays only error when all 5 uploads failed", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays 4 uploads completed and 1 failed", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays deletions completed", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer displays deletion error", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer should hide banner if logged out and only one observation", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "SimpleUploadBannerContainer should show banner if logged out with more than one observation", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/SimpleUploadBannerContainer.test.js", "retries": 0, "flaky": false, "suite": "SimpleUploadBannerContainer.test.js > SimpleUploadBannerContainer" }, { "name": "ObsDetails renders obs details from remote call", "duration": 83, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails" }, { "name": "ObsDetails Observation with no evidence should render fallback image icon instead of photos", "duration": 32, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails > Observation with no evidence" }, { "name": "ObsDetails viewing someone else's observation should agree with another user's identification when agree button pressed", "duration": 53, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails > viewing someone else's observation" }, { "name": "MyObservations when signed out should not make a request to users/me", "duration": 156, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed out" }, { "name": "MyObservations when signed out should not make a request to observations/updates", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed out" }, { "name": "MyObservations when signed in with unsynced observations displays unuploaded status", "duration": 135, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with unsynced observations" }, { "name": "MyObservations when signed in with unsynced observations displays upload in progress status when toolbar tapped", "duration": 415, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with unsynced observations" }, { "name": "MyObservations when signed in with unsynced observations displays upload in progress status when individual upload tapped", "duration": 257, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with unsynced observations" }, { "name": "MyObservations when signed in with unsynced observations shows error when upload network connection fails", "duration": 234, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with unsynced observations" }, { "name": "MyObservations when signed in with synced observations should make a request to observations/updates", "duration": 58, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with synced observations" }, { "name": "MyObservations when signed in with synced observations hides observation status in grid view", "duration": 69, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with synced observations" }, { "name": "MyObservations when signed in with synced observations renders list view on button press", "duration": 65, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with synced observations" }, { "name": "MyObservations when signed in with synced observations displays observation status in list view in advanced mode", "duration": 80, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with synced observations" }, { "name": "MyObservations when signed in with synced observations doesn't throw an error when sync button tapped", "duration": 65, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with synced observations" }, { "name": "MyObservations when signed in with synced observations should trigger manual observation sync on pull-to-refresh", "duration": 105, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with synced observations" }, { "name": "MyObservations when signed in with synced observations on screen focus downloads deleted observations from server when screen focused", "duration": 44, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with synced observations > on screen focus" }, { "name": "MyObservations when signed in with synced observations on screen focus deletes local observations if they have been deleted on server", "duration": 43, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with synced observations > on screen focus" }, { "name": "MyObservations when signed in with no observations should show AI camera button to create first observation", "duration": 36, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservations.test.js", "retries": 0, "flaky": false, "suite": "MyObservations.test.js > MyObservations > when signed in > with no observations" }, { "name": "ObsDetails should not have accessibility errors", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails" }, { "name": "ObsDetails renders obs details from remote call", "duration": 90, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails" }, { "name": "ObsDetails renders data tab on button press", "duration": 61, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails" }, { "name": "ObsDetails renders observed date of observation in header", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails" }, { "name": "ObsDetails Observation with no evidence should render fallback image icon instead of photos", "duration": 30, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails > Observation with no evidence" }, { "name": "ObsDetails activity tab navigates to taxon details on button press", "duration": 27, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails > activity tab" }, { "name": "ObsDetails activity tab shows network error image instead of observation photos if user is offline", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails > activity tab" }, { "name": "ObsDetails viewing someone else's observation should agree with another user's identification when agree button pressed", "duration": 78, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetails.test.js", "retries": 0, "flaky": false, "suite": "ObsDetails.test.js > ObsDetails > viewing someone else's observation" }, { "name": "TaxonDetails renders taxon photos from API response", "duration": 98, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails" }, { "name": "TaxonDetails does not show sticky select taxon button on default screen", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails" }, { "name": "TaxonDetails select button should appear from Explore via ObsDetails via Suggestions", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear" }, { "name": "TaxonDetails select button should appear from Explore via ObsDetails via Suggestions via taxonomy", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear" }, { "name": "TaxonDetails select button should appear from MyObs via ObsDetails via Suggestions", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear" }, { "name": "TaxonDetails select button should appear from ObsEdit via Suggestions", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear" }, { "name": "TaxonDetails select button should appear from ObsEdit via Suggestions via taxonomy", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear" }, { "name": "TaxonDetails select button should appear from ObsEdit via TaxonSearch", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear" }, { "name": "TaxonDetails select button should appear from ObsEdit via TaxonSearch via taxonomy", "duration": 28, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear" }, { "name": "TaxonDetails select button should appear when logged out from Explore via ObsDetails via Suggestions", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear > when logged out" }, { "name": "TaxonDetails select button should appear when logged out from ObsEdit via Suggestions", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear > when logged out" }, { "name": "TaxonDetails select button should appear when logged out from ObsEdit via Suggestions via taxonomy", "duration": 30, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should appear > when logged out" }, { "name": "TaxonDetails select button should not appear from Explore", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should not appear" }, { "name": "TaxonDetails select button should not appear from Explore via taxonomy", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should not appear" }, { "name": "TaxonDetails select button should not appear from Explore via ObsDetails", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should not appear" }, { "name": "TaxonDetails select button should not appear from MyObs via ObsDetails", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should not appear" }, { "name": "TaxonDetails select button should not appear from AICamera", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > select button > should not appear" }, { "name": "TaxonDetails for taxon with Wikipedia content renders Wikipedia content form API response", "duration": 37, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > for taxon with Wikipedia content" }, { "name": "TaxonDetails for taxon with Wikipedia content navigates to Wikipedia on button press", "duration": 55, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetails.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetails.test.js > TaxonDetails > for taxon with Wikipedia content" }, { "name": "automatic sync while user is logged out should not fetch remote observations or deletions when user is logged out", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/useSyncObservations.test.js", "retries": 0, "flaky": false, "suite": "useSyncObservations.test.js > automatic sync while user is logged out" }, { "name": "automatic sync while user is logged out should delete local observations without making a server call", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/useSyncObservations.test.js", "retries": 0, "flaky": false, "suite": "useSyncObservations.test.js > automatic sync while user is logged out" }, { "name": "automatic sync while user is logged in fetch remote deletions should fetch deleted observations from server", "duration": 54, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/useSyncObservations.test.js", "retries": 0, "flaky": false, "suite": "useSyncObservations.test.js > automatic sync while user is logged in > fetch remote deletions" }, { "name": "automatic sync while user is logged in handle local deletions should not make deletion API call for unsynced observations", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/useSyncObservations.test.js", "retries": 0, "flaky": false, "suite": "useSyncObservations.test.js > automatic sync while user is logged in > handle local deletions" }, { "name": "automatic sync while user is logged in handle local deletions should make deletion API call for previously synced observations", "duration": 61, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/useSyncObservations.test.js", "retries": 0, "flaky": false, "suite": "useSyncObservations.test.js > automatic sync while user is logged in > handle local deletions" }, { "name": "automatic sync while user is logged in should fetch remote observations from server in automatic sync", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/useSyncObservations.test.js", "retries": 0, "flaky": false, "suite": "useSyncObservations.test.js > automatic sync while user is logged in" }, { "name": "automatic sync while user is logged in should not create upload queue", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/useSyncObservations.test.js", "retries": 0, "flaky": false, "suite": "useSyncObservations.test.js > automatic sync while user is logged in" }, { "name": "uploadObservation should start and complete progress tracking", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should validate the API token", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should throw an error if no API token is available", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should prepare the observation for upload", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should create a new observation if it was not previously synced", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should update an existing observation if it was previously synced", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should call uploadObservationMedia with correct parameters", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should call attachMediaToObservation with correct parameters after observation creation", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should mark the record as uploaded after media is attached", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should return the API response", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should throw an error if observation creation fails", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should throw an error if media upload fails", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should throw an error if media attachment fails", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should not complete progress tracking when errors occur", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should throw an error when observation creation returns null response", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "uploadObservation should pass custom options to API calls", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/observationUploader.test.js", "retries": 0, "flaky": false, "suite": "observationUploader.test.js > uploadObservation" }, { "name": "DisplayTaxonName when common name is first renders correct taxon for species", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when common name is first" }, { "name": "DisplayTaxonName when common name is first renders correct taxon w/o common name", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when common name is first" }, { "name": "DisplayTaxonName when common name is first renders correct taxon w/o common name and no species", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when common name is first" }, { "name": "DisplayTaxonName when common name is first renders correct taxon for a subfamily", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when common name is first" }, { "name": "DisplayTaxonName when common name is first renders correct taxon for subspecies", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when common name is first" }, { "name": "DisplayTaxonName when common name is first renders correct taxon for improperly capitalized common name", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when common name is first" }, { "name": "DisplayTaxonName when common name is first renders correct taxon for species in grid view", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when common name is first" }, { "name": "DisplayTaxonName when common name is first displays correct capitalization for multiple lexicons", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when common name is first" }, { "name": "DisplayTaxonName when scientific name is first renders correct taxon for species", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when scientific name is first" }, { "name": "DisplayTaxonName when scientific name is first renders correct taxon w/o common name", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when scientific name is first" }, { "name": "DisplayTaxonName when scientific name is first renders correct taxon w/o common name and no species", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when scientific name is first" }, { "name": "DisplayTaxonName when scientific name is first renders correct taxon for species", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when scientific name is first" }, { "name": "DisplayTaxonName when scientific name is first renders correct taxon for species in grid view", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when scientific name is first" }, { "name": "DisplayTaxonName when only scientific name renders correct taxon for species", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when only scientific name" }, { "name": "DisplayTaxonName when only scientific name renders correct taxon w/o common name", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when only scientific name" }, { "name": "DisplayTaxonName when only scientific name renders correct taxon w/o common name and no species", "duration": 31, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when only scientific name" }, { "name": "DisplayTaxonName when only scientific name renders correct taxon for species", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when only scientific name" }, { "name": "DisplayTaxonName when only scientific name renders correct taxon for species in grid view", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when only scientific name" }, { "name": "DisplayTaxonName when taxon is a Realm object fills in a missing genus rank from the rank_level", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when taxon is a Realm object" }, { "name": "DisplayTaxonName when taxon is undefined it displays fallback text", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when taxon is undefined" }, { "name": "DisplayTaxonName when displayed as plain text within a Trans component it displays common name followed by scientific name", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when displayed as plain text within a Trans component" }, { "name": "DisplayTaxonName when displayed as plain text within a Trans component it displays scientific name followed by common name", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when displayed as plain text within a Trans component" }, { "name": "DisplayTaxonName when displayed as plain text within a Trans component it displays scientific name only", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/DisplayTaxonName.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxonName.test.js > DisplayTaxonName > when displayed as plain text within a Trans component" }, { "name": "PhotoSharing Share Single Photo should handle single photo in default mode", "duration": 97, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > PhotoSharing > Share Single Photo" }, { "name": "PhotoSharing Share Single Photo should handle single photo in advanced mode", "duration": 110, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > PhotoSharing > Share Single Photo" }, { "name": "PhotoSharing Share Single Photo should handle observation creation error", "duration": 76, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > PhotoSharing > Share Single Photo" }, { "name": "PhotoSharing Share Single Photo should handle photo with no description", "duration": 86, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > PhotoSharing > Share Single Photo" }, { "name": "PhotoSharing Share Multiple Photos should navigate to GroupPhotos for multiple photos", "duration": 18, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > PhotoSharing > Share Multiple Photos" }, { "name": "PhotoSharing Share Multiple Photos should filter out non-image files", "duration": 28, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > PhotoSharing > Share Multiple Photos" }, { "name": "PhotoSharing Back navigation should handle expected behavior for blur/focus navigation", "duration": 35, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > PhotoSharing > Back navigation" }, { "name": "MediaViewer navigation from ObsDetail should show the first photo when tapped", "duration": 553, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer navigation > from ObsDetail" }, { "name": "MediaViewer navigation from ObsDetail should not show the first photo when second tapped", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer navigation > from ObsDetail" }, { "name": "MediaViewer navigation from ObsDetail should not show delete button", "duration": 270, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer navigation > from ObsDetail" }, { "name": "MediaViewer navigation from TaxonDetail should show the first photo when tapped", "duration": 416, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer navigation > from TaxonDetail" }, { "name": "MediaViewer navigation from TaxonDetail should not show delete button", "duration": 333, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer navigation > from TaxonDetail" }, { "name": "MediaViewer navigation from Suggestions should show the selected photo when tapped", "duration": 287, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer navigation > from Suggestions" }, { "name": "MediaViewer navigation from Suggestions should not show the currently not selected photo when tapped", "duration": 324, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer navigation > from Suggestions" }, { "name": "MediaViewer navigation from Suggestions should not show delete button", "duration": 408, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer navigation > from Suggestions" }, { "name": "prepareMediaForUpload should map Photo upload", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "prepareMediaForUpload should map ObservationPhoto attachment", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "prepareMediaForUpload should map ObservationPhoto update", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "prepareMediaForUpload should map ObservationSound upload", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "prepareMediaForUpload should map ObservationSound attachment", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "prepareMediaForUpload should throw an error for unsupported media type", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "prepareMediaForUpload should throw an error for unsupported action", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "prepareMediaForUpload should throw an error if attach observationId is required but not provided", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "prepareMediaForUpload should throw an error if update observationId is required but not provided", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareMediaForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareMediaForUpload.test.js > prepareMediaForUpload" }, { "name": "mediaUploader uploadObservationMedia should upload photos and sounds in parallel", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > uploadObservationMedia" }, { "name": "mediaUploader uploadObservationMedia should handle empty media arrays", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > uploadObservationMedia" }, { "name": "mediaUploader uploadObservationMedia should handle photos that need updates", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > uploadObservationMedia" }, { "name": "mediaUploader uploadObservationMedia should handle missing photo objects gracefully", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > uploadObservationMedia" }, { "name": "mediaUploader attachMediaToObservation should attach photos and sounds to an observation", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > attachMediaToObservation" }, { "name": "mediaUploader attachMediaToObservation should handle empty media arrays", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > attachMediaToObservation" }, { "name": "mediaUploader filterMediaForUpload should correctly filter media for upload", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > filterMediaForUpload" }, { "name": "mediaUploader progress tracking should track progress for upload evidence operations", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > progress tracking" }, { "name": "mediaUploader progress tracking should track progress for attach operations", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > progress tracking" }, { "name": "mediaUploader error handling should handle API errors gracefully", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > error handling" }, { "name": "mediaUploader error handling should filter out null photos", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/mediaUploader.test.js", "retries": 0, "flaky": false, "suite": "mediaUploader.test.js > mediaUploader > error handling" }, { "name": "formatApiDatetime in default locale should return missing date string if no date is present", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return missing date string if date is empty", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return a localized date when a date string is passed in", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return a localized datetime when a datetime string is passed in", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return a localized datetime for a remote observation created_at date", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return a localized datetime for a remote identification created_at date", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return a localized datetime for a remote comment created_at date", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return the date in the local time zone by default", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return the date in a requested time zone", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should return a localized datetime for a local observation created_at date", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in default locale should optionally show the date in the original time zone", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in default locale" }, { "name": "formatApiDatetime in es-MX should return a localized date when a date string is passed in", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatApiDatetime > in es-MX" }, { "name": "getNowISO should return a valid ISO8601 string", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > getNowISO" }, { "name": "getNowISO should not have a time zone", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > getNowISO" }, { "name": "formatISONoSeconds should not include seconds", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatISONoSeconds" }, { "name": "formatDifferenceForHumans should show difference in minutes", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatDifferenceForHumans" }, { "name": "formatDifferenceForHumans should show difference in hours", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatDifferenceForHumans" }, { "name": "formatDifferenceForHumans should show difference in days", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatDifferenceForHumans" }, { "name": "formatDifferenceForHumans should show not show fractional days", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatDifferenceForHumans" }, { "name": "formatDifferenceForHumans should show difference in weeks", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatDifferenceForHumans" }, { "name": "formatDifferenceForHumans should show not show fractional weeks", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatDifferenceForHumans" }, { "name": "formatDifferenceForHumans should show day and month if over 30 days ago but still this year", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatDifferenceForHumans" }, { "name": "formatDifferenceForHumans should show full date for prior years", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/dateAndTime.test.js", "retries": 0, "flaky": false, "suite": "dateAndTime.test.js > formatDifferenceForHumans" }, { "name": "logged in from MyObs from TaxonDetails should show observations view and navigate back to TaxonDetails", "duration": 875, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > logged in > from MyObs > from TaxonDetails" }, { "name": "logged in from MyObs from UserProfile observations button should show observations view and navigate back to UserProfile", "duration": 498, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > logged in > from MyObs > from UserProfile observations button" }, { "name": "logged in from MyObs from UserProfile species button should show species view and navigate back to UserProfile", "duration": 362, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > logged in > from MyObs > from UserProfile species button" }, { "name": "logged in from bottom tab navigator Explore button from RootExplore -> X -> Explore -> back should navigate from TaxonDetails to Explore and back to TaxonDetails", "duration": 450, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > logged in > from bottom tab navigator Explore button > from RootExplore -> X -> Explore -> back" }, { "name": "logged in from bottom tab navigator Explore button from RootExplore -> X -> Explore -> back should navigate from UserProfile to Explore and back to UserProfile", "duration": 561, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > logged in > from bottom tab navigator Explore button > from RootExplore -> X -> Explore -> back" }, { "name": "logged in from bottom tab navigator Explore button without location permissions should default to global species view and not have a back button", "duration": 97, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > logged in > from bottom tab navigator Explore button > without location permissions" }, { "name": "logged in from bottom tab navigator Explore button with location permissions should default to nearby location", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/Explore.test.js", "retries": 0, "flaky": false, "suite": "Explore.test.js > logged in > from bottom tab navigator Explore button > with location permissions" }, { "name": "ActivityHeaderKebabMenu renders kebab menu buttons", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders correct kebab menu for non-withdrawn id from current user", "duration": 21, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders correct kebab menu for withdrawn id from current user", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders correct kebab menu for comment from current user", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders WithdrawIDSheet when withdraw is pressed", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders delete comment sheet when delete comment is pressed", "duration": 28, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders kebab menu buttons", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders correct kebab menu for non-withdrawn id from current user", "duration": 25, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders correct kebab menu for withdrawn id from current user", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders correct kebab menu for comment from current user", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders WithdrawIDSheet when withdraw is pressed", "duration": 31, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "ActivityHeaderKebabMenu renders delete comment sheet when delete comment is pressed", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityHeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "ActivityHeaderKebabMenu.test.js > ActivityHeaderKebabMenu" }, { "name": "DetailsTab should show description of observation", "duration": 60, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should display map if user is online", "duration": 31, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should show tiles on map for given taxon", "duration": 24, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should not show tiles for observation with no taxon id", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should display current location coordinates", "duration": 21, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should show data quality options", "duration": 20, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should display DQA button if current user is logged in", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should not display DQA button if current user is logged out", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should not display projects section if observation belongs to zero projects", "duration": 35, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "DetailsTab should display project count from both collection & traditional projects ", "duration": 44, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DetailsTab.test.js", "retries": 0, "flaky": false, "suite": "DetailsTab.test.js > DetailsTab" }, { "name": "MyObservationsSimple renders an observation", "duration": 113, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/MyObservationsSimple.test.js", "retries": 0, "flaky": false, "suite": "MyObservationsSimple.test.js > MyObservationsSimple" }, { "name": "MyObservationsSimple renders multiple observations", "duration": 24, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/MyObservationsSimple.test.js", "retries": 0, "flaky": false, "suite": "MyObservationsSimple.test.js > MyObservationsSimple" }, { "name": "MyObservationsSimple render grid view", "duration": 44, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/MyObservationsSimple.test.js", "retries": 0, "flaky": false, "suite": "MyObservationsSimple.test.js > MyObservationsSimple" }, { "name": "MyObservationsSimple grid view portrait orientation on a phone should have 2 columns", "duration": 24, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/MyObservationsSimple.test.js", "retries": 0, "flaky": false, "suite": "MyObservationsSimple.test.js > MyObservationsSimple > grid view > portrait orientation > on a phone" }, { "name": "MyObservationsSimple grid view landscape orientation on a phone should have 2 columns", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/MyObservationsSimple.test.js", "retries": 0, "flaky": false, "suite": "MyObservationsSimple.test.js > MyObservationsSimple > grid view > landscape orientation > on a phone" }, { "name": "LanguageSettings uses locale preference of the local device", "duration": 41, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/LanguageSettings.test.js", "retries": 0, "flaky": false, "suite": "LanguageSettings.test.js > LanguageSettings" }, { "name": "LanguageSettings when signed in as Russian language user uses locale preference from server", "duration": 44, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/LanguageSettings.test.js", "retries": 0, "flaky": false, "suite": "LanguageSettings.test.js > LanguageSettings > when signed in as Russian language user" }, { "name": "LanguageSettings when signed in as Russian language user allows change to Swedish and requests remote locale change", "duration": 128, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/LanguageSettings.test.js", "retries": 0, "flaky": false, "suite": "LanguageSettings.test.js > LanguageSettings > when signed in as Russian language user" }, { "name": "LanguageSettings when signed in as Russian language user reverts to system locale on sign out", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/LanguageSettings.test.js", "retries": 0, "flaky": false, "suite": "LanguageSettings.test.js > LanguageSettings > when signed in as Russian language user" }, { "name": "SavedMatch should not show learn more button when offline", "duration": 38, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/SavedMatch.test.js", "retries": 0, "flaky": false, "suite": "SavedMatch.test.js > SavedMatch" }, { "name": "SavedMatch should not show map section for no latitude", "duration": 37, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/SavedMatch.test.js", "retries": 0, "flaky": false, "suite": "SavedMatch.test.js > SavedMatch" }, { "name": "SavedMatch should show map section when latitude is present", "duration": 84, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/SavedMatch.test.js", "retries": 0, "flaky": false, "suite": "SavedMatch.test.js > SavedMatch" }, { "name": "DQA Vote Buttons renders DQA vote buttons", "duration": 38, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/DataQualityAssesment/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > DQA Vote Buttons" }, { "name": "DQA Vote Buttons calls api when DQA disagree button is pressed", "duration": 51, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/DataQualityAssesment/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > DQA Vote Buttons" }, { "name": "DQA Vote Buttons calls api when DQA agree button is pressed", "duration": 31, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/DataQualityAssesment/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > DQA Vote Buttons" }, { "name": "MyObservationsSimple when signed out displays correct header", "duration": 85, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/MyObservationsSimple.test.js", "retries": 0, "flaky": false, "suite": "MyObservationsSimple.test.js > MyObservationsSimple > when signed out" }, { "name": "AddObsButton navigates user to AI camera", "duration": 36, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > AddObsButton" }, { "name": "AddObsButton opens model on long press", "duration": 29, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > AddObsButton" }, { "name": "with advanced user layout opens AddObsBottomSheet", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > with advanced user layout" }, { "name": "with advanced user layout navigates user to obs edit with no evidence", "duration": 18, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > with advanced user layout" }, { "name": "with advanced user layout does not open model on long press", "duration": 20, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > with advanced user layout" }, { "name": "with advanced user layout with advanced AICamera-only setting opens model on long press", "duration": 44, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/navigation/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > with advanced user layout > with advanced AICamera-only setting" }, { "name": "Sharing photos into the app should handle iOS photo share on app launch", "duration": 121, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > Sharing photos into the app" }, { "name": "Sharing photos into the app should handle Android photo share on app launch", "duration": 56, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/PhotoSharing.test.js", "retries": 0, "flaky": false, "suite": "PhotoSharing.test.js > Sharing photos into the app" }, { "name": "MediaViewer without media should not have accessibility errors", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > without media" }, { "name": "MediaViewer without media should not have any CustomImageZoom components", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > without media" }, { "name": "MediaViewer with media with one photo should not have accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > with one photo" }, { "name": "MediaViewer with media with one photo should have a CustomImageZoom component", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > with one photo" }, { "name": "MediaViewer with media with multiple photos should show the image specified by the uri prop", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > with multiple photos" }, { "name": "MediaViewer with media when editable should show the delete button", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > when editable" }, { "name": "MediaViewer with media when editable should not show AttributionButton", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > when editable" }, { "name": "MediaViewer with media when not editable should not show the delete button", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > when not editable" }, { "name": "MediaViewer with media when not editable should show that a photographer reserves all rights", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > when not editable" }, { "name": "MediaViewer with media when not editable should show that a photographer has applied a license", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > when not editable" }, { "name": "MediaViewer with media when not editable should not render the AttributionButton if attribution is not present", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > when not editable" }, { "name": "MediaViewer with media when not editable should render the AttributionButton if attribution is present", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MediaViewer/MediaViewer.test.js", "retries": 0, "flaky": false, "suite": "MediaViewer.test.js > MediaViewer > with media > when not editable" }, { "name": "Data Quality Assessment renders correct quality grade status", "duration": 51, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct quality grade status title", "duration": 21, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct quality grade status description", "duration": 18, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct metric titles", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct metric vote titles", "duration": 48, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders about section", "duration": 29, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct quality grade status", "duration": 42, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct quality grade status title", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct quality grade status description", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct metric titles", "duration": 36, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders correct metric vote titles", "duration": 43, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "Data Quality Assessment renders about section", "duration": 51, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DataQualityAssessment.test.js", "retries": 0, "flaky": false, "suite": "DataQualityAssessment.test.js > Data Quality Assessment" }, { "name": "GroupPhotosContainer combines photos", "duration": 54, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoImporter/GroupPhotosContainer.test.js", "retries": 0, "flaky": false, "suite": "GroupPhotosContainer.test.js > GroupPhotosContainer" }, { "name": "GroupPhotosContainer combines previously combined photos", "duration": 134, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoImporter/GroupPhotosContainer.test.js", "retries": 0, "flaky": false, "suite": "GroupPhotosContainer.test.js > GroupPhotosContainer" }, { "name": "GroupPhotosContainer separates combined photos", "duration": 78, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/PhotoImporter/GroupPhotosContainer.test.js", "retries": 0, "flaky": false, "suite": "GroupPhotosContainer.test.js > GroupPhotosContainer" }, { "name": "FilterModal should not have accessibility errors", "duration": 92, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/Modals/FilterModal.test.js", "retries": 0, "flaky": false, "suite": "FilterModal.test.js > FilterModal" }, { "name": "ProjectDetails should not have accessibility errors", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectDetails.test.js", "retries": 0, "flaky": false, "suite": "ProjectDetails.test.js > ProjectDetails" }, { "name": "ProjectDetails displays project details", "duration": 152, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectDetails.test.js", "retries": 0, "flaky": false, "suite": "ProjectDetails.test.js > ProjectDetails" }, { "name": "ProjectDetails renders when project has no description", "duration": 34, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectDetails.test.js", "retries": 0, "flaky": false, "suite": "ProjectDetails.test.js > ProjectDetails" }, { "name": "ProjectDetails should display date range if collection project has date range", "duration": 39, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectDetails.test.js", "retries": 0, "flaky": false, "suite": "ProjectDetails.test.js > ProjectDetails" }, { "name": "ProjectDetails should display date range if collection project has no date range", "duration": 37, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectDetails.test.js", "retries": 0, "flaky": false, "suite": "ProjectDetails.test.js > ProjectDetails" }, { "name": "ProjectDetails should display project type if project is traditional project", "duration": 29, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectDetails.test.js", "retries": 0, "flaky": false, "suite": "ProjectDetails.test.js > ProjectDetails" }, { "name": "ProjectDetails should display date range if umbrella project has date range", "duration": 55, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectDetails.test.js", "retries": 0, "flaky": false, "suite": "ProjectDetails.test.js > ProjectDetails" }, { "name": "ActivityTab renders", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityTab.test.js", "retries": 0, "flaky": false, "suite": "ActivityTab.test.js > ActivityTab" }, { "name": "ActivityItem renders name of identification taxon", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem renders agree button if user is logged in", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem does not render agree button if user is logged out", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem does not render agree button on second taxon display", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem shows agree sheet with correct taxon", "duration": 24, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem renders withdrawn id label", "duration": 28, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem should not show hidden content", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem should show unhidden content", "duration": 21, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "TaxonGridItem should be accessible", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/TaxonGridItem.test.js", "retries": 0, "flaky": false, "suite": "TaxonGridItem.test.js > TaxonGridItem" }, { "name": "TaxonGridItem should navigate to user profile on tap", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/TaxonGridItem.test.js", "retries": 0, "flaky": false, "suite": "TaxonGridItem.test.js > TaxonGridItem" }, { "name": "OtherDataSection has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/OtherDataSection.test.js", "retries": 0, "flaky": false, "suite": "OtherDataSection.test.js > OtherDataSection" }, { "name": "OtherDataSection opens notes sheet when notes dropdown is tapped", "duration": 38, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/OtherDataSection.test.js", "retries": 0, "flaky": false, "suite": "OtherDataSection.test.js > OtherDataSection" }, { "name": "OtherDataSection opens captive sheet when captive dropdown is tapped", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/OtherDataSection.test.js", "retries": 0, "flaky": false, "suite": "OtherDataSection.test.js > OtherDataSection" }, { "name": "OtherDataSection opens geoprivacy sheet when geoprivacy dropdown is tapped", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/OtherDataSection.test.js", "retries": 0, "flaky": false, "suite": "OtherDataSection.test.js > OtherDataSection" }, { "name": "IconicTaxonChooser should be accessible", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/IconicTaxonChooser.test.js", "retries": 0, "flaky": false, "suite": "IconicTaxonChooser.test.js > IconicTaxonChooser" }, { "name": "IconicTaxonChooser should show an iconic taxa as selected", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/IconicTaxonChooser.test.js", "retries": 0, "flaky": false, "suite": "IconicTaxonChooser.test.js > IconicTaxonChooser" }, { "name": "Map should be accessible", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Map.test.js", "retries": 0, "flaky": false, "suite": "Map.test.js > Map" }, { "name": "Map displays filtered observations on map", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Map.test.js", "retries": 0, "flaky": false, "suite": "Map.test.js > Map" }, { "name": "Map displays location indicator when given an observation w/ lat/lng", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Map.test.js", "retries": 0, "flaky": false, "suite": "Map.test.js > Map" }, { "name": "useCurrentUser should return current user", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useCurrentUser.test.js", "retries": 0, "flaky": false, "suite": "useCurrentUser.test.js > useCurrentUser" }, { "name": "AddObsButton should not have accessibility errors", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > AddObsButton" }, { "name": "AddObsButton renders correctly", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > AddObsButton" }, { "name": "AddObsButton does not render tooltip in default state", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > AddObsButton" }, { "name": "shows tooltip to logged out users with 2 observations", "duration": 529, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > shows tooltip" }, { "name": "shows tooltip to logged in users with less than 50 observations", "duration": 521, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > shows tooltip" }, { "name": "shows tooltip to new users only after they dismissed the account creation card", "duration": 544, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > shows tooltip" }, { "name": "shows tooltip to logged in users with more than 50 observations after card dismissal", "duration": 536, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsButton.test.js", "retries": 0, "flaky": false, "suite": "AddObsButton.test.js > shows tooltip" }, { "name": "CustomTabBar should not have accessibility errors", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/BottomTabNavigator/CustomTabBar.test.js", "retries": 0, "flaky": false, "suite": "CustomTabBar.test.js > CustomTabBar" }, { "name": "CustomTabBar should display person icon while user is logged out", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/BottomTabNavigator/CustomTabBar.test.js", "retries": 0, "flaky": false, "suite": "CustomTabBar.test.js > CustomTabBar" }, { "name": "CustomTabBar should display avatar while user is logged in", "duration": 20, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/BottomTabNavigator/CustomTabBar.test.js", "retries": 0, "flaky": false, "suite": "CustomTabBar.test.js > CustomTabBar" }, { "name": "CustomTabBar should display person icon when connectivity is low", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/BottomTabNavigator/CustomTabBar.test.js", "retries": 0, "flaky": false, "suite": "CustomTabBar.test.js > CustomTabBar" }, { "name": "CustomTabBar with advanced user layout should render correctly", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/BottomTabNavigator/CustomTabBar.test.js", "retries": 0, "flaky": false, "suite": "CustomTabBar.test.js > CustomTabBar with advanced user layout" }, { "name": "CustomTabBar with advanced user layout should not have accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/BottomTabNavigator/CustomTabBar.test.js", "retries": 0, "flaky": false, "suite": "CustomTabBar.test.js > CustomTabBar with advanced user layout" }, { "name": "Heading2 renders correctly", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Heading2.test.js", "retries": 0, "flaky": false, "suite": "Heading2.test.js > Heading2" }, { "name": "useWatchPosition with inaccurate location should be loading by default", "duration": 106, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useWatchPosition.test.js", "retries": 0, "flaky": false, "suite": "useWatchPosition.test.js > useWatchPosition with inaccurate location" }, { "name": "useWatchPosition with inaccurate location should return a user location", "duration": 156, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useWatchPosition.test.js", "retries": 0, "flaky": false, "suite": "useWatchPosition.test.js > useWatchPosition with inaccurate location" }, { "name": "useWatchPosition with accurate location should stop watching position when target accuracy reached", "duration": 359, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useWatchPosition.test.js", "retries": 0, "flaky": false, "suite": "useWatchPosition.test.js > useWatchPosition with accurate location" }, { "name": "useWatchPosition when shouldn't fetch should not watch position when shouldFetchLocation is false", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useWatchPosition.test.js", "retries": 0, "flaky": false, "suite": "useWatchPosition.test.js > useWatchPosition when shouldn't fetch" }, { "name": "Tabs should render correctly", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Tabs/Tabs.test.js", "retries": 0, "flaky": false, "suite": "Tabs.test.js > Tabs" }, { "name": "Tabs should not have accessibility errors", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Tabs/Tabs.test.js", "retries": 0, "flaky": false, "suite": "Tabs.test.js > Tabs" }, { "name": "Tabs should be clicked and display proper text", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Tabs/Tabs.test.js", "retries": 0, "flaky": false, "suite": "Tabs.test.js > Tabs" }, { "name": "Announcements should call inaturalistjs with locale as param", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/Announcements.test.js", "retries": 0, "flaky": false, "suite": "Announcements.test.js > Announcements" }, { "name": "Announcements should not render without announcements", "duration": 29, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/Announcements.test.js", "retries": 0, "flaky": false, "suite": "Announcements.test.js > Announcements" }, { "name": "Announcements with announcement should render correctly", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/Announcements.test.js", "retries": 0, "flaky": false, "suite": "Announcements.test.js > Announcements > with announcement" }, { "name": "Announcements with announcement should show body text", "duration": 41, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/Announcements.test.js", "retries": 0, "flaky": false, "suite": "Announcements.test.js > Announcements > with announcement" }, { "name": "Announcements with announcement should not show dismiss button", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/Announcements.test.js", "retries": 0, "flaky": false, "suite": "Announcements.test.js > Announcements > with announcement" }, { "name": "Announcements with dismissible announcement should show dismiss button", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/Announcements.test.js", "retries": 0, "flaky": false, "suite": "Announcements.test.js > Announcements > with dismissible announcement" }, { "name": "Announcements with multiple announcements show announcement with oldest start date", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/MyObservations/Announcements.test.js", "retries": 0, "flaky": false, "suite": "Announcements.test.js > Announcements > with multiple announcements" }, { "name": "ObserverDetails renders observed date of observation in header", "duration": 21, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObserverDetails.test.js", "retries": 0, "flaky": false, "suite": "ObserverDetails.test.js > ObserverDetails" }, { "name": "CameraContainer should not have accessibility errors", "duration": 20, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/CameraContainer.test.js", "retries": 0, "flaky": false, "suite": "CameraContainer.test.js > CameraContainer" }, { "name": "CameraContainer should first render with flash disabled", "duration": 77, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/CameraContainer.test.js", "retries": 0, "flaky": false, "suite": "CameraContainer.test.js > CameraContainer" }, { "name": "CameraContainer should change to flash enabled on button press", "duration": 68, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/CameraContainer.test.js", "retries": 0, "flaky": false, "suite": "CameraContainer.test.js > CameraContainer" }, { "name": "Settings should toggle the green observation button from all options -> AICamera", "duration": 45, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Settings/Settings.test.js", "retries": 0, "flaky": false, "suite": "Settings.test.js > Settings" }, { "name": "Settings is logged in should navigate user to iNaturalist settings", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Settings/Settings.test.js", "retries": 0, "flaky": false, "suite": "Settings.test.js > Settings > is logged in" }, { "name": "Settings is logged in no internet should not navigate to iNaturalist settings if no internet", "duration": 29, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Settings/Settings.test.js", "retries": 0, "flaky": false, "suite": "Settings.test.js > Settings > is logged in > no internet" }, { "name": "Settings should change language immediately via language picker via online results", "duration": 72, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Settings/Settings.test.js", "retries": 0, "flaky": false, "suite": "Settings.test.js > Settings" }, { "name": "WithdrawIDSheet renders sheet correctly", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/Sheets/WithdrawIDSheet.test.js", "retries": 0, "flaky": false, "suite": "WithdrawIDSheet.test.js > WithdrawIDSheet" }, { "name": "ObsDetailsOverview displays unknown text if no taxon", "duration": 33, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetailsOverview.test.js", "retries": 0, "flaky": false, "suite": "ObsDetailsOverview.test.js > ObsDetailsOverview" }, { "name": "ObsDetailsOverview displays taxon", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsDetailsOverview.test.js", "retries": 0, "flaky": false, "suite": "ObsDetailsOverview.test.js > ObsDetailsOverview" }, { "name": "Projects should display project search results", "duration": 88, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Projects/Projects.test.js", "retries": 0, "flaky": false, "suite": "Projects.test.js > Projects" }, { "name": "Projects should display date range if collection project has date range", "duration": 77, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Projects/Projects.test.js", "retries": 0, "flaky": false, "suite": "Projects.test.js > Projects" }, { "name": "Projects should display project type if collection project has no date range", "duration": 44, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Projects/Projects.test.js", "retries": 0, "flaky": false, "suite": "Projects.test.js > Projects" }, { "name": "Projects should display project type if project is traditional project", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Projects/Projects.test.js", "retries": 0, "flaky": false, "suite": "Projects.test.js > Projects" }, { "name": "Projects should display date range if umbrella project has date range", "duration": 20, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Projects/Projects.test.js", "retries": 0, "flaky": false, "suite": "Projects.test.js > Projects" }, { "name": "StandardCamera deletes a photo on long press", "duration": 174, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/StandardCamera.test.js", "retries": 0, "flaky": false, "suite": "StandardCamera.test.js > StandardCamera" }, { "name": "Checkbox renders reliably", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Checkbox.test.js", "retries": 0, "flaky": false, "suite": "Checkbox.test.js > Checkbox" }, { "name": "Checkbox renders reliably being checked", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Checkbox.test.js", "retries": 0, "flaky": false, "suite": "Checkbox.test.js > Checkbox" }, { "name": "Checkbox has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Checkbox.test.js", "retries": 0, "flaky": false, "suite": "Checkbox.test.js > Checkbox" }, { "name": "Checkbox renders an empty checkbox when isChecked is false", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Checkbox.test.js", "retries": 0, "flaky": false, "suite": "Checkbox.test.js > Checkbox" }, { "name": "Checkbox renders a green filled checkbox when isChecked is true", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Checkbox.test.js", "retries": 0, "flaky": false, "suite": "Checkbox.test.js > Checkbox" }, { "name": "Checkbox changes value when user presses checkbox being not checked", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Checkbox.test.js", "retries": 0, "flaky": false, "suite": "Checkbox.test.js > Checkbox" }, { "name": "Checkbox changes value when user presses checkbox being checked", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Checkbox.test.js", "retries": 0, "flaky": false, "suite": "Checkbox.test.js > Checkbox" }, { "name": "Checkbox renders text and changes value when user presses text", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Checkbox.test.js", "retries": 0, "flaky": false, "suite": "Checkbox.test.js > Checkbox" }, { "name": "MoreSection should display DQA button if current user is logged in", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/MoreSection/MoreSection.test.js", "retries": 0, "flaky": false, "suite": "MoreSection.test.js > MoreSection" }, { "name": "MoreSection should not display DQA button if current user is logged out", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/MoreSection/MoreSection.test.js", "retries": 0, "flaky": false, "suite": "MoreSection.test.js > MoreSection" }, { "name": "MoreSection should not display projects button if observation belongs to zero projects", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/MoreSection/MoreSection.test.js", "retries": 0, "flaky": false, "suite": "MoreSection.test.js > MoreSection" }, { "name": "MoreSection should display projects button if observation belongs to 1+ projects", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/MoreSection/MoreSection.test.js", "retries": 0, "flaky": false, "suite": "MoreSection.test.js > MoreSection" }, { "name": "MapView should be accessible", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/MapView.test.js", "retries": 0, "flaky": false, "suite": "MapView.test.js > MapView" }, { "name": "MapView should hide redo search button by default", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/MapView.test.js", "retries": 0, "flaky": false, "suite": "MapView.test.js > MapView" }, { "name": "MapView should dispatch SET_EXPLORE_LOCATION when current location button is pressed", "duration": 41, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/MapView.test.js", "retries": 0, "flaky": false, "suite": "MapView.test.js > MapView" }, { "name": "MapView should dispatch requestLocationPermissions when current location button is pressed and user has not given permissions", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/MapView.test.js", "retries": 0, "flaky": false, "suite": "MapView.test.js > MapView" }, { "name": "MapView should show loading indicator when isLoading is true", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/MapView.test.js", "retries": 0, "flaky": false, "suite": "MapView.test.js > MapView" }, { "name": "PhotoCount renders correctly", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PhotoCount/PhotoCount.test.js", "retries": 0, "flaky": false, "suite": "PhotoCount.test.js > PhotoCount" }, { "name": "PhotoCount when photo count equal to 0 should not render", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PhotoCount/PhotoCount.test.js", "retries": 0, "flaky": false, "suite": "PhotoCount.test.js > PhotoCount > when photo count equal to 0" }, { "name": "PhotoCount when photo count is greater than 0 when photo count is greater than 100 renders photo count value equal to 99", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PhotoCount/PhotoCount.test.js", "retries": 0, "flaky": false, "suite": "PhotoCount.test.js > PhotoCount > when photo count is greater than 0 > when photo count is greater than 100" }, { "name": "PhotoCount when photo count is greater than 0 when photo count is less than 100 renders the default photo count value", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PhotoCount/PhotoCount.test.js", "retries": 0, "flaky": false, "suite": "PhotoCount.test.js > PhotoCount > when photo count is greater than 0 > when photo count is less than 100" }, { "name": "DatePicker has no accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DatePicker.test.js", "retries": 0, "flaky": false, "suite": "DatePicker.test.js > DatePicker" }, { "name": "DatePicker displays date with no seconds from local observation", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DatePicker.test.js", "retries": 0, "flaky": false, "suite": "DatePicker.test.js > DatePicker" }, { "name": "DatePicker displays date with no seconds from remote observation", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DatePicker.test.js", "retries": 0, "flaky": false, "suite": "DatePicker.test.js > DatePicker" }, { "name": "DatePicker displays Add Date text when observation has no date", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DatePicker.test.js", "retries": 0, "flaky": false, "suite": "DatePicker.test.js > DatePicker" }, { "name": "IdentificationSection should show IDENTIFY button when observation has photos", "duration": 36, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/IdentificationSection.test.js", "retries": 0, "flaky": false, "suite": "IdentificationSection.test.js > IdentificationSection" }, { "name": "IdentificationSection should not show IDENTIFY button when observation has no photos", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/IdentificationSection.test.js", "retries": 0, "flaky": false, "suite": "IdentificationSection.test.js > IdentificationSection" }, { "name": "IdentificationSection should show correct iconic taxon selection when navigating multiple observations", "duration": 73, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/IdentificationSection.test.js", "retries": 0, "flaky": false, "suite": "IdentificationSection.test.js > IdentificationSection" }, { "name": "BackButton has no accessibility errors", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/BackButton.test.js", "retries": 0, "flaky": false, "suite": "BackButton.test.js > BackButton" }, { "name": "Button primary should render correctly", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button primary" }, { "name": "Button primary has no accessibility errors", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button primary" }, { "name": "Button primary when disabled should render correctly", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button primary > when disabled" }, { "name": "Button primary when disabled has no accessibility errors", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button primary > when disabled" }, { "name": "Button warning should render correctly", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button warning" }, { "name": "Button warning has no accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button warning" }, { "name": "Button warning when disabled should render correctly", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button warning > when disabled" }, { "name": "Button warning when disabled has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button warning > when disabled" }, { "name": "Button focus should render correctly", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button focus" }, { "name": "Button focus has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button focus" }, { "name": "Button focus when disabled should render correctly", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button focus > when disabled" }, { "name": "Button focus when disabled has no accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button focus > when disabled" }, { "name": "Button neutral should render correctly", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button neutral" }, { "name": "Button neutral has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button neutral" }, { "name": "Button neutral when disabled should render correctly", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button neutral > when disabled" }, { "name": "Button neutral when disabled has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.test.js", "retries": 0, "flaky": false, "suite": "Button.test.js > Button neutral > when disabled" }, { "name": "LanguageSetting should display and allow user to change locales from web list", "duration": 43, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Settings/LanguageSetting.test.js", "retries": 0, "flaky": false, "suite": "LanguageSetting.test.js > LanguageSetting" }, { "name": "useObservationUpdatesWhenFocused should reset state of all observations in realm", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/integration/sharedHooks/useObservationUpdatesWhenFocused.test.js", "retries": 0, "flaky": false, "suite": "useObservationUpdatesWhenFocused.test.js > useObservationUpdatesWhenFocused" }, { "name": "ObsStatus displays count for current ids, not withdrawn ids", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsStatus.test.js", "retries": 0, "flaky": false, "suite": "ObsStatus.test.js > ObsStatus" }, { "name": "ObsStatus displays comment count", "duration": 28, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsStatus.test.js", "retries": 0, "flaky": false, "suite": "ObsStatus.test.js > ObsStatus" }, { "name": "ObsDetailsDefaultModeScreensWrapper when showSavedMatch is true renders SavedMatchContainer when observation belongs to current user and is not synced", "duration": 28, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsDetailsDefaultModeScreensWrapper.test.js", "retries": 0, "flaky": false, "suite": "ObsDetailsDefaultModeScreensWrapper.test.js > ObsDetailsDefaultModeScreensWrapper > when showSavedMatch is true" }, { "name": "ObsDetailsDefaultModeScreensWrapper when showSavedMatch is true renders SavedMatchContainer when observation has no user and is not synced", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsDetailsDefaultModeScreensWrapper.test.js", "retries": 0, "flaky": false, "suite": "ObsDetailsDefaultModeScreensWrapper.test.js > ObsDetailsDefaultModeScreensWrapper > when showSavedMatch is true" }, { "name": "ObsDetailsDefaultModeScreensWrapper when showSavedMatch is false renders ObsDetailsDefaultModeContainer when observation is synced", "duration": 39, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsDetailsDefaultModeScreensWrapper.test.js", "retries": 0, "flaky": false, "suite": "ObsDetailsDefaultModeScreensWrapper.test.js > ObsDetailsDefaultModeScreensWrapper > when showSavedMatch is false" }, { "name": "ObsDetailsDefaultModeScreensWrapper when showSavedMatch is false renders ObsDetailsDefaultModeContainer when observation does not belong to current user", "duration": 21, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsDetailsDefaultModeScreensWrapper.test.js", "retries": 0, "flaky": false, "suite": "ObsDetailsDefaultModeScreensWrapper.test.js > ObsDetailsDefaultModeScreensWrapper > when showSavedMatch is false" }, { "name": "ObserversView should show number of observations a user has", "duration": 69, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/ObserversView.test.js", "retries": 0, "flaky": false, "suite": "ObserversView.test.js > ObserversView" }, { "name": "PhotoCarousel renders correctly", "duration": 35, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/PhotoCarousel.test.js", "retries": 0, "flaky": false, "suite": "PhotoCarousel.test.js > PhotoCarousel" }, { "name": "PhotoCarousel renders correctly for large screen", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/PhotoCarousel.test.js", "retries": 0, "flaky": false, "suite": "PhotoCarousel.test.js > PhotoCarousel" }, { "name": "DisplayTaxon should be accessible", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/DisplayTaxon.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxon.test.js > DisplayTaxon" }, { "name": "DisplayTaxon displays an iconic taxon icon when no photo is available", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/DisplayTaxon.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxon.test.js > DisplayTaxon" }, { "name": "DisplayTaxon displays an iconic taxon photo when no taxon photo is available", "duration": 24, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/DisplayTaxon.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxon.test.js > DisplayTaxon" }, { "name": "DisplayTaxon displays 50% opacity when taxon id is withdrawn", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/DisplayTaxon.test.js", "retries": 0, "flaky": false, "suite": "DisplayTaxon.test.js > DisplayTaxon" }, { "name": "LocationPicker should display latitude corresponding with location name", "duration": 38, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/LocationPicker/LocationPicker.test.js", "retries": 0, "flaky": false, "suite": "LocationPicker.test.js > LocationPicker" }, { "name": "LocationPicker should show search results when a user changes search text", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/LocationPicker/LocationPicker.test.js", "retries": 0, "flaky": false, "suite": "LocationPicker.test.js > LocationPicker" }, { "name": "LocationPicker should update map with new place results when a user taps a place in dropdown", "duration": 25, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/LocationPicker/LocationPicker.test.js", "retries": 0, "flaky": false, "suite": "LocationPicker.test.js > LocationPicker" }, { "name": "LocationPicker should not have a minimum zoom level", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/LocationPicker/LocationPicker.test.js", "retries": 0, "flaky": false, "suite": "LocationPicker.test.js > LocationPicker" }, { "name": "delete observation add observation to deletion queue should handle adding _deleted_at date in realm", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DeleteObservationSheet.test.js", "retries": 0, "flaky": false, "suite": "DeleteObservationSheet.test.js > delete observation > add observation to deletion queue" }, { "name": "delete observation cancel deletion should not add _deleted_at date in realm", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DeleteObservationSheet.test.js", "retries": 0, "flaky": false, "suite": "DeleteObservationSheet.test.js > delete observation > cancel deletion" }, { "name": "delete observation navigates back when there's only one observation", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DeleteObservationSheet.test.js", "retries": 0, "flaky": false, "suite": "DeleteObservationSheet.test.js > delete observation" }, { "name": "delete observation with multiple observations does not navigate back when there's more than one observation", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DeleteObservationSheet.test.js", "retries": 0, "flaky": false, "suite": "DeleteObservationSheet.test.js > delete observation > with multiple observations" }, { "name": "delete observation with multiple observations removes observation from state when there's more than one observation", "duration": 21, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/DeleteObservationSheet.test.js", "retries": 0, "flaky": false, "suite": "DeleteObservationSheet.test.js > delete observation > with multiple observations" }, { "name": "ActivityItem renders name of identification taxon", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem renders agree button if user is logged in", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem does not render agree button if user is logged out", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem does not render agree button on second taxon display", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem shows agree sheet with correct taxon", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem should not show hidden content", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "ActivityItem should show unhidden content", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/ActivityItem.test.js", "retries": 0, "flaky": false, "suite": "ActivityItem.test.js > ActivityItem" }, { "name": "FaveButton should survive no currentUser", "duration": 21, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/FaveButton.test.js", "retries": 0, "flaky": false, "suite": "FaveButton.test.js > FaveButton" }, { "name": "FaveButton should survive no currentUser for an observation w/ existing votes", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/FaveButton.test.js", "retries": 0, "flaky": false, "suite": "FaveButton.test.js > FaveButton" }, { "name": "List2 renders correctly", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/List2.test.js", "retries": 0, "flaky": false, "suite": "List2.test.js > List2" }, { "name": "NotesSection should show description of observation", "duration": 35, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/NotesSection/NotesSection.test.js", "retries": 0, "flaky": false, "suite": "NotesSection.test.js > NotesSection" }, { "name": "EvidenceList should display add evidence button", "duration": 43, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/EvidenceList.test.js", "retries": 0, "flaky": false, "suite": "EvidenceList.test.js > EvidenceList" }, { "name": "EvidenceList should display loading wheel if photo is saving", "duration": 38, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/EvidenceList.test.js", "retries": 0, "flaky": false, "suite": "EvidenceList.test.js > EvidenceList" }, { "name": "EvidenceList should render all observation photos", "duration": 38, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/EvidenceList.test.js", "retries": 0, "flaky": false, "suite": "EvidenceList.test.js > EvidenceList" }, { "name": "EvidenceList should display an empty list when observation has no observation photos", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/EvidenceList.test.js", "retries": 0, "flaky": false, "suite": "EvidenceList.test.js > EvidenceList" }, { "name": "CommunitySection renders", "duration": 52, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunitySection/CommunitySection.test.js", "retries": 0, "flaky": false, "suite": "CommunitySection.test.js > CommunitySection" }, { "name": "ObsEdit should not have accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/ObsEdit.test.js", "retries": 0, "flaky": false, "suite": "ObsEdit.test.js > ObsEdit" }, { "name": "ObsEdit displays the number of photos in global state obsPhotos", "duration": 155, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/ObsEdit.test.js", "retries": 0, "flaky": false, "suite": "ObsEdit.test.js > ObsEdit" }, { "name": "Suggestions should not have accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Suggestions.test.js", "retries": 0, "flaky": false, "suite": "Suggestions.test.js > Suggestions" }, { "name": "Suggestions should fetch offline suggestions for current photo", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Suggestions.test.js", "retries": 0, "flaky": false, "suite": "Suggestions.test.js > Suggestions" }, { "name": "Suggestions should display empty text if no suggestions are found", "duration": 19, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Suggestions.test.js", "retries": 0, "flaky": false, "suite": "Suggestions.test.js > Suggestions" }, { "name": "Suggestions should allow user to bypass suggestions screen", "duration": 31, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Suggestions.test.js", "retries": 0, "flaky": false, "suite": "Suggestions.test.js > Suggestions" }, { "name": "Suggestions should display loading wheel and text when suggestions are loading", "duration": 25, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Suggestions.test.js", "retries": 0, "flaky": false, "suite": "Suggestions.test.js > Suggestions" }, { "name": "Suggestions loading from AI camera should display loading wheel and vision result when coming from AICamera", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Suggestions.test.js", "retries": 0, "flaky": false, "suite": "Suggestions.test.js > Suggestions > loading from AI camera" }, { "name": "Suggestions loading from AI camera should display no vision result if not coming from AICamera", "duration": 37, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Suggestions.test.js", "retries": 0, "flaky": false, "suite": "Suggestions.test.js > Suggestions > loading from AI camera" }, { "name": "Suggestions should create an id when checkmark is pressed", "duration": 40, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Suggestions.test.js", "retries": 0, "flaky": false, "suite": "Suggestions.test.js > Suggestions" }, { "name": "UserList should render first follower in followers list", "duration": 80, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserList/UserList.test.js", "retries": 0, "flaky": false, "suite": "UserList.test.js > UserList" }, { "name": "UserList should render observation count of first follower", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserList/UserList.test.js", "retries": 0, "flaky": false, "suite": "UserList.test.js > UserList" }, { "name": "Attribution should show attributions", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/Attribution.test.js", "retries": 0, "flaky": false, "suite": "Attribution.test.js > Attribution" }, { "name": "TaxonSearch should not have accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/SuggestionsTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "SuggestionsTaxonSearch.test.js > TaxonSearch" }, { "name": "TaxonSearch should render inside mocked container", "duration": 33, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/SuggestionsTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "SuggestionsTaxonSearch.test.js > TaxonSearch" }, { "name": "TaxonSearch show taxon search results", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/SuggestionsTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "SuggestionsTaxonSearch.test.js > TaxonSearch" }, { "name": "TaxonSearch should render with no initial comment state", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/SuggestionsTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "SuggestionsTaxonSearch.test.js > TaxonSearch" }, { "name": "TaxonSearch while loading should not show taxon results", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Suggestions/SuggestionsTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "SuggestionsTaxonSearch.test.js > TaxonSearch > while loading" }, { "name": "UserIcon should not have accessibility erros", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UserIcon.test.js", "retries": 0, "flaky": false, "suite": "UserIcon.test.js > UserIcon" }, { "name": "UserIcon displays user image correctly", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UserIcon.test.js", "retries": 0, "flaky": false, "suite": "UserIcon.test.js > UserIcon" }, { "name": "UserIcon displays small user image correctly", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UserIcon.test.js", "retries": 0, "flaky": false, "suite": "UserIcon.test.js > UserIcon" }, { "name": "UserIcon displays active user image correctly", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UserIcon.test.js", "retries": 0, "flaky": false, "suite": "UserIcon.test.js > UserIcon" }, { "name": "UserIcon shows correct uri for the user icon image", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UserIcon.test.js", "retries": 0, "flaky": false, "suite": "UserIcon.test.js > UserIcon" }, { "name": "CommentsCount renders default reliably", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/CommentsCount.test.js", "retries": 0, "flaky": false, "suite": "CommentsCount.test.js > CommentsCount" }, { "name": "CommentsCount renders white reliably", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/CommentsCount.test.js", "retries": 0, "flaky": false, "suite": "CommentsCount.test.js > CommentsCount" }, { "name": "CommentsCount renders filled reliably", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/CommentsCount.test.js", "retries": 0, "flaky": false, "suite": "CommentsCount.test.js > CommentsCount" }, { "name": "CommentsCount should not have accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/CommentsCount.test.js", "retries": 0, "flaky": false, "suite": "CommentsCount.test.js > CommentsCount" }, { "name": "RadioButtonSheet should not have accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Sheets/RadioButtonSheet.test.js", "retries": 0, "flaky": false, "suite": "RadioButtonSheet.test.js > RadioButtonSheet" }, { "name": "ObsUploadStatus displays a pending upload for an unsynced observation", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsUploadStatus.test.js", "retries": 0, "flaky": false, "suite": "ObsUploadStatus.test.js > ObsUploadStatus" }, { "name": "ObsUploadStatus displays a pending upload for a locally edited observation", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsUploadStatus.test.js", "retries": 0, "flaky": false, "suite": "ObsUploadStatus.test.js > ObsUploadStatus" }, { "name": "ObsUploadStatus displays an upload in progress", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsUploadStatus.test.js", "retries": 0, "flaky": false, "suite": "ObsUploadStatus.test.js > ObsUploadStatus" }, { "name": "ObsUploadStatus displays a completed upload", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsUploadStatus.test.js", "retries": 0, "flaky": false, "suite": "ObsUploadStatus.test.js > ObsUploadStatus" }, { "name": "Heading3 renders correctly", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Heading3.test.js", "retries": 0, "flaky": false, "suite": "Heading3.test.js > Heading3" }, { "name": "IdentificationsCount renders default reliably", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/IdentificationsCount.test.js", "retries": 0, "flaky": false, "suite": "IdentificationsCount.test.js > IdentificationsCount" }, { "name": "IdentificationsCount renders white reliably", "duration": 26, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/IdentificationsCount.test.js", "retries": 0, "flaky": false, "suite": "IdentificationsCount.test.js > IdentificationsCount" }, { "name": "IdentificationsCount renders filled reliably", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/IdentificationsCount.test.js", "retries": 0, "flaky": false, "suite": "IdentificationsCount.test.js > IdentificationsCount" }, { "name": "IdentificationsCount should not have accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/IdentificationsCount.test.js", "retries": 0, "flaky": false, "suite": "IdentificationsCount.test.js > IdentificationsCount" }, { "name": "ProjectList should display a list with all project titles", "duration": 91, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ProjectList/ProjectListContainer.test.js", "retries": 0, "flaky": false, "suite": "ProjectListContainer.test.js > ProjectList" }, { "name": "IdentifiersView should show a footer loading wheel when new identifiers are fetched", "duration": 42, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/IdentifiersView.test.js", "retries": 0, "flaky": false, "suite": "IdentifiersView.test.js > IdentifiersView" }, { "name": "IdentifiersView should show no internet text when user is offline", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/IdentifiersView.test.js", "retries": 0, "flaky": false, "suite": "IdentifiersView.test.js > IdentifiersView" }, { "name": "IdentifiersView should show a footer view when loading wheel is hidden", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/IdentifiersView.test.js", "retries": 0, "flaky": false, "suite": "IdentifiersView.test.js > IdentifiersView" }, { "name": "IdentifiersView should show loading wheel before initial data loads", "duration": 24, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/IdentifiersView.test.js", "retries": 0, "flaky": false, "suite": "IdentifiersView.test.js > IdentifiersView" }, { "name": "IdentifiersView should show no results text when no data is found", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/IdentifiersView.test.js", "retries": 0, "flaky": false, "suite": "IdentifiersView.test.js > IdentifiersView" }, { "name": "IdentifiersView should show number of identifications a user has", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/IdentifiersView.test.js", "retries": 0, "flaky": false, "suite": "IdentifiersView.test.js > IdentifiersView" }, { "name": "CommunityTaxon displays unknown text if no taxon", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunityTaxon.test.js", "retries": 0, "flaky": false, "suite": "CommunityTaxon.test.js > CommunityTaxon" }, { "name": "CommunityTaxon displays taxon", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunityTaxon.test.js", "retries": 0, "flaky": false, "suite": "CommunityTaxon.test.js > CommunityTaxon" }, { "name": "CommunityTaxon navigates to taxon details on button press", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/CommunityTaxon.test.js", "retries": 0, "flaky": false, "suite": "CommunityTaxon.test.js > CommunityTaxon" }, { "name": "UploadStatus displays start icon when upload is unsynced and not queued", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UploadStatus/UploadStatus.test.js", "retries": 0, "flaky": false, "suite": "UploadStatus.test.js > UploadStatus" }, { "name": "UploadStatus displays rotating circle progress when upload is queued but not started", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UploadStatus/UploadStatus.test.js", "retries": 0, "flaky": false, "suite": "UploadStatus.test.js > UploadStatus" }, { "name": "UploadStatus displays progress bar when progress is greater than 5%", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UploadStatus/UploadStatus.test.js", "retries": 0, "flaky": false, "suite": "UploadStatus.test.js > UploadStatus" }, { "name": "UploadStatus displays complete icon when progress is 1", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UploadStatus/UploadStatus.test.js", "retries": 0, "flaky": false, "suite": "UploadStatus.test.js > UploadStatus" }, { "name": "UploadStatus has no accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UploadStatus/UploadStatus.test.js", "retries": 0, "flaky": false, "suite": "UploadStatus.test.js > UploadStatus" }, { "name": "ObservationsView should show a footer loading wheel when new observations are fetched", "duration": 28, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/ObservationsView.test.js", "retries": 0, "flaky": false, "suite": "ObservationsView.test.js > ObservationsView" }, { "name": "ObservationsView should show no internet text when user is offline", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/ObservationsView.test.js", "retries": 0, "flaky": false, "suite": "ObservationsView.test.js > ObservationsView" }, { "name": "ObservationsView should show a footer view when loading wheel is hidden", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/ObservationsView.test.js", "retries": 0, "flaky": false, "suite": "ObservationsView.test.js > ObservationsView" }, { "name": "ObservationsView should show loading wheel before initial data loads", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/ObservationsView.test.js", "retries": 0, "flaky": false, "suite": "ObservationsView.test.js > ObservationsView" }, { "name": "ObservationsView should show no results text when no data is found", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/ObservationsView.test.js", "retries": 0, "flaky": false, "suite": "ObservationsView.test.js > ObservationsView" }, { "name": "Body4 renders correctly", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Body4.test.js", "retries": 0, "flaky": false, "suite": "Body4.test.js > Body4" }, { "name": "Body1 renders correctly", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Body1.test.js", "retries": 0, "flaky": false, "suite": "Body1.test.js > Body1" }, { "name": "email logs button should open the native email client", "duration": 49, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Developer.test.js", "retries": 0, "flaky": false, "suite": "Developer.test.js > email logs button" }, { "name": "PermissionGate should show the GRANT PERMISSION button when permission unknown", "duration": 23, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PermissionGate.test.js", "retries": 0, "flaky": false, "suite": "PermissionGate.test.js > PermissionGate" }, { "name": "PermissionGate should show the GRANT PERMISSION button when permission blocked", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PermissionGate.test.js", "retries": 0, "flaky": false, "suite": "PermissionGate.test.js > PermissionGate" }, { "name": "PermissionGate should show the OPEN SETTINGS button when permission blocked", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PermissionGate.test.js", "retries": 0, "flaky": false, "suite": "PermissionGate.test.js > PermissionGate" }, { "name": "PermissionGate should show the blockedPrompt when permission blocked", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PermissionGate.test.js", "retries": 0, "flaky": false, "suite": "PermissionGate.test.js > PermissionGate" }, { "name": "PermissionGate should be accessible", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/PermissionGate.test.js", "retries": 0, "flaky": false, "suite": "PermissionGate.test.js > PermissionGate" }, { "name": "Subheading1 renders correctly", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Subheading1.test.js", "retries": 0, "flaky": false, "suite": "Subheading1.test.js > Subheading1" }, { "name": "DQA Vote Buttons for wild metric renders correct DQA user vote", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DQAVoteButtons.test.js", "retries": 0, "flaky": false, "suite": "DQAVoteButtons.test.js > DQA Vote Buttons for wild metric" }, { "name": "DQA Vote Buttons for wild metric renders correct DQA user vote number", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DQAVoteButtons.test.js", "retries": 0, "flaky": false, "suite": "DQAVoteButtons.test.js > DQA Vote Buttons for wild metric" }, { "name": "DQA Vote Buttons for needs_id metric renders correct DQA user vote", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DQAVoteButtons.test.js", "retries": 0, "flaky": false, "suite": "DQAVoteButtons.test.js > DQA Vote Buttons for needs_id metric" }, { "name": "DQA Vote Buttons for needs_id metric renders correct DQA user vote number", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/DQAVoteButtons.test.js", "retries": 0, "flaky": false, "suite": "DQAVoteButtons.test.js > DQA Vote Buttons for needs_id metric" }, { "name": "MapSection should display map if user is online", "duration": 39, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/MapSection/MapSection.test.js", "retries": 0, "flaky": false, "suite": "MapSection.test.js > MapSection" }, { "name": "MapSection should show tiles on map for given taxon", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/MapSection/MapSection.test.js", "retries": 0, "flaky": false, "suite": "MapSection.test.js > MapSection" }, { "name": "MapSection should not show tiles for observation with no taxon id", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/MapSection/MapSection.test.js", "retries": 0, "flaky": false, "suite": "MapSection.test.js > MapSection" }, { "name": "ProjectRequirements displays project rule months with correct formatting", "duration": 53, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectRequirements.test.js", "retries": 0, "flaky": false, "suite": "ProjectRequirements.test.js > ProjectRequirements" }, { "name": "ProjectRequirements displays project rule start time with correct formatting", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectRequirements.test.js", "retries": 0, "flaky": false, "suite": "ProjectRequirements.test.js > ProjectRequirements" }, { "name": "ProjectRequirements displays project rule date range with correct formatting", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectRequirements.test.js", "retries": 0, "flaky": false, "suite": "ProjectRequirements.test.js > ProjectRequirements" }, { "name": "ProjectRequirements displays project rule observed on date with correct formatting", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ProjectDetails/ProjectRequirements.test.js", "retries": 0, "flaky": false, "suite": "ProjectRequirements.test.js > ProjectRequirements" }, { "name": "Body2 renders correctly", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Body2.test.js", "retries": 0, "flaky": false, "suite": "Body2.test.js > Body2" }, { "name": "Match should show location permissions button if permissions not granted", "duration": 56, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Match/Match.test.js", "retries": 0, "flaky": false, "suite": "Match.test.js > Match" }, { "name": "Match should not show location permissions button if permissions granted", "duration": 35, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Match/Match.test.js", "retries": 0, "flaky": false, "suite": "Match.test.js > Match" }, { "name": "UserProfile should render inside mocked container for testing", "duration": 44, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserProfile/UserProfile.test.js", "retries": 0, "flaky": false, "suite": "UserProfile.test.js > UserProfile" }, { "name": "UserProfile should not have accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserProfile/UserProfile.test.js", "retries": 0, "flaky": false, "suite": "UserProfile.test.js > UserProfile" }, { "name": "UserProfile renders user profile from API call", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserProfile/UserProfile.test.js", "retries": 0, "flaky": false, "suite": "UserProfile.test.js > UserProfile" }, { "name": "UserProfile renders followers and following buttons", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserProfile/UserProfile.test.js", "retries": 0, "flaky": false, "suite": "UserProfile.test.js > UserProfile" }, { "name": "UserProfile renders projects button", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserProfile/UserProfile.test.js", "retries": 0, "flaky": false, "suite": "UserProfile.test.js > UserProfile" }, { "name": "InlineUser should not have accessibility erros", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js", "retries": 0, "flaky": false, "suite": "InlineUser.test.js > InlineUser" }, { "name": "InlineUser renders reliably", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js", "retries": 0, "flaky": false, "suite": "InlineUser.test.js > InlineUser" }, { "name": "InlineUser displays user handle and image correctly", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js", "retries": 0, "flaky": false, "suite": "InlineUser.test.js > InlineUser" }, { "name": "InlineUser fires onPress handler", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js", "retries": 0, "flaky": false, "suite": "InlineUser.test.js > InlineUser" }, { "name": "InlineUser when user has no icon set displays user handle and fallback image correctly", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js", "retries": 0, "flaky": false, "suite": "InlineUser.test.js > InlineUser > when user has no icon set" }, { "name": "InlineUser when user has no icon set renders reliably", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js", "retries": 0, "flaky": false, "suite": "InlineUser.test.js > InlineUser > when user has no icon set" }, { "name": "InlineUser when offline displays no internet fallback image correctly", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js", "retries": 0, "flaky": false, "suite": "InlineUser.test.js > InlineUser > when offline" }, { "name": "InlineUser when offline renders reliably", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js", "retries": 0, "flaky": false, "suite": "InlineUser.test.js > InlineUser > when offline" }, { "name": "Heading5 renders correctly", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Heading5.test.js", "retries": 0, "flaky": false, "suite": "Heading5.test.js > Heading5" }, { "name": "Heading1 renders correctly", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Heading1.test.js", "retries": 0, "flaky": false, "suite": "Heading1.test.js > Heading1" }, { "name": "AddObsBottomSheet in iOS 9 hides AI camera button on older devices", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsBottomSheetIOS9.test.js", "retries": 0, "flaky": false, "suite": "AddObsBottomSheetIOS9.test.js > AddObsBottomSheet in iOS 9" }, { "name": "Quality Grade research renders correct grade", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade research" }, { "name": "Quality Grade research should render correctly", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade research" }, { "name": "Quality Grade research has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade research" }, { "name": "Quality Grade needs_id renders correct grade", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade needs_id" }, { "name": "Quality Grade needs_id should render correctly", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade needs_id" }, { "name": "Quality Grade needs_id has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade needs_id" }, { "name": "Quality Grade casual renders correct grade", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade casual" }, { "name": "Quality Grade casual should render correctly", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade casual" }, { "name": "Quality Grade casual has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/QualityGradeStatus/QualityGradeStatus.test.js", "retries": 0, "flaky": false, "suite": "QualityGradeStatus.test.js > Quality Grade casual" }, { "name": "userPrepareStoreAndNavigate savePhotosToPhotoLibrary should call CameraRoll.save three times when given three uris", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/hooks/userPrepareStoreAndNavigate.test.js", "retries": 0, "flaky": false, "suite": "userPrepareStoreAndNavigate.test.js > userPrepareStoreAndNavigate > savePhotosToPhotoLibrary" }, { "name": "TaxonDetailsTitle should be accessible with a taxon", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetailsTitle.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetailsTitle.test.js > TaxonDetailsTitle" }, { "name": "TaxonDetailsTitle should be accessible without a taxon", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/TaxonDetailsTitle.test.js", "retries": 0, "flaky": false, "suite": "TaxonDetailsTitle.test.js > TaxonDetailsTitle" }, { "name": "AI Camera shows a taxon prediction when result & rank_level < 40", "duration": 56, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/AICamera.test.js", "retries": 0, "flaky": false, "suite": "AICamera.test.js > AI Camera" }, { "name": "AI Camera shows scan area text when rank_level > 40", "duration": 25, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/AICamera.test.js", "retries": 0, "flaky": false, "suite": "AICamera.test.js > AI Camera" }, { "name": "AI Camera shows loading text when model not yet loaded", "duration": 25, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/AICamera.test.js", "retries": 0, "flaky": false, "suite": "AICamera.test.js > AI Camera" }, { "name": "AI Camera displays taxon photo if taxon exists in realm", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/AICamera.test.js", "retries": 0, "flaky": false, "suite": "AICamera.test.js > AI Camera" }, { "name": "AI Camera displays iconic taxon icon if taxon does not exist in realm", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Camera/AICamera.test.js", "retries": 0, "flaky": false, "suite": "AICamera.test.js > AI Camera" }, { "name": "Button primary in dark mode should render correctly", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button primary in dark mode" }, { "name": "Button primary in dark mode has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button primary in dark mode" }, { "name": "Button primary in dark mode when disabled should render correctly", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button primary in dark mode > when disabled" }, { "name": "Button primary in dark mode when disabled has no accessibility errors", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button primary in dark mode > when disabled" }, { "name": "Button warning in dark mode should render correctly", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button warning in dark mode" }, { "name": "Button warning in dark mode has no accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button warning in dark mode" }, { "name": "Button warning in dark mode when disabled should render correctly", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button warning in dark mode > when disabled" }, { "name": "Button warning in dark mode when disabled has no accessibility errors", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button warning in dark mode > when disabled" }, { "name": "Button focus in dark mode should render correctly", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button focus in dark mode" }, { "name": "Button focus in dark mode has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button focus in dark mode" }, { "name": "Button focus in dark mode when disabled should render correctly", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button focus in dark mode > when disabled" }, { "name": "Button focus in dark mode when disabled has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button focus in dark mode > when disabled" }, { "name": "Button neutral in dark mode should render correctly", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button neutral in dark mode" }, { "name": "Button neutral in dark mode has no accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button neutral in dark mode" }, { "name": "Button neutral in dark mode when disabled should render correctly", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button neutral in dark mode > when disabled" }, { "name": "Button neutral in dark mode when disabled has no accessibility errors", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/Button.dark.test.js", "retries": 0, "flaky": false, "suite": "Button.dark.test.js > Button neutral in dark mode > when disabled" }, { "name": "ActivityCount renders reliably", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/ActivityCount.test.js", "retries": 0, "flaky": false, "suite": "ActivityCount.test.js > ActivityCount" }, { "name": "ActivityCount displays the count parameter as text", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/ActivityCount.test.js", "retries": 0, "flaky": false, "suite": "ActivityCount.test.js > ActivityCount" }, { "name": "ActivityCount should not have accessibility errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ActivityCount/ActivityCount.test.js", "retries": 0, "flaky": false, "suite": "ActivityCount.test.js > ActivityCount" }, { "name": "HeaderKebabMenu renders and opens kebab menu share button", "duration": 29, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/HeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "HeaderKebabMenu.test.js > HeaderKebabMenu" }, { "name": "HeaderKebabMenu opens native share dialog with expected url", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/HeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "HeaderKebabMenu.test.js > HeaderKebabMenu" }, { "name": "HeaderKebabMenu on Android opens native share dialog with expected message", "duration": 10, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/HeaderKebabMenu.test.js", "retries": 0, "flaky": false, "suite": "HeaderKebabMenu.test.js > HeaderKebabMenu > on Android" }, { "name": "ObsMedia should show photo with given url", "duration": 44, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsMedia.test.js", "retries": 0, "flaky": false, "suite": "ObsMedia.test.js > ObsMedia" }, { "name": "ObsMedia should show photo with given url on tablet", "duration": 62, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetails/ObsMedia.test.js", "retries": 0, "flaky": false, "suite": "ObsMedia.test.js > ObsMedia" }, { "name": "INatIcon renders correctly", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/INatIcon.test.js", "retries": 0, "flaky": false, "suite": "INatIcon.test.js > INatIcon" }, { "name": "glyphmap is an object", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/INatIcon.test.js", "retries": 0, "flaky": false, "suite": "INatIcon.test.js > glyphmap" }, { "name": "glyphmap has icon name as key", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/INatIcon.test.js", "retries": 0, "flaky": false, "suite": "INatIcon.test.js > glyphmap" }, { "name": "INatIconButton renders correctly", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/INatIconButton.test.js", "retries": 0, "flaky": false, "suite": "INatIconButton.test.js > INatIconButton" }, { "name": "INatIconButton throws an error when it receives an inaccessibly small width", "duration": 101, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/INatIconButton.test.js", "retries": 0, "flaky": false, "suite": "INatIconButton.test.js > INatIconButton" }, { "name": "INatIconButton throws an error when it receives an inaccessibly small height", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/INatIconButton.test.js", "retries": 0, "flaky": false, "suite": "INatIconButton.test.js > INatIconButton" }, { "name": "should be accessible if accessibility label is passes as props", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/INatIconButton.test.js", "retries": 0, "flaky": false, "suite": "INatIconButton.test.js" }, { "name": "throws an error when no accessibility label is passed into props", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Buttons/INatIconButton.test.js", "retries": 0, "flaky": false, "suite": "INatIconButton.test.js" }, { "name": "ObsMedia should show photo with given url", "duration": 24, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsMedia.test.js", "retries": 0, "flaky": false, "suite": "ObsMedia.test.js > ObsMedia" }, { "name": "ObsMedia should show photo with given url on tablet", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsDetailsDefaultMode/ObsMedia.test.js", "retries": 0, "flaky": false, "suite": "ObsMedia.test.js > ObsMedia" }, { "name": "Divider should render correctly", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Divider/Divider.test.js", "retries": 0, "flaky": false, "suite": "Divider.test.js > Divider" }, { "name": "ProjectListItem should be accessible", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ProjectList/ProjectListItem.test.js", "retries": 0, "flaky": false, "suite": "ProjectListItem.test.js > ProjectListItem" }, { "name": "Body3 renders correctly", "duration": 24, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Body3.test.js", "retries": 0, "flaky": false, "suite": "Body3.test.js > Body3" }, { "name": "ObsEditHeader has no accessibility errors", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/ObsEditHeader.test.js", "retries": 0, "flaky": false, "suite": "ObsEditHeader.test.js > ObsEditHeader" }, { "name": "ObsEditHeader renders a header title with 1 observation", "duration": 36, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/ObsEditHeader.test.js", "retries": 0, "flaky": false, "suite": "ObsEditHeader.test.js > ObsEditHeader" }, { "name": "ObsEditHeader renders a header title with multiple observations", "duration": 37, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/ObsEditHeader.test.js", "retries": 0, "flaky": false, "suite": "ObsEditHeader.test.js > ObsEditHeader" }, { "name": "ObsEditHeader renders edit header title when observation is saved locally", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/ObsEditHeader.test.js", "retries": 0, "flaky": false, "suite": "ObsEditHeader.test.js > ObsEditHeader" }, { "name": "ObsEditHeader renders a kebab menu", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/ObsEditHeader.test.js", "retries": 0, "flaky": false, "suite": "ObsEditHeader.test.js > ObsEditHeader" }, { "name": "ObsEditHeader renders a back button", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/ObsEditHeader.test.js", "retries": 0, "flaky": false, "suite": "ObsEditHeader.test.js > ObsEditHeader" }, { "name": "ObsGridItem for an observation with a photo should render", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsGridItem.test.js", "retries": 0, "flaky": false, "suite": "ObsGridItem.test.js > ObsGridItem > for an observation with a photo" }, { "name": "ObsGridItem for an observation with a photo should have photo", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsGridItem.test.js", "retries": 0, "flaky": false, "suite": "ObsGridItem.test.js > ObsGridItem > for an observation with a photo" }, { "name": "ObsGridItem for an observation without a photo should render", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsGridItem.test.js", "retries": 0, "flaky": false, "suite": "ObsGridItem.test.js > ObsGridItem > for an observation without a photo" }, { "name": "ObsGridItem for an observation without a photo should have an iconic taxon icon", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationsFlashList/ObsGridItem.test.js", "retries": 0, "flaky": false, "suite": "ObsGridItem.test.js > ObsGridItem > for an observation without a photo" }, { "name": "AddObsBottomSheet shows the AI camera button", "duration": 12, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/AddObsBottomSheet/AddObsBottomSheet.test.js", "retries": 0, "flaky": false, "suite": "AddObsBottomSheet.test.js > AddObsBottomSheet" }, { "name": "TaxonResult should render correctly", "duration": 25, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/TaxonResult.test.js", "retries": 0, "flaky": false, "suite": "TaxonResult.test.js > TaxonResult" }, { "name": "BottomButtonsContainer has no accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/BottomButtonsContainer.test.js", "retries": 0, "flaky": false, "suite": "BottomButtonsContainer.test.js > BottomButtonsContainer" }, { "name": "BottomButtonsContainer shows save button when user is logged out", "duration": 16, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/BottomButtonsContainer.test.js", "retries": 0, "flaky": false, "suite": "BottomButtonsContainer.test.js > BottomButtonsContainer" }, { "name": "BottomButtonsContainer shows save changes button when user logged in and observation was previously synced", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/BottomButtonsContainer.test.js", "retries": 0, "flaky": false, "suite": "BottomButtonsContainer.test.js > BottomButtonsContainer" }, { "name": "BottomButtonsContainer shows save and upload button when user logged in with new observation", "duration": 11, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/ObsEdit/BottomButtonsContainer.test.js", "retries": 0, "flaky": false, "suite": "BottomButtonsContainer.test.js > BottomButtonsContainer" }, { "name": "UserListItem should be accessible", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/UserListItem.test.js", "retries": 0, "flaky": false, "suite": "UserListItem.test.js > UserListItem" }, { "name": "Taxonomy renders current taxon", "duration": 27, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/Taxonomy.test.js", "retries": 0, "flaky": false, "suite": "Taxonomy.test.js > Taxonomy" }, { "name": "Taxonomy renders all ancestors", "duration": 15, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/Taxonomy.test.js", "retries": 0, "flaky": false, "suite": "Taxonomy.test.js > Taxonomy" }, { "name": "Taxonomy renders button to optionally show children", "duration": 14, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/Taxonomy.test.js", "retries": 0, "flaky": false, "suite": "Taxonomy.test.js > Taxonomy" }, { "name": "Taxonomy shows children when button pressed", "duration": 18, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/TaxonDetails/Taxonomy.test.js", "retries": 0, "flaky": false, "suite": "Taxonomy.test.js > Taxonomy" }, { "name": "DateDisplay should be accessible", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/DateDisplay.test.js", "retries": 0, "flaky": false, "suite": "DateDisplay.test.js > DateDisplay" }, { "name": "ObservationLocation should be accessible", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationLocation.test.js", "retries": 0, "flaky": false, "suite": "ObservationLocation.test.js > ObservationLocation" }, { "name": "ObservationLocation should format location correctly from place_guess", "duration": 13, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationLocation.test.js", "retries": 0, "flaky": false, "suite": "ObservationLocation.test.js > ObservationLocation" }, { "name": "ObservationLocation should format location correctly from latitude/longitude", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationLocation.test.js", "retries": 0, "flaky": false, "suite": "ObservationLocation.test.js > ObservationLocation" }, { "name": "ObservationLocation should handle latitude/longitude w/ zero", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationLocation.test.js", "retries": 0, "flaky": false, "suite": "ObservationLocation.test.js > ObservationLocation" }, { "name": "ObservationLocation should show no location if unknown", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationLocation.test.js", "retries": 0, "flaky": false, "suite": "ObservationLocation.test.js > ObservationLocation" }, { "name": "ObservationLocation renders obscured icon if obscured", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationLocation.test.js", "retries": 0, "flaky": false, "suite": "ObservationLocation.test.js > ObservationLocation" }, { "name": "ObservationLocation renders private icon if private", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationLocation.test.js", "retries": 0, "flaky": false, "suite": "ObservationLocation.test.js > ObservationLocation" }, { "name": "ObservationLocation renders loaction icon if not obscured", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/ObservationLocation.test.js", "retries": 0, "flaky": false, "suite": "ObservationLocation.test.js > ObservationLocation" }, { "name": "useTaxonSearch should return iconic taxa by default", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "useTaxonSearch.test.js > useTaxonSearch" }, { "name": "useTaxonSearch should request remote taxa with a query", "duration": 9, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "useTaxonSearch.test.js > useTaxonSearch" }, { "name": "useTaxonSearch should request local taxa with a query if no remote taxa", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "useTaxonSearch.test.js > useTaxonSearch" }, { "name": "useTaxonSearch should try to save remote taxa to Realm", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "useTaxonSearch.test.js > useTaxonSearch" }, { "name": "useTaxonSearch should not request local taxa if remote taxa exist", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/sharedHooks/useTaxonSearch.test.js", "retries": 0, "flaky": false, "suite": "useTaxonSearch.test.js > useTaxonSearch" }, { "name": "FullPageWebView onShouldStartLoadWithRequest should approve a request for the source url", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/FullPageWebView/FullPageWebView.test.js", "retries": 0, "flaky": false, "suite": "FullPageWebView.test.js > FullPageWebView > onShouldStartLoadWithRequest" }, { "name": "FullPageWebView onShouldStartLoadWithRequest should approve a request for an anchor on the source url", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/FullPageWebView/FullPageWebView.test.js", "retries": 0, "flaky": false, "suite": "FullPageWebView.test.js > FullPageWebView > onShouldStartLoadWithRequest" }, { "name": "FullPageWebView onShouldStartLoadWithRequest external browser should try to open for any domain not on the allowlist", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/FullPageWebView/FullPageWebView.test.js", "retries": 0, "flaky": false, "suite": "FullPageWebView.test.js > FullPageWebView > onShouldStartLoadWithRequest > external browser" }, { "name": "FullPageWebView onShouldStartLoadWithRequest external browser should not try to open for any domain on the allowlist", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/FullPageWebView/FullPageWebView.test.js", "retries": 0, "flaky": false, "suite": "FullPageWebView.test.js > FullPageWebView > onShouldStartLoadWithRequest > external browser" }, { "name": "FullPageWebView onShouldStartLoadWithRequest external browser should try to open for any domain on the allowlist for clicks", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/FullPageWebView/FullPageWebView.test.js", "retries": 0, "flaky": false, "suite": "FullPageWebView.test.js > FullPageWebView > onShouldStartLoadWithRequest > external browser" }, { "name": "FullPageWebView onShouldStartLoadWithRequest external browser should not try to open for pathnames specified in params on click", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/FullPageWebView/FullPageWebView.test.js", "retries": 0, "flaky": false, "suite": "FullPageWebView.test.js > FullPageWebView > onShouldStartLoadWithRequest > external browser" }, { "name": "FullPageWebView onShouldStartLoadWithRequest setSource should update the source when navigating the top frame", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/FullPageWebView/FullPageWebView.test.js", "retries": 0, "flaky": false, "suite": "FullPageWebView.test.js > FullPageWebView > onShouldStartLoadWithRequest > setSource" }, { "name": "FullPageWebView onShouldStartLoadWithRequest setSource should not update the source for iframe requests", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/FullPageWebView/FullPageWebView.test.js", "retries": 0, "flaky": false, "suite": "FullPageWebView.test.js > FullPageWebView > onShouldStartLoadWithRequest > setSource" }, { "name": "Subheading2 renders correctly", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Subheading2.test.js", "retries": 0, "flaky": false, "suite": "Subheading2.test.js > Subheading2" }, { "name": "OfflineNotice should throw without an onPress prop", "duration": 139, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/OfflineNotice.test.js", "retries": 0, "flaky": false, "suite": "OfflineNotice.test.js > OfflineNotice" }, { "name": "OfflineNotice should be pressable", "duration": 25, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/OfflineNotice.test.js", "retries": 0, "flaky": false, "suite": "OfflineNotice.test.js > OfflineNotice" }, { "name": "Heading4 renders correctly", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/Typography/Heading4.test.js", "retries": 0, "flaky": false, "suite": "Heading4.test.js > Heading4" }, { "name": "HideView should show component correctly", "duration": 6, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/HideView.test.js", "retries": 0, "flaky": false, "suite": "HideView.test.js > HideView" }, { "name": "HideView should hide component correctly", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/HideView.test.js", "retries": 0, "flaky": false, "suite": "HideView.test.js > HideView" }, { "name": "HideView should not render hidden component", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/HideView.test.js", "retries": 0, "flaky": false, "suite": "HideView.test.js > HideView" }, { "name": "SearchBar should be accessible", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/SharedComponents/SearchBar.test.js", "retries": 0, "flaky": false, "suite": "SearchBar.test.js > SearchBar" }, { "name": "Sanitization does not render HTML tags we don't support", "duration": 32, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Sanitization" }, { "name": "Sanitization only allows the HTML attributes we support on the web", "duration": 22, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Sanitization" }, { "name": "Sanitization links all @ mentions", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Sanitization" }, { "name": "Sanitization links all URLs", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Sanitization" }, { "name": "Sanitization closes unclosed tags", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Sanitization" }, { "name": "Sanitization strips leading and trailing whitespace", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Sanitization" }, { "name": "Basic Rendering should not have accessibility errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Basic Rendering" }, { "name": "Basic Rendering renders text", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Basic Rendering" }, { "name": "Basic Rendering renders markdown", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Basic Rendering" }, { "name": "Basic Rendering renders html", "duration": 17, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/UserText/UserText.test.js", "retries": 0, "flaky": false, "suite": "UserText.test.js > Basic Rendering" }, { "name": "getDataForPixel should return null if grid is undefined", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/helpers/fetchUTFGridData.test.js", "retries": 0, "flaky": false, "suite": "fetchUTFGridData.test.js > getDataForPixel" }, { "name": "getDataForPixel should return null if data is undefined", "duration": 8, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/helpers/fetchUTFGridData.test.js", "retries": 0, "flaky": false, "suite": "fetchUTFGridData.test.js > getDataForPixel" }, { "name": "getDataForPixel should return null if json is undefined", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/helpers/fetchUTFGridData.test.js", "retries": 0, "flaky": false, "suite": "fetchUTFGridData.test.js > getDataForPixel" }, { "name": "authenticates user", "duration": 60, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/LoginSignUp/AuthenticationService.test.js", "retries": 0, "flaky": false, "suite": "AuthenticationService.test.js" }, { "name": "registers user", "duration": 28, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/LoginSignUp/AuthenticationService.test.js", "retries": 0, "flaky": false, "suite": "AuthenticationService.test.js" }, { "name": "progressTracker emitProgress should emit an event with observationUUID and increment", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/progressTracker.test.js", "retries": 0, "flaky": false, "suite": "progressTracker.test.js > progressTracker" }, { "name": "progressTracker emitProgress should return undefined when not specified", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/progressTracker.test.js", "retries": 0, "flaky": false, "suite": "progressTracker.test.js > progressTracker" }, { "name": "progressTracker emitProgress should warn and not emit when observationUUID is undefined", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/progressTracker.test.js", "retries": 0, "flaky": false, "suite": "progressTracker.test.js > progressTracker" }, { "name": "progressTracker trackObservationUpload should return start and complete functions", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/progressTracker.test.js", "retries": 0, "flaky": false, "suite": "progressTracker.test.js > progressTracker" }, { "name": "progressTracker trackEvidenceUpload should return uploaded and attached functions", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/progressTracker.test.js", "retries": 0, "flaky": false, "suite": "progressTracker.test.js > progressTracker" }, { "name": "errorHandling handleUploadError should throw basic errors without special handling", "duration": 4, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/errorHandling.test.js", "retries": 0, "flaky": false, "suite": "errorHandling.test.js > errorHandling > handleUploadError" }, { "name": "errorHandling handleUploadError should return 'Connection problem' message for network errors", "duration": 3, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/errorHandling.test.js", "retries": 0, "flaky": false, "suite": "errorHandling.test.js > errorHandling > handleUploadError" }, { "name": "errorHandling handleUploadError should return recoveryPossible=true for network errors", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/errorHandling.test.js", "retries": 0, "flaky": false, "suite": "errorHandling.test.js > errorHandling > handleUploadError" }, { "name": "errorHandling handleUploadError should return recovery options for RecoverableErrors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/errorHandling.test.js", "retries": 0, "flaky": false, "suite": "errorHandling.test.js > errorHandling > handleUploadError" }, { "name": "errorHandling handleUploadError should return a string from an array of iNaturalist API errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/errorHandling.test.js", "retries": 0, "flaky": false, "suite": "errorHandling.test.js > errorHandling > handleUploadError" }, { "name": "errorHandling handleUploadError should return a string from a nested array of iNaturalist API errors", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/errorHandling.test.js", "retries": 0, "flaky": false, "suite": "errorHandling.test.js > errorHandling > handleUploadError" }, { "name": "errorHandling handleUploadError should return a string from a nested string within iNaturalist API error messages", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/errorHandling.test.js", "retries": 0, "flaky": false, "suite": "errorHandling.test.js > errorHandling > handleUploadError" }, { "name": "errorHandling handleUploadError should handle 410 errors for previously deleted observations or evidence", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/errorHandling.test.js", "retries": 0, "flaky": false, "suite": "errorHandling.test.js > errorHandling > handleUploadError" }, { "name": "getNextPageParamForExplore should return a date string if order_by is observed_on", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > getNextPageParamForExplore" }, { "name": "getNextPageParamForExplore should return a date string if order_by is created_at", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > getNextPageParamForExplore" }, { "name": "getNextPageParamForExplore should return an obs id if order_by is blank", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > getNextPageParamForExplore" }, { "name": "getNextPageParamForExplore should return the next page number if order_by is votes", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > getNextPageParamForExplore" }, { "name": "addPageParamsForExplore should include return_bounds when pageParam is undefined", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "addPageParamsForExplore should include return_bounds when pageParam is 0", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "addPageParamsForExplore should not include return_bounds when pageParam is 1 ", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "addPageParamsForExplore should set d2 if order_by is observed_on and order is default desc", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "addPageParamsForExplore should set d1 if order_by is observed_on and order is asc", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "addPageParamsForExplore should set created_d2 if order_by is created_at and order is default desc", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "addPageParamsForExplore should set created_d1 if order_by is created_at and order is asc", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "addPageParamsForExplore should set page if order_by is votes", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "addPageParamsForExplore should set id_below if order_by is not specified", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Explore/helpers/exploreParams.test.js", "retries": 0, "flaky": false, "suite": "exploreParams.test.js > addPageParamsForExplore" }, { "name": "TaxonNamesSetting toggles between the three name display options correctly", "duration": 31, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/components/Settings/TaxonNamesSetting.test.js", "retries": 0, "flaky": false, "suite": "TaxonNamesSetting.test.js > TaxonNamesSetting" }, { "name": "ExploreContext exploreReducer SET_PLACE should remove lat and lng when place set", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/providers/ExploreContext.test.js", "retries": 0, "flaky": false, "suite": "ExploreContext.test.js > ExploreContext > exploreReducer > SET_PLACE" }, { "name": "ExploreContext exploreReducer SET_MAP_BOUNDARIES should remove lat, lng, and radius", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/providers/ExploreContext.test.js", "retries": 0, "flaky": false, "suite": "ExploreContext.test.js > ExploreContext > exploreReducer > SET_MAP_BOUNDARIES" }, { "name": "ExploreContext exploreReducer CHANGE_TAXON should remove iconic_taxa", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/providers/ExploreContext.test.js", "retries": 0, "flaky": false, "suite": "ExploreContext.test.js > ExploreContext > exploreReducer > CHANGE_TAXON" }, { "name": "ExploreContext exploreReducer CHANGE_TAXON should extract an id from a taxon", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/providers/ExploreContext.test.js", "retries": 0, "flaky": false, "suite": "ExploreContext.test.js > ExploreContext > exploreReducer > CHANGE_TAXON" }, { "name": "ExploreContext exploreReducer CHANGE_TAXON should remove an id from a blank taxon", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/providers/ExploreContext.test.js", "retries": 0, "flaky": false, "suite": "ExploreContext.test.js > ExploreContext > exploreReducer > CHANGE_TAXON" }, { "name": "parseExifDateToLocalTimezone should parse a date string in the format react-native-exif-reader returns", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/parseExif.test.js", "retries": 0, "flaky": false, "suite": "parseExif.test.js > parseExifDateToLocalTimezone" }, { "name": "parseExif should parse and return exif data when given a photo uri", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/parseExif.test.js", "retries": 0, "flaky": false, "suite": "parseExif.test.js > parseExif" }, { "name": "formatExifDateAsString should return date in a string format ready to upload to server", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/parseExif.test.js", "retries": 0, "flaky": false, "suite": "parseExif.test.js > formatExifDateAsString" }, { "name": "readExifFromMultiplePhotos should return an object if EXIF fails to parse for one photo", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/parseExif.test.js", "retries": 0, "flaky": false, "suite": "parseExif.test.js > readExifFromMultiplePhotos" }, { "name": "readExifFromMultiplePhotos should return an object if EXIF fails to parse for all photos", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/helpers/parseExif.test.js", "retries": 0, "flaky": false, "suite": "parseExif.test.js > readExifFromMultiplePhotos" }, { "name": "prepareObservationForUpload should call Observation.mapObservationForUpload with the observation", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareObservationForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareObservationForUpload.test.js > prepareObservationForUpload" }, { "name": "prepareObservationForUpload should remove null values from the mapped observation", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareObservationForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareObservationForUpload.test.js > prepareObservationForUpload" }, { "name": "prepareObservationForUpload should handle empty field values correctly", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/dataTransformation/prepareObservationForUpload.test.js", "retries": 0, "flaky": false, "suite": "prepareObservationForUpload.test.js > prepareObservationForUpload" }, { "name": "markRecordUploaded should do nothing if realm is closed", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/realmSync.test.js", "retries": 0, "flaky": false, "suite": "realmSync.test.js > markRecordUploaded" }, { "name": "markRecordUploaded should update an Observation record correctly", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/realmSync.test.js", "retries": 0, "flaky": false, "suite": "realmSync.test.js > markRecordUploaded" }, { "name": "markRecordUploaded should update an ObservationPhoto record correctly", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/realmSync.test.js", "retries": 0, "flaky": false, "suite": "realmSync.test.js > markRecordUploaded" }, { "name": "markRecordUploaded should update an ObservationSound record correctly", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/realmSync.test.js", "retries": 0, "flaky": false, "suite": "realmSync.test.js > markRecordUploaded" }, { "name": "markRecordUploaded should update a Photo record correctly with options.record", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/realmSync.test.js", "retries": 0, "flaky": false, "suite": "realmSync.test.js > markRecordUploaded" }, { "name": "markRecordUploaded should throw error when record is not found", "duration": 7, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/realmSync.test.js", "retries": 0, "flaky": false, "suite": "realmSync.test.js > markRecordUploaded" }, { "name": "markRecordUploaded should retry on invalidated object error", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/realmSync.test.js", "retries": 0, "flaky": false, "suite": "realmSync.test.js > markRecordUploaded" }, { "name": "markRecordUploaded should attempt to retry on non-invalidation errors", "duration": 5, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/uploaders/utils/realmSync.test.js", "retries": 0, "flaky": false, "suite": "realmSync.test.js > markRecordUploaded" }, { "name": "Observation mapObservationForUpload should not include observed_on", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/models/Observation.test.js", "retries": 0, "flaky": false, "suite": "Observation.test.js > Observation > mapObservationForUpload" }, { "name": "Observation mapApiToRealm should assign user.prefers_community_taxa from user.preferences.prefers_community_taxa", "duration": 2, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/models/Observation.test.js", "retries": 0, "flaky": false, "suite": "Observation.test.js > Observation > mapApiToRealm" }, { "name": "Observation mapApiToRealm should set _created_at to a date object without Realm", "duration": 0, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/models/Observation.test.js", "retries": 0, "flaky": false, "suite": "Observation.test.js > Observation > mapApiToRealm" }, { "name": "Observation mapApiToRealm should create observationSounds from observation_sounds", "duration": 1, "status": "passed", "rawStatus": "passed", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/models/Observation.test.js", "retries": 0, "flaky": false, "suite": "Observation.test.js > Observation > mapApiToRealm" }, { "name": "Observation needsSync should need sync when a photo needs sync", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/models/Observation.test.js", "retries": 0, "flaky": false, "suite": "Observation.test.js > Observation > needsSync" }, { "name": "Observation needsSync should need sync when a sound needs sync", "duration": 0, "status": "other", "rawStatus": "todo", "type": "unit", "filePath": "/Users/ryan/git/iNatRN/tests/unit/models/Observation.test.js", "retries": 0, "flaky": false, "suite": "Observation.test.js > Observation > needsSync" } ] } }