aboutsummaryrefslogtreecommitdiffstats
path: root/test/webcals/xhr_test.js
diff options
context:
space:
mode:
authorJames Lal <james@lightsofapollo.com>2012-06-25 16:44:39 +0200
committerJames Lal <james@lightsofapollo.com>2012-06-25 16:44:39 +0200
commit96683161e43fc0101c74f0875d1a2d445afe7e8d (patch)
tree64fca9e7e146a79b433d975de521331b7f21a2ad /test/webcals/xhr_test.js
parent536f0c2b8391b95750de370b0f851d8a83d28598 (diff)
downloadjsCalDAV-96683161e43fc0101c74f0875d1a2d445afe7e8d.tar.gz
test/helper add xhr tests
Diffstat (limited to 'test/webcals/xhr_test.js')
-rw-r--r--test/webcals/xhr_test.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/test/webcals/xhr_test.js b/test/webcals/xhr_test.js
new file mode 100644
index 0000000..2ac2dbb
--- /dev/null
+++ b/test/webcals/xhr_test.js
@@ -0,0 +1,142 @@
+requireLib('xhr');
+requireSupport('fake_xhr');
+
+suite('webacls/xhr', function() {
+ var subject,
+ Xhr,
+ FakeXhr;
+
+
+ suiteSetup(function() {
+ Xhr = Webcals.require('xhr');
+ FakeXhr = Webcals.require('support/fake_xhr');
+ });
+
+ setup(function() {
+ subject = new Xhr({
+ method: 'POST'
+ });
+ });
+
+ suite('initialization', function() {
+
+ test('should set options on instance', function() {
+ assert.equal(subject.method, 'POST');
+ });
+
+ });
+
+ suite('.abort', function() {
+ suite('when there is an xhr object', function() {
+ var aborted;
+
+ setup(function() {
+ aborted = false;
+ subject.xhr = {
+ abort: function() {
+ aborted = true;
+ }
+ };
+ subject.abort();
+ });
+
+ test('should call abort on the xhr object', function() {
+ assert.equal(aborted, true);
+ });
+ });
+
+ suite('when there is no xhr object', function() {
+ test('should not fail', function() {
+ subject.xhr = null;
+ subject.abort();
+ });
+ });
+ });
+
+ suite('.send', function() {
+
+ var data = '<html></html>',
+ url = 'http://foo',
+ xhr,
+ responseData,
+ responseXhr;
+
+ function callback(done, data, xhr) {
+ responseXhr = xhr;
+ responseData = data;
+ done();
+ }
+
+ function request(options) {
+ options.xhrClass = FakeXhr;
+ subject = new Xhr(options);
+ }
+
+ function opensXHR() {
+ test('should create xhr', function() {
+ assert.instanceOf(subject.xhr, FakeXhr);
+ });
+
+ test('should set headers', function() {
+ assert.deepEqual(subject.xhr.headers, subject.headers);
+ });
+
+ test('should parse and send data', function() {
+ assert.deepEqual(subject.xhr.sendArgs[0], data);
+ });
+
+ test('should open xhr', function() {
+ assert.deepEqual(subject.xhr.openArgs, [
+ subject.method,
+ subject.url,
+ subject.async,
+ subject.user,
+ subject.password
+ ]);
+ });
+ }
+
+ setup(function() {
+ responseXhr = null;
+ responseData = null;
+ });
+
+ suite('when xhr is a success and responds /w json', function() {
+ var response = '<html></html>', cb;
+
+ setup(function(done) {
+ var xhr;
+ request({
+ data: data,
+ url: url,
+ method: 'PUT'
+ });
+ cb = callback.bind(this, done);
+ subject.send(cb);
+
+ //should be waiting inbetween requests
+ assert.equal(subject.waiting, true);
+
+ xhr = subject.xhr;
+ xhr.readyState = 4;
+ xhr.responseText = response;
+ xhr.onreadystatechange();
+ });
+
+ test('should not be waiting after response', function() {
+ assert.equal(subject.waiting, false);
+ });
+
+ test('should send callback parsed data and xhr', function() {
+ assert.equal(responseXhr, subject.xhr);
+ assert.deepEqual(responseData, response);
+ });
+
+ opensXHR();
+ });
+
+ });
+
+});
+
+