From a5b0d5dc226e6d5db9282256c3d3a174ea7a1436 Mon Sep 17 00:00:00 2001 From: Utsav Shah Date: Fri, 15 Jan 2016 05:49:24 -0500 Subject: [PATCH] fix(http): Set response.ok The ok property was not being set on response objects. It's now set based on the status code. Closes #6390 --- .../angular2/src/http/backends/xhr_backend.ts | 3 +- .../test/http/backends/xhr_backend_spec.ts | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/modules/angular2/src/http/backends/xhr_backend.ts b/modules/angular2/src/http/backends/xhr_backend.ts index 98ae79620353..d739b096b033 100644 --- a/modules/angular2/src/http/backends/xhr_backend.ts +++ b/modules/angular2/src/http/backends/xhr_backend.ts @@ -55,7 +55,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/angular2/test/http/backends/xhr_backend_spec.ts b/modules/angular2/test/http/backends/xhr_backend_spec.ts index bc7c6818003b..3a5127d37c6c 100644 --- a/modules/angular2/test/http/backends/xhr_backend_spec.ts +++ b/modules/angular2/test/http/backends/xhr_backend_spec.ts @@ -210,6 +210,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 => { var nextCalled = false; var errorCalled = false; @@ -226,6 +254,7 @@ export function main() { existingXHRs[0].setStatusCode(statusCode); existingXHRs[0].dispatchEvent('load'); })); + it('should normalize IE\'s 1223 status code into 204', inject([AsyncTestCompleter], async => { var statusCode = 1223; var normalizedCode = 204;