Skip to content

Commit abdc308

Browse files
test(query-devtools/Devtools): add tests for query details panel and query actions (#10685)
* test(query-devtools/Devtools): add tests for query details panel and query actions * ci: apply automated fixes * test(query-devtools/Devtools): re-query row before second click and assert exact 'pending' status after 'Restore Error' * ci: apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1 parent ac57627 commit abdc308

1 file changed

Lines changed: 106 additions & 0 deletions

File tree

packages/query-devtools/src/__tests__/Devtools.test.tsx

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,4 +469,110 @@ describe('Devtools', () => {
469469
expect(rendered.queryByRole('tooltip')).not.toBeInTheDocument()
470470
})
471471
})
472+
473+
describe('query details', () => {
474+
it('should open the query details panel when a query row is clicked', () => {
475+
queryClient.setQueryData(['posts'], [{ id: 1 }])
476+
const rendered = renderDevtools({ initialIsOpen: true })
477+
478+
fireEvent.click(rendered.getByLabelText(/Query key \["posts"\]/))
479+
480+
expect(rendered.getByText('Query Details')).toBeInTheDocument()
481+
})
482+
483+
it('should close the query details panel when the same row is clicked again', () => {
484+
queryClient.setQueryData(['details-toggle'], [{ id: 1 }])
485+
const rendered = renderDevtools({ initialIsOpen: true })
486+
487+
fireEvent.click(rendered.getByLabelText(/Query key \["details-toggle"\]/))
488+
fireEvent.click(rendered.getByLabelText(/Query key \["details-toggle"\]/))
489+
490+
expect(rendered.queryByText('Query Details')).not.toBeInTheDocument()
491+
})
492+
})
493+
494+
describe('query actions', () => {
495+
it('should remove the query when the "Remove" button is clicked', () => {
496+
queryClient.setQueryData(['action-remove'], [{ id: 1 }])
497+
const rendered = renderDevtools({ initialIsOpen: true })
498+
499+
fireEvent.click(rendered.getByLabelText(/Query key \["action-remove"\]/))
500+
fireEvent.click(rendered.getByText('Remove'))
501+
502+
expect(
503+
rendered.queryByLabelText(/Query key \["action-remove"\]/),
504+
).not.toBeInTheDocument()
505+
})
506+
507+
it('should reset the query when the "Reset" button is clicked', () => {
508+
queryClient.setQueryData(['action-reset'], [{ id: 1 }])
509+
const rendered = renderDevtools({ initialIsOpen: true })
510+
511+
fireEvent.click(rendered.getByLabelText(/Query key \["action-reset"\]/))
512+
fireEvent.click(rendered.getByText('Reset'))
513+
514+
expect(queryClient.getQueryData(['action-reset'])).toBeUndefined()
515+
})
516+
517+
it('should invalidate the query when the "Invalidate" button is clicked', () => {
518+
queryClient.setQueryData(['action-invalidate'], [{ id: 1 }])
519+
const rendered = renderDevtools({ initialIsOpen: true })
520+
521+
fireEvent.click(
522+
rendered.getByLabelText(/Query key \["action-invalidate"\]/),
523+
)
524+
fireEvent.click(rendered.getByText('Invalidate'))
525+
526+
expect(
527+
queryClient.getQueryState(['action-invalidate'])?.isInvalidated,
528+
).toBe(true)
529+
})
530+
531+
it('should dispatch a "REFETCH" event when "Refetch" is clicked', () => {
532+
queryClient.setQueryData(['action-refetch'], [{ id: 1 }])
533+
const rendered = renderDevtools({ initialIsOpen: true })
534+
535+
const listener = vi.fn()
536+
window.addEventListener('@tanstack/query-devtools-event', listener)
537+
538+
try {
539+
fireEvent.click(
540+
rendered.getByLabelText(/Query key \["action-refetch"\]/),
541+
)
542+
fireEvent.click(rendered.getByText('Refetch'))
543+
544+
const dispatched = listener.mock.calls.some(
545+
([e]) => (e as CustomEvent).detail.type === 'REFETCH',
546+
)
547+
expect(dispatched).toBe(true)
548+
} finally {
549+
window.removeEventListener('@tanstack/query-devtools-event', listener)
550+
}
551+
})
552+
553+
it('should set the query status to "error" when "Trigger Error" is clicked', () => {
554+
queryClient.setQueryData(['action-error'], [{ id: 1 }])
555+
const rendered = renderDevtools({ initialIsOpen: true })
556+
557+
fireEvent.click(rendered.getByLabelText(/Query key \["action-error"\]/))
558+
fireEvent.click(rendered.getByText('Trigger Error'))
559+
560+
expect(queryClient.getQueryState(['action-error'])?.status).toBe('error')
561+
})
562+
563+
it('should restore the query status when "Restore Error" is clicked after "Trigger Error"', () => {
564+
queryClient.setQueryData(['action-restore-error'], [{ id: 1 }])
565+
const rendered = renderDevtools({ initialIsOpen: true })
566+
567+
fireEvent.click(
568+
rendered.getByLabelText(/Query key \["action-restore-error"\]/),
569+
)
570+
fireEvent.click(rendered.getByText('Trigger Error'))
571+
fireEvent.click(rendered.getByText('Restore Error'))
572+
573+
expect(queryClient.getQueryState(['action-restore-error'])?.status).toBe(
574+
'pending',
575+
)
576+
})
577+
})
472578
})

0 commit comments

Comments
 (0)