Since updating react-native-share-menu to version 7 there are no more differences in the return structure of the shared data. So, on both platforms the app should behave the same.
* only return observations from useLocalObs
* remove unnecessary var
* export unsync'd filter
* remove obsoleted numUnuploadedObservations zustand state
* tests, typo
* fix tests
* add sync fields to keypaths & depp array
* consistent naming
* handle only ids downstream
* switch over to useIds
* restore ids return
* memoize realm mapping result
* extract realm hooks mocks into factory-available helper
* reapply to myobsresults
* reapply to myobsresults
* go back to wrapped ids for list parity
* fix test
* restrict mocked prop for more accurate MyObsSimple test
* comment cleanup
* fix fake timer flake w/ corrected setup
Claude:
1. withAnimatedTimeTravelEnabled({ skipFakeTimers: true }) does NOT call jest.useFakeTimers(), but still calls jest.setSystemTime(new Date(0)) in beforeEach — which requires fake timers.
2. Both SoundRecorder.test.js and PhotoDeletionExisting.test.js (and ObsEdit.test.js) call global.timeTravel(300) inside waitFor, which also requires fake timers.
3. Tests pass flakily when fake timers accidentally leak from another test file running in the same Jest worker. When they don't leak, timeTravel throws.
4. FadeInView is fully mocked to a plain View (instant) and Reanimated uses setUpTests(), so the 300ms timeTravel isn't actually advancing any real animation — it's just broken.
The fix: guard setSystemTime with the same check, and remove the timeTravel(300) calls from waitFor in tests that use skipFakeTimers: true.
* fix remaining time travel uses
* reset / restore timers to fix leaking fake timers
* Move one broken test and switch back to toBeVisible
* Remove comments
* Move without changes
* Add helper function
* Call mock helper in beforeAll
* Add fileName to mock assets
* Refactor navigateToPhotoImporter into helper
* Use fake timers and time travel
* File move without changes
* Add import
* Update addObsBottomSheet.js
* Refactor navigation steps into new helpers
* Add layout setup
* Use skipFakeTimers here
* Remove setup
* Replace final expectation
* Add mock for Mortal in a new helper file
* Sort imports
* Remove superfluous act
* Move file without changes
* Add time travel to final expect
* Use Mortal mock
* Change one test expect
TODO: is this still the same behaviour tested, toBeNull can be of other reasons as well?
* Refactor nav to Standard camera into new helpers
* Replace fireEvent with userEvent
* Update imports
* Move file without changesUpdate firebase mock
* Move file without changes
* Add Mortal mock
* Use toBeVisible again
* Use toBeVisible
* Refactor nav to AI camera into helpers
* Refactor take photo and na into helpers
* Refactor an action of the two previous combined actions
* Somehow there were two identical describe
* Wrong order
* No longer needed
* Refactor last expect of this test into helper
* Use global time travel here
* Remove import
* Move file without changes
* Use toBeVisible again
* Use Mortal mock
* Re-use already made helper fct here
* Fix imports
* Move file without changes
* Enable animated time travel
* Use toBeVisible
* Add time travel to last expects
* Remove double checks for being on the correct screen
* Move file without changes
* Add fileName to mock assets
* Switch back to toBeVisible
* Enable animated time travel
* Add time travel to last expect
* Re-use new navigation helper
* Add mock for InteractionManager
* Move file without changes
* Use toBeVisible again
* Add InteractionManager mock
* Add animate time travel
* Missing import
* Remove from previous commit
* Add helper shell
* Move the Save button press
* Move missing evidence sheet dismissal
* Update MyObservations.test.js
* Set screen after photo import
* Remove import
* Sort imports
* Add a mock for ImagePicker
* Navigate to PhotoImported instead of No evidence option
Does not matter for this test where the new obs comes from
* Re-use helper fct
* Arg name
* Disable lint
* Move file without changes
* Replace with new helper fct
* Enable animated time travel
* Replace also below with new helper
* Move fct call
* Use toBeVisible again
* Use toBeVisible again
* Use toBeVisible again with different find strategy
* Remove trip through Suggestions for this test
* Add InteractionManager mock
* Move beforeEach
* Move function call
* Re-use new helper function
* Handle saveOptions
* Missing imports
* Add helper function
* Wait for toolbar helper
* Wait for the element like we did before this PR
* Wait for one more element
* Update PhotoImport.test.js
* Comment out optional wait
* Rename arg
* File move without changes
* Re-use new helper function
* Re-use new helper function
* Use toBeVisible again
* Enable animated time travel
* Add a new find
* New helper fct
* Remove local version of confirm
* New take photo helper does more, so restrict to not confirm the photo yet here
* Update PhotoDeletion.test.js
* Update PhotoDeletion.test.js
* Remove fake timers
* Missing imports
* Add Mortal mock
* Update PhotoDeletion.test.js
* Update PhotoDeletion.test.js
* Copy PhotoDeletion test into new file to split out tests about existing photos
* Remove other todo test
* Add InteractionManager mock
* Remove Mortal mock
* Remove new photo test
* Delete new photo test
* Remove existing photo test
* Remove existing photo test
* Remove helper fct
* Remove import
* This should not have been deleted
* Refactor to use new helpers to create an obs with photo and wait on ObsEdit
* Add the part until we wait on ObsEdit
* Remove double await
* Rename describe
* This was wrongly inserted here
* Wait with time travel to be on camera
* At this point we have two photos, so tap on first one
* Update PhotoDeletionExisting.test.js
* Move beforeEach
* That was wrong, we should not have taken a second photo
* Remove cv mock
* Add import
* Add import
* Add import
* Remove location mock
* Update PhotoDeletionExisting.test.js
* Move file without changes
* Switch back to toBeVisible again
* Re-use new helper fct
* Add Mortal mock
* Move broken tests without changes
* Mock Mortal
* Use toBeVisible again
* Re-use new helper fct
* Enable animated time trael
* Camera needs different layout state
* This was pressing twice
* Remove tiny local helper
* Re-use local helper
* Remove unused code
* Remove ignore Paths
Yay
* Remove unused helper
* Update react-native-fs.ts
* Move fct out of try/catch
* Revert "Move fct out of try/catch"
This reverts commit f9a138e0dd.
* Only have find text in try catch
* Add mock for useObject
* Remove broken test
---------
Co-authored-by: Johannes Klein <17345891+jtklein@users.noreply.github.com>
* Create new hook shell
* Revert "Create new hook shell"
This reverts commit b6918db347.
* Copy ObsDetailsDefaultModeScreensWrapper as is to new file
* Copy ObsDetailsContainer as is into new file
* We don't need this param at this level
* Have new ObsDetailsContainer be the next child of screen
* Update props of new child and remove thereby hoisted code
* Move route param extraction into component that needs it
* Extract presentational logic into new component
* Also copy over flow types
* Also copy over flow types
* Return null if no observation
* Remove mode switch logic from navigator
* Remove no longer needed advanced mode container
* Consolidate default mode container into new one as well, and switch over default mode to show default mode UI
* Same as in advanced mode, read param where it is needed
* Remove prop
* Run the integration test on the only container
* Git mv test file and update with new import
* Move test and only keep the UI logic part being tested
* Move tests relevant for ObsDetailsScreen
* Update ObsDetailsScreen.test.js
* Update IdentificationSheets.test.js
* Remove unused screen wrapper
* Do not filter out hidden comments and IDs when getting an obs from server
* Do not add a filtered set of comments and IDs to local obs
Searching for visibleComments and visibleIdentifications anyways gives 0 results outside this file.
* Move file
* Remove flow
* Type fcts
* Add a type to item
* More types
* Add field to RealmTaxon
* Type navigation as used in ObsDetails
* Update ActivityItem.tsx
* Migrate FloatingButtons to TS
* Change prop type
* Rename ActivityHeader
* Migrate ActivityHeaderKebabMenu to TS
* Type functions
* Add undefined as possibility from TextInputSheet callback
* Revert "Add undefined as possibility from TextInputSheet callback"
This reverts commit 95b5fef2b9.
* Revert "Type functions"
This reverts commit 6997f195ce.
* Revert "Rename ActivityHeader"
This reverts commit e384c1f5a5.
* Revert "Update ActivityItem.tsx"
This reverts commit c1dc151b9a.
* Revert "Add field to RealmTaxon"
This reverts commit 965af041c0.
* Revert "More types"
This reverts commit 73af10bfcd.
* Revert "Add a type to item"
This reverts commit 5e5bf0ebae.
* Revert "Type fcts"
This reverts commit 84cac53e33.
* Revert "Type navigation as used in ObsDetails"
This reverts commit 9febf9ea30.
* Revert "Remove flow"
This reverts commit dca054c212.
* Revert "Move file"
This reverts commit bf62c0db95.
* Add UI for a hidden comment/ID
* Rename export like file name
* Update ID category text in tests
* Ask for hidden status from API and persist in realm
* Show fallback UI for hidden photos in PhotoContainer
* Update strings.ftl
* Show fallback UI for hidden sounds in SoundContainer
* Change mock to remoteObservation
Previously, this test file was relying on a faulty remoteObservation. The passed in remoteObservation was {} and because of the now removed filter code in useRemoteObservation what was passes into the test was {comments:[], identifications:[]} which made this test pass without ever using the useLocalObervation mock.
* Add eye icon to photo
* Add eye icon to sound
* Add eye icon to comments/IDs
* use bottom sheet api instead of returning null when hidden
* dedupe inside modal dismiss logic
* rename handleSnapPress -> openSheet
* ts fixes and split render into two branches
* fix integration test so we check for BottomSheet behavior rather than child absence
* snapshot updates + comments
* prevent hidden-state BottomSheet dismiss from triggering onPressClose
* port changes from BottomSheet to BottomSheetV2
* Upgrade helper: package.json
* Upgrade helper: gems
* Upgrade helper: Android
* Update AppDelegate
* Fix error in compiling
* Update package-lock.json
* Update Podfile.lock
* Update package-lock.json
* Update Podfile.lock
* Remove no longer needed mock
* Comment out entire test and not only the expect call
* Most other unit tests use this render helper function that
wraps the component in the entire app.
* Mock react-native exports as esModule
* Update .flowconfig
* Update Gemfile
* Revert "Comment out entire test and not only the expect call"
This reverts commit 8785f81529.