@@ -203,28 +203,6 @@ it('does not validate if the field has not been changed', async () => {
203203 expect ( requestMade ) . toBe ( false )
204204} )
205205
206- it ( 'is valid after field has changed and successful validation has triggered' , async ( ) => {
207- let requestMade = false
208- let promise = Promise . resolve ( null )
209- axios . request . mockImplementation ( ( ) => {
210- requestMade = true
211- return promise = Promise . resolve ( {
212- status : 201 ,
213- headers : { precognition : 'true' } ,
214- data : { } ,
215- } )
216- } )
217- const validator = createValidator ( ( client ) => client . post ( '/foo' , { } ) , {
218- name : 'Tim' ,
219- } )
220-
221- validator . validate ( 'name' , 'Taylor' )
222- await promise
223-
224- expect ( requestMade ) . toBe ( true )
225- expect ( validator . valid ( ) ) . toEqual ( [ 'name' ] )
226- } )
227-
228206it ( 'filters out files' , ( ) => {
229207 let config
230208 axios . request . mockImplementationOnce ( ( c ) => {
@@ -289,3 +267,111 @@ it('filters out files', () => {
289267 }
290268 } )
291269} )
270+
271+ it ( 'doesnt mark fields as validated while response is pending' , async ( ) => {
272+ expect . assertions ( 10 )
273+
274+ let resolver = null
275+ let promise = null
276+ let onValidatedChangedCalledTimes = 0
277+ axios . request . mockImplementation ( ( ) => {
278+ promise = new Promise ( resolve => {
279+ resolver = resolve
280+ } )
281+
282+ return promise
283+ } )
284+ let data = { }
285+ const validator = createValidator ( ( client ) => client . post ( '/foo' , data ) )
286+ validator . on ( 'validatedChanged' , ( ) => onValidatedChangedCalledTimes ++ )
287+
288+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
289+ expect ( onValidatedChangedCalledTimes ) . toEqual ( 0 )
290+
291+ data = { app : 'Laravel' }
292+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
293+
294+ validator . validate ( 'app' , 'Laravel' )
295+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
296+
297+ resolver ( { headers : { precognition : 'true' } , status : 204 } )
298+ await vi . runAllTimersAsync ( )
299+ expect ( validator . valid ( ) ) . toEqual ( [ 'app' ] )
300+ expect ( onValidatedChangedCalledTimes ) . toEqual ( 1 )
301+
302+ data = { app : 'Laravel' , version : '10' }
303+ expect ( validator . valid ( ) ) . toEqual ( [ 'app' ] )
304+
305+ validator . validate ( 'version' , '10' )
306+ expect ( validator . valid ( ) ) . toEqual ( [ 'app' ] )
307+
308+ axios . isAxiosError . mockReturnValueOnce ( true )
309+ resolver ( { headers : { precognition : 'true' } , status : 422 , data : { errors : { } } } )
310+ await vi . runAllTimersAsync ( )
311+ expect ( validator . valid ( ) ) . toEqual ( [ 'app' , 'version' ] )
312+ expect ( onValidatedChangedCalledTimes ) . toEqual ( 2 )
313+ } )
314+
315+ it ( 'doesnt mark fields as validated on error status' , async ( ) => {
316+ expect . assertions ( 6 )
317+
318+ let resolver = null
319+ let promise = null
320+ let onValidatedChangedCalledTimes = 0
321+ axios . request . mockImplementation ( ( ) => {
322+ promise = new Promise ( resolve => {
323+ resolver = resolve
324+ } )
325+
326+ return promise
327+ } )
328+ let data = { }
329+ const validator = createValidator ( ( client ) => client . post ( '/foo' , data ) )
330+ validator . on ( 'validatedChanged' , ( ) => onValidatedChangedCalledTimes ++ )
331+
332+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
333+ expect ( onValidatedChangedCalledTimes ) . toEqual ( 0 )
334+
335+ data = { app : 'Laravel' }
336+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
337+
338+ validator . validate ( 'app' , 'Laravel' )
339+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
340+
341+ resolver ( { headers : { precognition : 'true' } , status : 401 } )
342+ await vi . runAllTimersAsync ( )
343+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
344+ expect ( onValidatedChangedCalledTimes ) . toEqual ( 0 )
345+ } )
346+
347+ it ( 'does mark fields as validated on success status' , async ( ) => {
348+ expect . assertions ( 6 )
349+
350+ let resolver = null
351+ let promise = null
352+ let onValidatedChangedCalledTimes = 0
353+ axios . request . mockImplementation ( ( ) => {
354+ promise = new Promise ( resolve => {
355+ resolver = resolve
356+ } )
357+
358+ return promise
359+ } )
360+ let data = { }
361+ const validator = createValidator ( ( client ) => client . post ( '/foo' , data ) )
362+ validator . on ( 'validatedChanged' , ( ) => onValidatedChangedCalledTimes ++ )
363+
364+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
365+ expect ( onValidatedChangedCalledTimes ) . toEqual ( 0 )
366+
367+ data = { app : 'Laravel' }
368+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
369+
370+ validator . validate ( 'app' , 'Laravel' )
371+ expect ( validator . valid ( ) ) . toEqual ( [ ] )
372+
373+ resolver ( { headers : { precognition : 'true' } , status : 200 } )
374+ await vi . runAllTimersAsync ( )
375+ expect ( validator . valid ( ) ) . toEqual ( [ 'app' ] )
376+ expect ( onValidatedChangedCalledTimes ) . toEqual ( 1 )
377+ } )
0 commit comments