Files
backbone/test/sync.js
2010-11-08 15:42:09 -05:00

122 lines
3.9 KiB
JavaScript

$(document).ready(function() {
module("Backbone.sync");
// Variable to catch the last request.
window.lastRequest = null;
// Stub out jQuery.ajax...
$.ajax = function(obj) {
lastRequest = obj;
};
var Library = Backbone.Collection.extend({
url : function() { return '/library'; }
});
var library = new Library();
var attrs = {
title : "The Tempest",
author : "Bill Shakespeare",
length : 123
};
test("sync: read", function() {
Backbone.sync = originalSync;
library.fetch();
equals(lastRequest.url, '/library');
equals(lastRequest.type, 'GET');
equals(lastRequest.dataType, 'json');
ok(_.isEmpty(lastRequest.data));
});
test("sync: create", function() {
library.add(library.create(attrs));
equals(lastRequest.url, '/library');
equals(lastRequest.type, 'POST');
equals(lastRequest.dataType, 'json');
var data = JSON.parse(lastRequest.data);
equals(data.title, 'The Tempest');
equals(data.author, 'Bill Shakespeare');
equals(data.length, 123);
});
test("sync: update", function() {
library.first().save({id: '1-the-tempest', author: 'William Shakespeare'});
equals(lastRequest.url, '/library/1-the-tempest');
equals(lastRequest.type, 'PUT');
equals(lastRequest.dataType, 'json');
var data = JSON.parse(lastRequest.data);
equals(data.id, '1-the-tempest');
equals(data.title, 'The Tempest');
equals(data.author, 'William Shakespeare');
equals(data.length, 123);
});
test("sync: update with emulateHTTP and emulateJSON", function() {
Backbone.emulateHTTP = Backbone.emulateJSON = true;
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
equals(lastRequest.url, '/library/2-the-tempest');
equals(lastRequest.type, 'POST');
equals(lastRequest.dataType, 'json');
equals(lastRequest.data._method, 'PUT');
var data = JSON.parse(lastRequest.data.model);
equals(data.id, '2-the-tempest');
equals(data.author, 'Tim Shakespeare');
equals(data.length, 123);
Backbone.emulateHTTP = Backbone.emulateJSON = false;
});
test("sync: update with just emulateHTTP", function() {
Backbone.emulateHTTP = true;
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
equals(lastRequest.url, '/library/2-the-tempest');
equals(lastRequest.type, 'POST');
equals(lastRequest.contentType, 'application/json');
var data = JSON.parse(lastRequest.data);
equals(data.id, '2-the-tempest');
equals(data.author, 'Tim Shakespeare');
equals(data.length, 123);
Backbone.emulateHTTP = false;
});
test("sync: update with just emulateJSON", function() {
Backbone.emulateJSON = true;
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
equals(lastRequest.url, '/library/2-the-tempest');
equals(lastRequest.type, 'PUT');
equals(lastRequest.contentType, 'application/x-www-form-urlencoded');
var data = JSON.parse(lastRequest.data.model);
equals(data.id, '2-the-tempest');
equals(data.author, 'Tim Shakespeare');
equals(data.length, 123);
Backbone.emulateJSON = false;
});
test("sync: read model", function() {
library.first().fetch();
equals(lastRequest.url, '/library/2-the-tempest');
equals(lastRequest.type, 'GET');
ok(_.isEmpty(lastRequest.data));
});
test("sync: destroy", function() {
library.first().destroy();
equals(lastRequest.url, '/library/2-the-tempest');
equals(lastRequest.type, 'DELETE');
equals(lastRequest.data, null);
});
test("sync: destroy with emulateHTTP", function() {
Backbone.emulateHTTP = Backbone.emulateJSON = true;
library.first().destroy();
equals(lastRequest.url, '/library/2-the-tempest');
equals(lastRequest.type, 'POST');
equals(JSON.stringify(lastRequest.data), '{"_method":"DELETE"}');
Backbone.emulateHTTP = Backbone.emulateJSON = false;
});
});