Skip to content

Commit ce5df8e

Browse files
committed
#RIVS-304 - Auto refresh
1 parent 9aea8d8 commit ce5df8e

File tree

15 files changed

+581
-44
lines changed

15 files changed

+581
-44
lines changed
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
import React from 'react'
2+
import { instance, mock } from 'ts-mockito'
3+
import { fireEvent, screen, render, act } from 'testSrc/helpers'
4+
import { AutoRefresh, Props } from './AutoRefresh'
5+
import { DEFAULT_REFRESH_RATE } from './utils'
6+
7+
const mockedProps = mock<Props>()
8+
9+
const INLINE_ITEM_EDITOR = 'inline-item-editor'
10+
11+
describe('AutoRefresh', () => {
12+
it('should render', () => {
13+
expect(render(<AutoRefresh {...instance(mockedProps)} />)).toBeTruthy()
14+
})
15+
16+
it('prop "displayText = true" should show Refresh text', () => {
17+
const { queryByTestId } = render(<AutoRefresh {...instance(mockedProps)} displayText />)
18+
19+
expect(queryByTestId('refresh-message-label')).toBeInTheDocument()
20+
})
21+
22+
it('prop "displayText = false" should hide Refresh text', () => {
23+
const { queryByTestId } = render(<AutoRefresh {...instance(mockedProps)} displayText={false} />)
24+
25+
expect(queryByTestId('refresh-message-label')).not.toBeInTheDocument()
26+
})
27+
28+
it('should call onRefresh', () => {
29+
const onRefresh = vi.fn()
30+
render(<AutoRefresh {...instance(mockedProps)} onRefresh={onRefresh} />)
31+
32+
fireEvent.click(screen.getByTestId('refresh-btn'))
33+
expect(onRefresh).toBeCalled()
34+
})
35+
36+
it('refresh text should contain "Last refresh" time with disabled auto-refresh', async () => {
37+
render(<AutoRefresh {...instance(mockedProps)} displayText />)
38+
39+
expect(screen.getByTestId('refresh-message-label')).toHaveTextContent(/Last refresh:/i)
40+
expect(screen.getByTestId('refresh-message')).toHaveTextContent('now')
41+
})
42+
43+
it('refresh text should contain "Auto-refresh" time with enabled auto-refresh', async () => {
44+
render(<AutoRefresh {...instance(mockedProps)} displayText />)
45+
46+
fireEvent.click(screen.getByTestId('auto-refresh-config-btn'))
47+
fireEvent.click(screen.getByTestId('auto-refresh-switch'))
48+
49+
expect(screen.getByTestId('refresh-message-label')).toHaveTextContent(/Auto refresh:/i)
50+
expect(screen.getByTestId('refresh-message')).toHaveTextContent(DEFAULT_REFRESH_RATE)
51+
})
52+
53+
it('should locate refresh message label when testid is provided', () => {
54+
render(<AutoRefresh {...instance(mockedProps)} displayText testid="testid" />)
55+
56+
expect(screen.getByTestId('testid-refresh-message-label')).toBeInTheDocument()
57+
})
58+
59+
it('should locate refresh message when testid is provided', () => {
60+
render(<AutoRefresh {...instance(mockedProps)} displayText testid="testid" />)
61+
62+
expect(screen.getByTestId('testid-refresh-message')).toBeInTheDocument()
63+
})
64+
65+
it('should locate refresh button when testid is provided', () => {
66+
render(<AutoRefresh {...instance(mockedProps)} testid="testid" />)
67+
68+
expect(screen.getByTestId('testid-refresh-btn')).toBeInTheDocument()
69+
})
70+
71+
it('should locate auto-refresh config button when testid is provided', () => {
72+
render(<AutoRefresh {...instance(mockedProps)} testid="testid" />)
73+
74+
expect(screen.getByTestId('testid-auto-refresh-config-btn')).toBeInTheDocument()
75+
})
76+
77+
it('should locate auto-refresh switch when testid is provided', () => {
78+
render(<AutoRefresh {...instance(mockedProps)} testid="testid" />)
79+
80+
fireEvent.click(screen.getByTestId('testid-auto-refresh-config-btn'))
81+
expect(screen.getByTestId('testid-auto-refresh-switch')).toBeInTheDocument()
82+
})
83+
84+
describe('AutoRefresh Config', () => {
85+
it('Auto refresh config should render', () => {
86+
const { queryByTestId } = render(<AutoRefresh {...instance(mockedProps)} />)
87+
88+
fireEvent.click(screen.getByTestId('auto-refresh-config-btn'))
89+
expect(queryByTestId('auto-refresh-switch')).toBeInTheDocument()
90+
})
91+
92+
it('should call onRefresh after enable auto-refresh and set 1 sec', async () => {
93+
const onRefresh = vi.fn()
94+
render(<AutoRefresh {...instance(mockedProps)} onRefresh={onRefresh} />)
95+
96+
fireEvent.click(screen.getByTestId('auto-refresh-config-btn'))
97+
fireEvent.click(screen.getByTestId('auto-refresh-switch'))
98+
fireEvent.click(screen.getByTestId(INLINE_ITEM_EDITOR))
99+
100+
fireEvent.input(screen.getByTestId(INLINE_ITEM_EDITOR), { target: { value: '1' } })
101+
expect(screen.getByTestId(INLINE_ITEM_EDITOR)).toHaveValue('1')
102+
103+
screen.getByTestId(/apply-btn/).click()
104+
105+
await act(async () => {
106+
await new Promise((r) => setTimeout(r, 1300))
107+
})
108+
expect(onRefresh).toBeCalledTimes(1)
109+
110+
await act(async () => {
111+
await new Promise((r) => setTimeout(r, 1300))
112+
})
113+
expect(onRefresh).toBeCalledTimes(2)
114+
115+
await act(async () => {
116+
await new Promise((r) => setTimeout(r, 1300))
117+
})
118+
expect(onRefresh).toBeCalledTimes(3)
119+
})
120+
})
121+
122+
it('should NOT call onRefresh with disabled state', async () => {
123+
const onRefresh = vi.fn()
124+
const { rerender } = render(<AutoRefresh {...instance(mockedProps)} onRefresh={onRefresh} />)
125+
126+
fireEvent.click(screen.getByTestId('auto-refresh-config-btn'))
127+
fireEvent.click(screen.getByTestId('auto-refresh-switch'))
128+
fireEvent.click(screen.getByTestId(INLINE_ITEM_EDITOR))
129+
fireEvent.input(screen.getByTestId(INLINE_ITEM_EDITOR), { target: { value: '1' } })
130+
131+
expect(screen.getByTestId(INLINE_ITEM_EDITOR)).toHaveValue('1')
132+
133+
screen.getByTestId(/apply-btn/).click()
134+
135+
await act(() => {
136+
rerender(<AutoRefresh {...instance(mockedProps)} onRefresh={onRefresh} disabled />)
137+
})
138+
139+
await act(async () => {
140+
await new Promise((r) => setTimeout(r, 1300))
141+
})
142+
expect(onRefresh).toBeCalledTimes(0)
143+
144+
await act(async () => {
145+
await new Promise((r) => setTimeout(r, 1300))
146+
})
147+
expect(onRefresh).toBeCalledTimes(0)
148+
149+
await act(() => {
150+
rerender(<AutoRefresh {...instance(mockedProps)} onRefresh={onRefresh} disabled={false} />)
151+
})
152+
153+
await act(async () => {
154+
await new Promise((r) => setTimeout(r, 1300))
155+
})
156+
expect(onRefresh).toBeCalledTimes(1)
157+
})
158+
})

0 commit comments

Comments
 (0)