@@ -266,15 +266,41 @@ test("can be nested", async () => {
266266} )
267267
268268test ( "Async.Resolved renders only after the promise is resolved" , async ( ) => {
269- const promiseFn = ( ) => resolveTo ( "done" )
269+ const promiseFn = ( ) => resolveTo ( "ok" )
270+ const deferFn = ( ) => rejectTo ( "fail" )
270271 const { getByText, queryByText } = render (
271- < Async promiseFn = { promiseFn } >
272- < Async . Resolved > { data => data } </ Async . Resolved >
272+ < Async promiseFn = { promiseFn } deferFn = { deferFn } >
273+ < Async . Resolved > { ( data , { run } ) => < button onClick = { run } > { data } </ button > } </ Async . Resolved >
274+ < Async . Rejected > { error => error } </ Async . Rejected >
273275 </ Async >
274276 )
275- expect ( queryByText ( "done" ) ) . toBeNull ( )
276- await waitForElement ( ( ) => getByText ( "done" ) )
277- expect ( queryByText ( "done" ) ) . toBeInTheDocument ( )
277+ expect ( queryByText ( "ok" ) ) . toBeNull ( )
278+ await waitForElement ( ( ) => getByText ( "ok" ) )
279+ expect ( queryByText ( "ok" ) ) . toBeInTheDocument ( )
280+ expect ( queryByText ( "fail" ) ) . toBeNull ( )
281+ fireEvent . click ( getByText ( "ok" ) )
282+ await waitForElement ( ( ) => getByText ( "fail" ) )
283+ expect ( queryByText ( "ok" ) ) . toBeNull ( )
284+ expect ( queryByText ( "fail" ) ) . toBeInTheDocument ( )
285+ } )
286+
287+ test ( "Async.Resolved with persist renders old data on error" , async ( ) => {
288+ const promiseFn = ( ) => resolveTo ( "ok" )
289+ const deferFn = ( ) => rejectTo ( "fail" )
290+ const { getByText, queryByText } = render (
291+ < Async promiseFn = { promiseFn } deferFn = { deferFn } >
292+ < Async . Resolved persist > { ( data , { run } ) => < button onClick = { run } > { data } </ button > } </ Async . Resolved >
293+ < Async . Rejected > { error => error } </ Async . Rejected >
294+ </ Async >
295+ )
296+ expect ( queryByText ( "ok" ) ) . toBeNull ( )
297+ await waitForElement ( ( ) => getByText ( "ok" ) )
298+ expect ( queryByText ( "ok" ) ) . toBeInTheDocument ( )
299+ expect ( queryByText ( "fail" ) ) . toBeNull ( )
300+ fireEvent . click ( getByText ( "ok" ) )
301+ await waitForElement ( ( ) => getByText ( "fail" ) )
302+ expect ( queryByText ( "ok" ) ) . toBeInTheDocument ( )
303+ expect ( queryByText ( "fail" ) ) . toBeInTheDocument ( )
278304} )
279305
280306test ( "Async.Loading renders only while the promise is loading" , async ( ) => {
@@ -373,43 +399,3 @@ test("An unrelated change in props does not update the Context", async () => {
373399 )
374400 expect ( one ) . toBe ( two )
375401} )
376-
377- test ( "Async.Resolved does not render after deferFn rejection" , async ( ) => {
378- const promiseFn = ( ) => resolveTo ( "ok" )
379- const deferFn = ( ) => rejectTo ( "notok" )
380- const { getByText, queryByText } = render (
381- < Async promiseFn = { promiseFn } deferFn = { deferFn } >
382- < Async . Rejected > fail</ Async . Rejected >
383- < Async . Resolved > { ( data , { run } ) => < button onClick = { run } > next</ button > } </ Async . Resolved >
384- </ Async >
385- )
386-
387- expect ( queryByText ( "next" ) ) . toBeNull ( )
388- await waitForElement ( ( ) => getByText ( "next" ) )
389- expect ( queryByText ( "next" ) ) . toBeInTheDocument ( )
390- expect ( queryByText ( "fail" ) ) . toBeNull ( )
391- fireEvent . click ( getByText ( "next" ) )
392- await waitForElement ( ( ) => getByText ( "fail" ) )
393- expect ( queryByText ( "next" ) ) . toBeNull ( )
394- expect ( queryByText ( "fail" ) ) . toBeInTheDocument ( )
395- } )
396-
397- test ( "Async.Resolved renders after deferFn rejection with persist" , async ( ) => {
398- const promiseFn = ( ) => resolveTo ( "ok" )
399- const deferFn = ( ) => rejectTo ( "notok" )
400- const { getByText, queryByText } = render (
401- < Async promiseFn = { promiseFn } deferFn = { deferFn } >
402- < Async . Rejected > fail</ Async . Rejected >
403- < Async . Resolved persist > { ( data , { run } ) => < button onClick = { run } > next</ button > } </ Async . Resolved >
404- </ Async >
405- )
406-
407- expect ( queryByText ( "next" ) ) . toBeNull ( )
408- await waitForElement ( ( ) => getByText ( "next" ) )
409- expect ( queryByText ( "next" ) ) . toBeInTheDocument ( )
410- expect ( queryByText ( "fail" ) ) . toBeNull ( )
411- fireEvent . click ( getByText ( "next" ) )
412- await waitForElement ( ( ) => getByText ( "fail" ) )
413- expect ( queryByText ( "next" ) ) . toBeInTheDocument ( )
414- expect ( queryByText ( "fail" ) ) . toBeInTheDocument ( )
415- } )
0 commit comments