diff --git a/src/dapi/http/XhrHttpImpl.js b/src/dapi/http/XhrHttpImpl.js index 3ecfb57..04ac100 100644 --- a/src/dapi/http/XhrHttpImpl.js +++ b/src/dapi/http/XhrHttpImpl.js @@ -151,13 +151,16 @@ module.exports = Class( 'XhrHttpImpl' ) * Determine whether the given HTTP status indicates a success or * failure * + * The default implementation is to consider any 2xx status code to be + * successful, as indicated by RFC 2616. + * * @param {number} status HTTP response status * * @return {bool} whether HTTP status represents a success */ 'virtual protected isSuccessful': function( status ) { - return +status === 200; + return ( +status >= 200 ) && ( +status < 300 ); } } ); diff --git a/test/dapi/http/XhrHttpImplTest.js b/test/dapi/http/XhrHttpImplTest.js index 05daa6a..1256f1c 100644 --- a/test/dapi/http/XhrHttpImplTest.js +++ b/test/dapi/http/XhrHttpImplTest.js @@ -181,6 +181,22 @@ describe( 'XhrHttpImpl', function() } ); + it( 'considers any 2xx status to be successful', function( done ) + { + var StubXhr = createStubXhr(); + StubXhr.prototype.status = 250; + + Sut( StubXhr ) + .requestData( 'http://foo', 'GET', '', function( err, _ ) + { + expect( err ).to.equal( null ); + done(); + } ); + + StubXhr.inst.send( '' ); + } ); + + it( 'allows overriding notion of success/failure', function( done ) { var chk = 12345;