1
0
Fork 0

Add Failure#merge

* src/validate/Failure.js (merge): Added
* test/validate/FailureTest.js: Respective tests added
master
Mike Gerwitz 2016-04-28 11:31:42 -04:00
parent 895441850e
commit e406c198d2
2 changed files with 61 additions and 0 deletions

View File

@ -150,5 +150,26 @@ module.exports = Class( 'Failure',
__toString: function()
{
return this._reason;
},
/**
* Produce a new Failure merging two failures' messages and causes
*/
'public merge': function( failure )
{
if ( !Class.isA( module.exports, failure ) )
{
throw TypeError( 'Cannot merge with non-Failure ' + failure );
}
var all_reasons = this._reason + '; ' + failure.getReason(),
all_causes = this._causes.concat( failure.getCauses() );
return new this.constructor(
this._field,
all_reasons,
all_causes
);
}
} );

View File

@ -131,4 +131,44 @@ describe( 'Failure', function()
.to.equal( reason );
} );
} );
describe( '#merge', function()
{
it( 'rejects non-Failure merges', function()
{
expect( function()
{
Sut( DummyField() ).merge( {} );
} ).to.throw( TypeError );
} );
it( 'merges causes', function()
{
var cause1 = DummyField(),
cause2 = DummyField(),
cause3 = DummyField();
var result = Sut( DummyField(), '', [ cause1 ] )
.merge( Sut( DummyField(), '', [ cause2, cause3 ] ) );
expect( result.getCauses() )
.to.deep.equal( [ cause1, cause2, cause3 ] );
} );
it( 'merges reasons', function()
{
var msg1 = 'message 1',
msg2 = 'message 2';
var result = Sut( DummyField(), msg1 )
.merge( Sut( DummyField(), msg2 ) )
.getReason();
expect( result ).to.contain( msg1 );
expect( result ).to.contain( msg2 );
} );
} );
} );