Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫 forked from jollywhoppers.com/witchsky.app
Something went wrong. Try again.
2.6 kB · 101 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102import {findNodeHandle} from 'react-native'
import {getDialogSourceViewTag} from '#/components/Dialog/sourceViewTag'
jest.mock('react-native', () => ({ findNodeHandle: jest.fn(),}))
const findNodeHandleMock = jest.mocked(findNodeHandle)
beforeEach(() => { findNodeHandleMock.mockReset()})
describe('getDialogSourceViewTag', () => { it('prefers an explicitly configured native source view', () => { expect( getDialogSourceViewTag({ popover: 'adaptive', nativeSourceViewTag: 10, options: {sourceViewTag: 20}, }), ).toBe(10) })
it('uses the menu trigger source view for a popover', () => { expect( getDialogSourceViewTag({ popover: 'adaptive', options: {sourceViewTag: 20}, }), ).toBe(20) })
it.each(['always', 'adaptive'] as const)( 'normalizes numeric-string targets for %s popover dialogs', popover => { const event = { currentTarget: null, target: null, nativeEvent: {target: '42'}, } as never
expect(getDialogSourceViewTag({popover, options: event})).toBe(42) }, )
it.each(['always', 'adaptive'] as const)( 'uses the event host instance instead of a child target in %s mode', popover => { const currentTarget = {} findNodeHandleMock.mockReturnValue(42)
expect( getDialogSourceViewTag({ popover, options: { currentTarget, nativeEvent: {target: 99}, } as never, }), ).toBe(42) expect(findNodeHandleMock).toHaveBeenCalledWith(currentTarget) }, )
it.each(['always', 'adaptive'] as const)( 'leaves a programmatic %s popover unanchored when no source is supplied', popover => { expect(getDialogSourceViewTag({popover})).toBeUndefined() expect(findNodeHandleMock).not.toHaveBeenCalled() }, )
it('honors an explicit source view option for zoom transitions', () => { expect( getDialogSourceViewTag({ popover: 'never', options: {sourceViewTag: 42}, }), ).toBe(42) })
it('keeps configured source views for non-popover zoom transitions', () => { expect( getDialogSourceViewTag({popover: 'never', nativeSourceViewTag: 10}), ).toBe(10) })
it.each(['never', undefined] as const)( 'does not use an event target as a source for a %s non-popover dialog', popover => { expect( getDialogSourceViewTag({ popover, options: {nativeEvent: {target: 20} as never}, }), ).toBeUndefined() }, )})