1
0
Fork 0

DataValidator: Always clear store state

In practice, not clearing the store and allowing it to use previous
state has the effect of instantly "fixing" failures if there happens
to be more than one validation call.

This was a log of debugging for a one-line change.

* src/validate/DataValidator.js (_populateStore): Always clear store.
* test/validate/DataValidatorTest.js: Add test.

DEV-2299
master
Mike Gerwitz 2017-02-13 14:51:04 -05:00
parent e610372c84
commit 3b1df602e1
2 changed files with 41 additions and 1 deletions

View File

@ -193,7 +193,8 @@ module.exports = Class( 'DataValidator',
{
if ( data === undefined )
{
return Promise.resolve( [] );
// it's important that we don't re-use previous state
return store.clear().then( [] );
}
const mapf = ( subkey !== undefined )

View File

@ -212,6 +212,45 @@ describe( 'DataValidator', () =>
.validate( {} )
).to.eventually.be.rejectedWith( expected_e );
} );
[
[],
[ {} ],
[ undefined ],
[ undefined, {} ],
[ undefined, undefined ],
[ {}, undefined ],
].forEach( args => it( 'does not re-use previous store state', () =>
{
const bvalidator = createMockBucketValidator();
const vmonitor = ValidStateMonitor();
const dep_factory = createMockDependencyFactory();
const stores = {
store: MemoryStore(),
bstore: sinon.createStubInstance( MemoryStore ),
cstore: sinon.createStubInstance( MemoryStore ),
};
const { bstore, cstore } = stores;
const cleared = which =>
{
cleared[ which ] = true;
return Promise.resolve();
};
bstore.clear = () => cleared( 'b' );
cstore.clear = () => cleared( 'c' );
const sut = Sut( bvalidator, vmonitor, dep_factory, () => stores );
return sut.validate.apply( sut, args )
.then( () =>
expect( cleared.b && cleared.c ).to.be.true
);
} ) );
} );