@@ -1843,7 +1843,7 @@ describe('managerApi', () => {
1843
1843
it ( 'calls async submit' , async ( ) => {
1844
1844
jest . useFakeTimers ( ) ;
1845
1845
1846
- const onSubmit = jest . fn ( ) . mockImplementation ( ( ) => new Promise ( ( res ) => setTimeout ( ( ) => res ( 'ok' ) , 1000 ) ) ) ;
1846
+ const onSubmit = jest . fn ( ) . mockImplementation ( ( ) => new Promise ( ( res ) => setTimeout ( ( ) => res ( ) , 1000 ) ) ) ;
1847
1847
const render = jest . fn ( ) ;
1848
1848
1849
1849
const managerApi = createManagerApi ( { onSubmit } ) ;
@@ -1870,12 +1870,43 @@ describe('managerApi', () => {
1870
1870
expect ( managerApi ( ) . hasSubmitErrors ) . toEqual ( false ) ;
1871
1871
} ) ;
1872
1872
1873
+ it ( 'calls async submit - submit fails on catch (i.e. network error), return to normal' , async ( ) => {
1874
+ jest . useFakeTimers ( ) ;
1875
+
1876
+ const onSubmit = jest . fn ( ) . mockImplementation ( ( ) => new Promise ( ( res , rej ) => setTimeout ( ( ) => rej ( ) , 1000 ) ) ) ;
1877
+ const render = jest . fn ( ) ;
1878
+
1879
+ const managerApi = createManagerApi ( { onSubmit } ) ;
1880
+
1881
+ managerApi ( ) . registerField ( { name : 'field' , internalId : '1' , render } ) ;
1882
+
1883
+ expect ( managerApi ( ) . submitting ) . toEqual ( false ) ;
1884
+ expect ( render ) . not . toHaveBeenCalled ( ) ;
1885
+
1886
+ managerApi ( ) . submit ( ) ;
1887
+
1888
+ expect ( render ) . toHaveBeenCalled ( ) ;
1889
+ render . mockClear ( ) ;
1890
+ expect ( managerApi ( ) . submitting ) . toEqual ( true ) ;
1891
+
1892
+ await jest . runAllTimers ( ) ;
1893
+ await jest . runAllTimers ( ) ; // catch needs to be run 2x
1894
+
1895
+ expect ( render ) . toHaveBeenCalled ( ) ;
1896
+ expect ( managerApi ( ) . submitting ) . toEqual ( false ) ;
1897
+ expect ( managerApi ( ) . submitError ) . toEqual ( undefined ) ;
1898
+ expect ( managerApi ( ) . submitFailed ) . toEqual ( false ) ;
1899
+ expect ( managerApi ( ) . submitSucceeded ) . toEqual ( true ) ;
1900
+ expect ( managerApi ( ) . submitErrors ) . toEqual ( undefined ) ;
1901
+ expect ( managerApi ( ) . hasSubmitErrors ) . toEqual ( false ) ;
1902
+ } ) ;
1903
+
1873
1904
it ( 'calls async submit - failed' , async ( ) => {
1874
1905
jest . useFakeTimers ( ) ;
1875
1906
1876
1907
const error = 'some evil error' ;
1877
1908
1878
- const onSubmit = jest . fn ( ) . mockImplementation ( ( ) => new Promise ( ( res , rej ) => setTimeout ( ( ) => rej ( error ) , 100 ) ) ) ;
1909
+ const onSubmit = jest . fn ( ) . mockImplementation ( ( ) => new Promise ( ( res ) => setTimeout ( ( ) => res ( error ) , 100 ) ) ) ;
1879
1910
const render = jest . fn ( ) ;
1880
1911
1881
1912
const managerApi = createManagerApi ( { onSubmit } ) ;
@@ -1893,7 +1924,6 @@ describe('managerApi', () => {
1893
1924
expect ( managerApi ( ) . submitting ) . toEqual ( true ) ;
1894
1925
1895
1926
await jest . runAllTimers ( ) ;
1896
- await jest . runAllTimers ( ) ; // for some reason, catch branch is not triggerd on first run
1897
1927
1898
1928
expect ( render ) . toHaveBeenCalled ( ) ;
1899
1929
expect ( managerApi ( ) . submitError ) . toEqual ( undefined ) ;
@@ -1909,7 +1939,7 @@ describe('managerApi', () => {
1909
1939
1910
1940
const error = { [ FORM_ERROR ] : 'some evil error' } ;
1911
1941
1912
- const onSubmit = jest . fn ( ) . mockImplementation ( ( ) => new Promise ( ( res , rej ) => setTimeout ( ( ) => rej ( error ) , 100 ) ) ) ;
1942
+ const onSubmit = jest . fn ( ) . mockImplementation ( ( ) => new Promise ( ( res ) => setTimeout ( ( ) => res ( error ) , 100 ) ) ) ;
1913
1943
const render = jest . fn ( ) ;
1914
1944
1915
1945
const managerApi = createManagerApi ( { onSubmit } ) ;
@@ -1927,7 +1957,6 @@ describe('managerApi', () => {
1927
1957
expect ( managerApi ( ) . submitting ) . toEqual ( true ) ;
1928
1958
1929
1959
await jest . runAllTimers ( ) ;
1930
- await jest . runAllTimers ( ) ; // for some reason, catch branch is not triggerd on first run
1931
1960
1932
1961
expect ( render ) . toHaveBeenCalled ( ) ;
1933
1962
expect ( managerApi ( ) . submitError ) . toEqual ( 'some evil error' ) ;
@@ -1937,6 +1966,45 @@ describe('managerApi', () => {
1937
1966
expect ( managerApi ( ) . submitErrors ) . toEqual ( error ) ;
1938
1967
expect ( managerApi ( ) . hasSubmitErrors ) . toEqual ( true ) ;
1939
1968
} ) ;
1969
+
1970
+ it ( 'calls async submit - failed - set async error on field' , async ( ) => {
1971
+ jest . useFakeTimers ( ) ;
1972
+
1973
+ const error = { nested : { field : 'some evil error' } } ;
1974
+
1975
+ const onSubmit = jest . fn ( ) . mockImplementation ( ( ) => new Promise ( ( res ) => setTimeout ( ( ) => res ( error ) , 100 ) ) ) ;
1976
+ const render = jest . fn ( ) ;
1977
+
1978
+ const managerApi = createManagerApi ( { onSubmit } ) ;
1979
+
1980
+ managerApi ( ) . registerField ( { name : 'nested.field' , internalId : '1' , render } ) ;
1981
+
1982
+ expect ( managerApi ( ) . submitting ) . toEqual ( false ) ;
1983
+ expect ( render ) . not . toHaveBeenCalled ( ) ;
1984
+
1985
+ managerApi ( ) . submit ( ) ;
1986
+
1987
+ expect ( render ) . toHaveBeenCalled ( ) ;
1988
+ render . mockClear ( ) ;
1989
+
1990
+ expect ( managerApi ( ) . getFieldState ( 'nested.field' ) . submitting ) . toEqual ( true ) ;
1991
+ expect ( managerApi ( ) . submitting ) . toEqual ( true ) ;
1992
+
1993
+ await jest . runAllTimers ( ) ;
1994
+
1995
+ expect ( render ) . toHaveBeenCalled ( ) ;
1996
+ expect ( managerApi ( ) . submitError ) . toEqual ( undefined ) ;
1997
+ expect ( managerApi ( ) . submitting ) . toEqual ( false ) ;
1998
+ expect ( managerApi ( ) . submitFailed ) . toEqual ( true ) ;
1999
+ expect ( managerApi ( ) . submitSucceeded ) . toEqual ( false ) ;
2000
+ expect ( managerApi ( ) . submitErrors ) . toEqual ( error ) ;
2001
+ expect ( managerApi ( ) . hasSubmitErrors ) . toEqual ( true ) ;
2002
+
2003
+ expect ( managerApi ( ) . getFieldState ( 'nested.field' ) . submitError ) . toEqual ( 'some evil error' ) ;
2004
+ expect ( managerApi ( ) . getFieldState ( 'nested.field' ) . submitting ) . toEqual ( false ) ;
2005
+ expect ( managerApi ( ) . getFieldState ( 'nested.field' ) . submitFailed ) . toEqual ( true ) ;
2006
+ expect ( managerApi ( ) . getFieldState ( 'nested.field' ) . submitSucceeded ) . toEqual ( false ) ;
2007
+ } ) ;
1940
2008
} ) ;
1941
2009
1942
2010
describe ( 'warning validation' , ( ) => {
0 commit comments