diff --git a/modules/@angular/http/src/backends/xhr_backend.ts b/modules/@angular/http/src/backends/xhr_backend.ts index 32706bde062e9..a32df7560404f 100644 --- a/modules/@angular/http/src/backends/xhr_backend.ts +++ b/modules/@angular/http/src/backends/xhr_backend.ts @@ -69,7 +69,8 @@ export class XHRConnection implements Connection { responseOptions = baseResponseOptions.merge(responseOptions); } let response = new Response(responseOptions); - if (isSuccess(status)) { + response.ok = isSuccess(status); + if (response.ok) { responseObserver.next(response); // TODO(gdi2290): defer complete if array buffer until done responseObserver.complete(); diff --git a/modules/@angular/http/test/backends/xhr_backend_spec.ts b/modules/@angular/http/test/backends/xhr_backend_spec.ts index 06ceaed293a6d..3be55764743d5 100644 --- a/modules/@angular/http/test/backends/xhr_backend_spec.ts +++ b/modules/@angular/http/test/backends/xhr_backend_spec.ts @@ -343,6 +343,34 @@ export function main() { existingXHRs[0].dispatchEvent('load'); })); + it('should set ok to true on 200 return', inject([AsyncTestCompleter], async => { + var statusCode = 200; + var connection = new XHRConnection(sampleRequest, new MockBrowserXHR(), + new ResponseOptions({status: statusCode})); + + connection.response.subscribe(res => { + expect(res.ok).toBe(true); + async.done(); + }); + + existingXHRs[0].setStatusCode(statusCode); + existingXHRs[0].dispatchEvent('load'); + })); + + it('should set ok to false on 300 return', inject([AsyncTestCompleter], async => { + var statusCode = 300; + var connection = new XHRConnection(sampleRequest, new MockBrowserXHR(), + new ResponseOptions({status: statusCode})); + + connection.response.subscribe(res => { throw 'should not be called'; }, errRes => { + expect(errRes.ok).toBe(false); + async.done(); + }); + + existingXHRs[0].setStatusCode(statusCode); + existingXHRs[0].dispatchEvent('load'); + })); + it('should call error and not complete on 300+ codes', inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { var nextCalled = false;