about summary refs log tree commit diff
path: root/__tests__/view/shell/mobile/TabsSelector.test.tsx
blob: 9388d2440aaa353fc177badb469d182a54af5b30 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import React from 'react'
import {Animated, Share} from 'react-native'
import {TabsSelector} from '../../../../src/view/shell/mobile/TabsSelector'
import {cleanup, fireEvent, render} from '../../../../jest/test-utils'
import {mockedNavigationStore} from '../../../../__mocks__/state-mock'

describe('TabsSelector', () => {
  const onCloseMock = jest.fn()

  const mockedProps = {
    active: true,
    tabMenuInterp: new Animated.Value(0),
    onClose: onCloseMock,
  }

  afterAll(() => {
    jest.clearAllMocks()
    cleanup()
  })

  it('renders tabs selector', () => {
    const {getByTestId} = render(<TabsSelector {...mockedProps} />)

    const tabsSelectorView = getByTestId('tabsSelectorView')

    expect(tabsSelectorView).toBeTruthy()
  })

  it('renders nothing if inactive', () => {
    const {getByTestId} = render(
      <TabsSelector {...{...mockedProps, active: false}} />,
    )

    const emptyView = getByTestId('emptyView')

    expect(emptyView).toBeTruthy()
  })

  it('presses share button', () => {
    const shareSpy = jest.spyOn(Share, 'share')
    const {getByTestId} = render(<TabsSelector {...mockedProps} />)

    const shareButton = getByTestId('shareButton')
    fireEvent.press(shareButton)

    expect(onCloseMock).toHaveBeenCalled()
    expect(shareSpy).toHaveBeenCalledWith({url: 'https://bsky.app/'})
  })

  it('presses clone button', () => {
    const {getByTestId} = render(<TabsSelector {...mockedProps} />)

    const cloneButton = getByTestId('cloneButton')
    fireEvent.press(cloneButton)

    expect(onCloseMock).toHaveBeenCalled()
    expect(mockedNavigationStore.newTab).toHaveBeenCalled()
  })

  it('presses new tab button', () => {
    const {getByTestId} = render(<TabsSelector {...mockedProps} />)

    const newTabButton = getByTestId('newTabButton')
    fireEvent.press(newTabButton)

    expect(onCloseMock).toHaveBeenCalled()
    expect(mockedNavigationStore.newTab).toHaveBeenCalledWith('/')
  })

  it('presses change tab button', () => {
    const {getAllByTestId} = render(<TabsSelector {...mockedProps} />)

    const changeTabButton = getAllByTestId('changeTabButton')
    fireEvent.press(changeTabButton[0])

    expect(onCloseMock).toHaveBeenCalled()
    expect(mockedNavigationStore.newTab).toHaveBeenCalledWith('/')
  })

  it('presses close tab button', () => {
    const {getAllByTestId} = render(<TabsSelector {...mockedProps} />)

    const closeTabButton = getAllByTestId('closeTabButton')
    fireEvent.press(closeTabButton[0])

    expect(onCloseMock).toHaveBeenCalled()
    expect(mockedNavigationStore.setActiveTab).toHaveBeenCalledWith(0)
  })

  it('presses swipes to close the tab', () => {
    const {getByTestId} = render(<TabsSelector {...mockedProps} />)

    const tabsSwipable = getByTestId('tabsSwipable')
    fireEvent(tabsSwipable, 'swipeableRightOpen')

    expect(onCloseMock).toHaveBeenCalled()
    expect(mockedNavigationStore.setActiveTab).toHaveBeenCalledWith(0)
  })
})