<!doctype html> <!-- Copyright (c) 2015 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --> <html> <head> <title>iron-request</title> <script src="../../webcomponentsjs/webcomponents.js"></script> <script src="../../web-component-tester/browser.js"></script> <script src="../../test-fixture/test-fixture-mocha.js"></script> <link rel="import" href="../../polymer/polymer.html"> <link rel="import" href="../../test-fixture/test-fixture.html"> <link rel="import" href="../iron-request.html"> </head> <body> <test-fixture id="TrivialRequest"> <template> <iron-request></iron-request> </template> </test-fixture> <script> suite('<iron-request>', function () { var jsonResponseHeaders; var successfulRequestOptions; var request; var server; setup(function () { jsonResponseHeaders = { 'Content-Type': 'application/json' }; server = sinon.fakeServer.create(); server.respondWith('GET', '/responds_to_get_with_json', [ 200, jsonResponseHeaders, '{"success":true}' ]); server.respondWith('GET', '/responds_to_get_with_500', [ 500, {}, '' ]); server.respondWith('GET', '/responds_to_get_with_100', [ 100, {}, '' ]); server.respondWith('GET', '/responds_to_get_with_0', [ 0, jsonResponseHeaders, '{"success":true}' ]); request = fixture('TrivialRequest'); successfulRequestOptions = { url: '/responds_to_get_with_json' }; }); teardown(function () { server.restore(); }); suite('basic usage', function () { test('creates network requests, requiring only `url`', function () { request.send(successfulRequestOptions); server.respond(); expect(request.response).to.be.ok; }); test('sets async to true by default', function () { request.send(successfulRequestOptions); expect(request.xhr.async).to.be.eql(true); }); test('can be aborted', function () { request.send(successfulRequestOptions); request.abort(); server.respond(); return request.completes.then(function () { throw new Error('Request did not abort appropriately!'); }).catch(function (e) { expect(request.response).to.not.be.ok; }); }); test('default responseType is text', function () { request.send(successfulRequestOptions); server.respond(); return request.completes.then(function() { expect(request.response).to.be.an('string') }); }); test('default responseType of text is not applied, when async is false', function () { var options = Object.create(successfulRequestOptions); options.async = false; request.send(options); server.respond(); return request.completes.then(function() { expect(request.xhr.responseType).to.be.empty; }); }); test('responseType can be configured via handleAs option', function () { var options = Object.create(successfulRequestOptions); options.handleAs = 'json'; request.send(options); expect(server.requests.length).to.be.equal(1); expect(server.requests[0].requestHeaders['accept']).to.be.equal( 'application/json'); server.respond(); return request.completes.then(function() { expect(request.response).to.be.an('object'); }); }); test('responseType cannot be configured via handleAs option, when async is false', function () { var options = Object.create(successfulRequestOptions); options.handleAs = 'json'; options.async = false; request.send(options); expect(server.requests.length).to.be.equal(1); expect(server.requests[0].requestHeaders['accept']).to.be.equal( 'application/json'); server.respond(); return request.completes.then(function() { expect(request.response).to.be.a('string'); }); }); }); suite('special cases', function() { test('treats status code 0 as success, though the outcome is ambiguous', function() { // Note: file:// status code will probably be 0 no matter what happened. request.send({ url: '/responds_to_get_with_0' }); server.respond(); expect(request.succeeded).to.be.equal(true); }); }); suite('errors', function() { test('treats status codes between 1 and 199 as errors', function() { request.send({ url: '/responds_to_get_with_100' }); server.respond(); expect(request.succeeded).to.be.equal(false); }); test('treats status codes between 300 and ∞ as errors', function() { request.send({ url: '/responds_to_get_with_500' }); server.respond(); expect(request.succeeded).to.be.equal(false); }); }); suite('status codes', function() { test('status and statusText is set after a ambiguous request', function() { request.send({ url: '/responds_to_get_with_0' }); server.respond(); expect(request.status).to.be.equal(0); expect(request.statusText).to.be.equal(''); }); test('status and statusText is set after a request that succeeded', function() { request.send({ url: '/responds_to_get_with_json' }); server.respond(); expect(request.status).to.be.equal(200); expect(request.statusText).to.be.equal('OK'); }); test('status and statusText is set after a request that failed', function() { request.send({ url: '/responds_to_get_with_500' }); server.respond(); expect(request.status).to.be.equal(500); expect(request.statusText).to.be.equal('Internal Server Error'); }); }); }); </script> </body> </html>