/test/sync.js
JavaScript | 127 lines | 108 code | 17 blank | 2 comment | 0 complexity | c33e3e017a5c384db747627fce5e405d MD5 | raw file
- $(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: passing data", function() {
- library.fetch({data: {a: 'a', one: 1}});
- equals(lastRequest.url, '/library');
- equals(lastRequest.data.a, 'a');
- equals(lastRequest.data.one, 1);
- });
- 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;
- });
- });