11/* eslint-disable react-hooks/rules-of-hooks */
2+ import {
3+ createLoader ,
4+ withLoader ,
5+ } from "@ryfylke-react/rtk-query-loader" ;
26import userEvent from "@testing-library/user-event" ;
37import { useState } from "react" ;
4- import { createLoader } from "../../src/createLoader" ;
5- import { withLoader } from "../../src/withLoader" ;
68import {
79 useGetPokemonByNameQuery ,
810 useGetPokemonsQuery ,
@@ -14,9 +16,13 @@ import {
1416 LoadPokemon ,
1517 SimpleLoadedComponent ,
1618 TestAggregateComponent ,
17- TestTransformed ,
1819} from "./testComponents" ;
19- import { render , screen , waitFor } from "./utils" ;
20+ import {
21+ render ,
22+ screen ,
23+ waitFor ,
24+ waitForElementToBeRemoved ,
25+ } from "./utils" ;
2026
2127describe ( "aggregateToQuery" , ( ) => {
2228 test ( "It aggregates query status" , async ( ) => {
@@ -59,7 +65,9 @@ describe("withLoader", () => {
5965
6066 test ( "onFetching renders when applicable" , async ( ) => {
6167 render ( < FetchTestRenderer /> ) ;
62- expect ( screen . getByText ( "Loading" ) ) . toBeVisible ( ) ;
68+ await waitForElementToBeRemoved ( ( ) =>
69+ screen . queryByText ( "Loading" )
70+ ) ;
6371 await waitFor ( ( ) =>
6472 expect ( screen . getByRole ( "textbox" ) ) . toBeVisible ( )
6573 ) ;
@@ -68,34 +76,57 @@ describe("withLoader", () => {
6876 await waitFor ( ( ) =>
6977 expect ( screen . getByText ( "Fetching" ) ) . toBeVisible ( )
7078 ) ;
79+ await waitForElementToBeRemoved ( ( ) =>
80+ screen . queryByText ( "Fetching" )
81+ ) ;
7182 await waitFor ( ( ) =>
7283 expect ( screen . getByText ( "#3" ) ) . toBeVisible ( )
7384 ) ;
7485 } ) ;
7586
76- test ( "whileFetching renders when applicable " , async ( ) => {
87+ test ( "Internal state won't reset when using whileFetching " , async ( ) => {
7788 render ( < FetchTestRenderer while /> ) ;
78- expect ( screen . getByText ( "Loading" ) ) . toBeVisible ( ) ;
89+ await waitForElementToBeRemoved ( ( ) =>
90+ screen . queryByText ( "Loading" )
91+ ) ;
7992 await waitFor ( ( ) =>
8093 expect ( screen . getByRole ( "textbox" ) ) . toBeVisible ( )
8194 ) ;
8295 const input = screen . getByRole ( "textbox" ) ;
8396 userEvent . type ( input , "Abc{Enter}" ) ;
84- await waitFor (
85- ( ) =>
86- expect ( screen . getByText ( "FetchingWhile" ) ) . toBeVisible ( ) ,
87- { interval : 20 }
97+ await waitFor ( ( ) =>
98+ expect ( screen . getByText ( "FetchingWhile" ) ) . toBeVisible ( )
99+ ) ;
100+ await waitForElementToBeRemoved ( ( ) =>
101+ screen . queryByText ( "FetchingWhile" )
88102 ) ;
89103 await waitFor ( ( ) =>
90104 expect ( screen . getByText ( "#3" ) ) . toBeVisible ( )
91105 ) ;
106+ expect ( screen . getByRole ( "textbox" ) ) . toHaveValue ( "Abc" ) ;
92107 } ) ;
93108
94- test ( "Can transform the output of the loader" , async ( ) => {
95- render ( < TestTransformed /> ) ;
109+ // Not wanted behavior, but expected behavior:
110+ test ( "Internal state will reset when using onFetching" , async ( ) => {
111+ render ( < FetchTestRenderer /> ) ;
112+ await waitForElementToBeRemoved ( ( ) =>
113+ screen . queryByText ( "Loading" )
114+ ) ;
96115 await waitFor ( ( ) =>
97- expect ( screen . getByText ( "charizard" ) ) . toBeVisible ( )
116+ expect ( screen . getByRole ( "textbox" ) ) . toBeVisible ( )
117+ ) ;
118+ const input = screen . getByRole ( "textbox" ) ;
119+ userEvent . type ( input , "Abc{Enter}" ) ;
120+ await waitFor ( ( ) =>
121+ expect ( screen . getByText ( "Fetching" ) ) . toBeVisible ( )
122+ ) ;
123+ await waitForElementToBeRemoved ( ( ) =>
124+ screen . queryByText ( "Fetching" )
125+ ) ;
126+ await waitFor ( ( ) =>
127+ expect ( screen . getByText ( "#3" ) ) . toBeVisible ( )
98128 ) ;
129+ expect ( screen . getByRole ( "textbox" ) ) . toHaveValue ( "" ) ;
99130 } ) ;
100131
101132 describe ( ".extend()" , ( ) => {
@@ -241,7 +272,7 @@ describe("withLoader", () => {
241272 < ul >
242273 < li > { loaderData [ 0 ] . data . name } </ li >
243274 { loaderData [ 1 ] . data . results . map ( ( pokemon ) => (
244- < li > { pokemon . name } </ li >
275+ < li key = { pokemon . name } > { pokemon . name } </ li >
245276 ) ) }
246277 </ ul >
247278 </ div >
0 commit comments