PageRenderTime 62ms CodeModel.GetById 35ms RepoModel.GetById 1ms app.codeStats 0ms

/test/sync.js

https://github.com/mtodd/backbone
JavaScript | 121 lines | 102 code | 17 blank | 2 comment | 0 complexity | 23389aef8b109f2ecd9d04319df88d2e MD5 | raw file
  1. $(document).ready(function() {
  2. module("Backbone.sync");
  3. // Variable to catch the last request.
  4. window.lastRequest = null;
  5. // Stub out jQuery.ajax...
  6. $.ajax = function(obj) {
  7. lastRequest = obj;
  8. };
  9. var Library = Backbone.Collection.extend({
  10. url : function() { return '/library'; }
  11. });
  12. var library = new Library();
  13. var attrs = {
  14. title : "The Tempest",
  15. author : "Bill Shakespeare",
  16. length : 123
  17. };
  18. test("sync: read", function() {
  19. Backbone.sync = originalSync;
  20. library.fetch();
  21. equals(lastRequest.url, '/library');
  22. equals(lastRequest.type, 'GET');
  23. equals(lastRequest.dataType, 'json');
  24. ok(_.isEmpty(lastRequest.data));
  25. });
  26. test("sync: create", function() {
  27. library.add(library.create(attrs));
  28. equals(lastRequest.url, '/library');
  29. equals(lastRequest.type, 'POST');
  30. equals(lastRequest.dataType, 'json');
  31. var data = JSON.parse(lastRequest.data);
  32. equals(data.title, 'The Tempest');
  33. equals(data.author, 'Bill Shakespeare');
  34. equals(data.length, 123);
  35. });
  36. test("sync: update", function() {
  37. library.first().save({id: '1-the-tempest', author: 'William Shakespeare'});
  38. equals(lastRequest.url, '/library/1-the-tempest');
  39. equals(lastRequest.type, 'PUT');
  40. equals(lastRequest.dataType, 'json');
  41. var data = JSON.parse(lastRequest.data);
  42. equals(data.id, '1-the-tempest');
  43. equals(data.title, 'The Tempest');
  44. equals(data.author, 'William Shakespeare');
  45. equals(data.length, 123);
  46. });
  47. test("sync: update with emulateHTTP and emulateJSON", function() {
  48. Backbone.emulateHTTP = Backbone.emulateJSON = true;
  49. library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
  50. equals(lastRequest.url, '/library/2-the-tempest');
  51. equals(lastRequest.type, 'POST');
  52. equals(lastRequest.dataType, 'json');
  53. equals(lastRequest.data._method, 'PUT');
  54. var data = JSON.parse(lastRequest.data.model);
  55. equals(data.id, '2-the-tempest');
  56. equals(data.author, 'Tim Shakespeare');
  57. equals(data.length, 123);
  58. Backbone.emulateHTTP = Backbone.emulateJSON = false;
  59. });
  60. test("sync: update with just emulateHTTP", function() {
  61. Backbone.emulateHTTP = true;
  62. library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
  63. equals(lastRequest.url, '/library/2-the-tempest');
  64. equals(lastRequest.type, 'POST');
  65. equals(lastRequest.contentType, 'application/json');
  66. var data = JSON.parse(lastRequest.data);
  67. equals(data.id, '2-the-tempest');
  68. equals(data.author, 'Tim Shakespeare');
  69. equals(data.length, 123);
  70. Backbone.emulateHTTP = false;
  71. });
  72. test("sync: update with just emulateJSON", function() {
  73. Backbone.emulateJSON = true;
  74. library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
  75. equals(lastRequest.url, '/library/2-the-tempest');
  76. equals(lastRequest.type, 'PUT');
  77. equals(lastRequest.contentType, 'application/x-www-form-urlencoded');
  78. var data = JSON.parse(lastRequest.data.model);
  79. equals(data.id, '2-the-tempest');
  80. equals(data.author, 'Tim Shakespeare');
  81. equals(data.length, 123);
  82. Backbone.emulateJSON = false;
  83. });
  84. test("sync: read model", function() {
  85. library.first().fetch();
  86. equals(lastRequest.url, '/library/2-the-tempest');
  87. equals(lastRequest.type, 'GET');
  88. ok(_.isEmpty(lastRequest.data));
  89. });
  90. test("sync: destroy", function() {
  91. library.first().destroy();
  92. equals(lastRequest.url, '/library/2-the-tempest');
  93. equals(lastRequest.type, 'DELETE');
  94. equals(lastRequest.data, null);
  95. });
  96. test("sync: destroy with emulateHTTP", function() {
  97. Backbone.emulateHTTP = Backbone.emulateJSON = true;
  98. library.first().destroy();
  99. equals(lastRequest.url, '/library/2-the-tempest');
  100. equals(lastRequest.type, 'POST');
  101. equals(JSON.stringify(lastRequest.data), '{"_method":"DELETE"}');
  102. Backbone.emulateHTTP = Backbone.emulateJSON = false;
  103. });
  104. });