@@ -1219,6 +1219,47 @@ describe('managerApi', () => {
1219
1219
} ) ;
1220
1220
} ) ;
1221
1221
} ) ;
1222
+
1223
+ it ( 'should reset error state when revalidated' , ( ) => {
1224
+ jest . useFakeTimers ( ) ;
1225
+ const render = jest . fn ( ) ;
1226
+ const managerApi = createManagerApi ( { validate : asyncValidate } ) ;
1227
+ const { registerField, change } = managerApi ( ) ;
1228
+
1229
+ registerField ( { name : 'foo' , render } ) ;
1230
+
1231
+ change ( 'foo' , 'foo' ) ;
1232
+
1233
+ jest . advanceTimersByTime ( 10 ) ;
1234
+ setImmediate ( ( ) => {
1235
+ expect ( managerApi ( ) . getState ( ) . errors ) . toEqual ( {
1236
+ foo : 'error'
1237
+ } ) ;
1238
+ expect ( managerApi ( ) . getState ( ) . valid ) . toEqual ( false ) ;
1239
+ expect ( managerApi ( ) . getState ( ) . invalid ) . toEqual ( true ) ;
1240
+ expect ( managerApi ( ) . getState ( ) . validating ) . toEqual ( false ) ;
1241
+ expect ( managerApi ( ) . hasValidationErrors ) . toEqual ( true ) ;
1242
+
1243
+ change ( 'foo' , 'foo' ) ;
1244
+
1245
+ expect ( managerApi ( ) . getState ( ) . errors ) . toEqual ( { } ) ;
1246
+ expect ( managerApi ( ) . getState ( ) . valid ) . toEqual ( true ) ;
1247
+ expect ( managerApi ( ) . getState ( ) . invalid ) . toEqual ( false ) ;
1248
+ expect ( managerApi ( ) . getState ( ) . validating ) . toEqual ( true ) ;
1249
+ expect ( managerApi ( ) . hasValidationErrors ) . toEqual ( false ) ;
1250
+
1251
+ jest . advanceTimersByTime ( 10 ) ;
1252
+ setImmediate ( ( ) => {
1253
+ expect ( managerApi ( ) . getState ( ) . errors ) . toEqual ( {
1254
+ foo : 'error'
1255
+ } ) ;
1256
+ expect ( managerApi ( ) . getState ( ) . valid ) . toEqual ( false ) ;
1257
+ expect ( managerApi ( ) . getState ( ) . invalid ) . toEqual ( true ) ;
1258
+ expect ( managerApi ( ) . getState ( ) . validating ) . toEqual ( false ) ;
1259
+ expect ( managerApi ( ) . hasValidationErrors ) . toEqual ( true ) ;
1260
+ } ) ;
1261
+ } ) ;
1262
+ } ) ;
1222
1263
} ) ;
1223
1264
1224
1265
describe ( 'Combine form and field level validation' , ( ) => {
@@ -1532,6 +1573,37 @@ describe('managerApi', () => {
1532
1573
} ) ;
1533
1574
} ) ;
1534
1575
} ) ;
1576
+
1577
+ it ( 'should reset field.error when validating' , async ( done ) => {
1578
+ expect . assertions ( 8 ) ;
1579
+ jest . useFakeTimers ( ) ;
1580
+ const render = jest . fn ( ) ;
1581
+
1582
+ const managerApi = createManagerApi ( { } ) ;
1583
+ managerApi ( ) . registerField ( { name : 'field' , initialValue : 'one' , validate : asyncValidate1 , render, internalId : 1 } ) ;
1584
+
1585
+ jest . runAllTimers ( ) ;
1586
+
1587
+ setImmediate ( ( ) => {
1588
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . error ) . toEqual ( 'error-one' ) ;
1589
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . valid ) . toEqual ( false ) ;
1590
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . invalid ) . toEqual ( true ) ;
1591
+
1592
+ managerApi ( ) . change ( 'field' , 'ok' ) ;
1593
+
1594
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . error ) . toEqual ( undefined ) ;
1595
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . valid ) . toEqual ( true ) ;
1596
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . invalid ) . toEqual ( false ) ;
1597
+
1598
+ jest . runAllTimers ( ) ;
1599
+
1600
+ setImmediate ( ( ) => {
1601
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . validating ) . toEqual ( false ) ;
1602
+ expect ( managerApi ( ) . getState ( ) . validating ) . toEqual ( false ) ;
1603
+ done ( ) ;
1604
+ } ) ;
1605
+ } ) ;
1606
+ } ) ;
1535
1607
} ) ;
1536
1608
1537
1609
describe ( 'initialize' , ( ) => {
@@ -2019,6 +2091,36 @@ describe('managerApi', () => {
2019
2091
expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . error ) . toEqual ( undefined ) ;
2020
2092
} ) ;
2021
2093
2094
+ it ( 'warning should rewrite error - sync' , ( ) => {
2095
+ const managerApi = createManagerApi ( { } ) ;
2096
+ managerApi ( ) . registerField ( {
2097
+ name : 'field' ,
2098
+ initialValue : 'warning' ,
2099
+ validate : ( value ) => ( value === 'warning' ? { type : 'warning' , error : someError } : 'error' ) ,
2100
+ render,
2101
+ internalId : 1
2102
+ } ) ;
2103
+
2104
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . warning ) . toEqual ( someError ) ;
2105
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . error ) . toEqual ( undefined ) ;
2106
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . valid ) . toEqual ( true ) ;
2107
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . invalid ) . toEqual ( false ) ;
2108
+
2109
+ managerApi ( ) . change ( 'field' , 'error' ) ;
2110
+
2111
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . warning ) . toEqual ( undefined ) ;
2112
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . error ) . toEqual ( 'error' ) ;
2113
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . valid ) . toEqual ( false ) ;
2114
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . invalid ) . toEqual ( true ) ;
2115
+
2116
+ managerApi ( ) . change ( 'field' , 'warning' ) ;
2117
+
2118
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . warning ) . toEqual ( someError ) ;
2119
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . error ) . toEqual ( undefined ) ;
2120
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . valid ) . toEqual ( true ) ;
2121
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . invalid ) . toEqual ( false ) ;
2122
+ } ) ;
2123
+
2022
2124
it ( 'should save type: warning as warning - async' , ( done ) => {
2023
2125
expect . assertions ( 2 ) ;
2024
2126
@@ -2033,6 +2135,52 @@ describe('managerApi', () => {
2033
2135
done ( ) ;
2034
2136
} ) ;
2035
2137
} ) ;
2138
+
2139
+ it ( 'warning should rewrite error - async' , ( done ) => {
2140
+ expect . assertions ( 18 ) ;
2141
+
2142
+ const asyncValidate = jest
2143
+ . fn ( )
2144
+ . mockImplementation ( ( value ) => Promise . reject ( value === 'warning' ? { type : 'warning' , error : someError } : 'error' ) ) ;
2145
+
2146
+ const managerApi = createManagerApi ( { } ) ;
2147
+ managerApi ( ) . registerField ( { name : 'field' , initialValue : 'warning' , validate : asyncValidate , render, internalId : 1 } ) ;
2148
+
2149
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . validating ) . toEqual ( true ) ;
2150
+
2151
+ setImmediate ( ( ) => {
2152
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . warning ) . toEqual ( someError ) ;
2153
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . error ) . toEqual ( undefined ) ;
2154
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . valid ) . toEqual ( true ) ;
2155
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . invalid ) . toEqual ( false ) ;
2156
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . validating ) . toEqual ( false ) ;
2157
+
2158
+ managerApi ( ) . change ( 'field' , 'error' ) ;
2159
+
2160
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . validating ) . toEqual ( true ) ;
2161
+
2162
+ setImmediate ( ( ) => {
2163
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . warning ) . toEqual ( undefined ) ;
2164
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . error ) . toEqual ( 'error' ) ;
2165
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . valid ) . toEqual ( false ) ;
2166
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . invalid ) . toEqual ( true ) ;
2167
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . validating ) . toEqual ( false ) ;
2168
+
2169
+ managerApi ( ) . change ( 'field' , 'warning' ) ;
2170
+
2171
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . validating ) . toEqual ( true ) ;
2172
+
2173
+ setImmediate ( ( ) => {
2174
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . warning ) . toEqual ( someError ) ;
2175
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . error ) . toEqual ( undefined ) ;
2176
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . valid ) . toEqual ( true ) ;
2177
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . invalid ) . toEqual ( false ) ;
2178
+ expect ( managerApi ( ) . getFieldState ( 'field' ) . meta . validating ) . toEqual ( false ) ;
2179
+ done ( ) ;
2180
+ } ) ;
2181
+ } ) ;
2182
+ } ) ;
2183
+ } ) ;
2036
2184
} ) ;
2037
2185
2038
2186
describe ( 'invalid submit' , ( ) => {
0 commit comments