1
0
Fork 0

ValidStateMonitor: merge subsequent failures before fixes

* src/validate/ValidStateMonitor.js (mergeFailures):
Another error on a field that previously failed will no longer overwrite the
previous failure, which caused issue when the causes changed (leaving fields
potentially unfixed).

* test/validate/ValidStateMonitorTest.js: Respective tests added.
master
Mike Gerwitz 2016-04-28 11:53:14 -04:00
parent e406c198d2
commit e6ede4ad3a
2 changed files with 53 additions and 1 deletions

View File

@ -146,10 +146,18 @@ module.exports = Class( 'ValidStateMonitor' )
{
past[ name ] = past[ name ] || [];
var cur_past = past[ name ];
// copy each failure into the past failures table
for ( var i in failures[ name ] )
{
past[ name ][ i ] = failures[ name ][ i ];
var new_failure = failures[ name ][ i ];
// merge with past failure if present
cur_past[ i ] = ( cur_past[ i ] !== undefined )
? cur_past[ i ].merge( new_failure )
: new_failure;
count_new++;
}
}

View File

@ -147,6 +147,50 @@ describe( 'ValidStateMonitor', function()
.on( 'fix', nocall( 'fix' ) )
.update( {}, { foo: fail } );
} );
it( 'does not discard existing failures', function( done )
{
var sut = Sut();
// has both failures
var fail1 = Failure(
Field( 'foo', 0 ),
'',
[ Field( 'cause1', 0 ), Field( 'cause2', 0 ) ]
);
// has only one of the two failures
var fail2 = Failure(
Field( 'foo', 1 ),
'',
[ Field( 'cause2', 1 ) ]
);
// the second failure has fewer causes than the first;
// we need to make sure that it doesn't overwrite,
// leading to fewer caues
sut
.update( {}, { foo: [ fail1 ] } )
.update( {}, { foo: [ fail2 ] } );
// if cause1 wasn't removed, then this will fix it
sut
.once( 'fix', function( fixed )
{
expect( fixed )
.to.deep.equal( { foo: [ 'causefix1' ] } );
// and then we should have no failures
expect( sut.hasFailures() ).to.be.false;
done();
} )
.update(
{ foo: [ 'moo' ], cause1: [ 'causefix1' ] },
{}
);
} );
} );