PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/www/protected/extensions/admin/assets/js/libs/backbone/0.5.3-optamd3/test/sync.js

https://bitbucket.org/badenkov/demo
JavaScript | 133 lines | 117 code | 16 blank | 0 comment | 0 complexity | b65aedd65e3164f7e8489f376a77c1f4 MD5 | raw file
Possible License(s): Apache-2.0, MIT, LGPL-2.1, BSD-2-Clause, CC-BY-SA-3.0, BSD-3-Clause
  1. $(document).ready(function() {
  2. module("Backbone.sync", {setup : function() {
  3. window.lastRequest = null;
  4. $.ajax = function(obj) {
  5. lastRequest = obj;
  6. };
  7. }});
  8. var Library = Backbone.Collection.extend({
  9. url : function() { return '/library'; }
  10. });
  11. var library = new Library();
  12. var attrs = {
  13. title : "The Tempest",
  14. author : "Bill Shakespeare",
  15. length : 123
  16. };
  17. test("sync: read", function() {
  18. Backbone.sync = originalSync;
  19. library.fetch();
  20. equals(lastRequest.url, '/library');
  21. equals(lastRequest.type, 'GET');
  22. equals(lastRequest.dataType, 'json');
  23. ok(_.isEmpty(lastRequest.data));
  24. });
  25. test("sync: passing data", function() {
  26. library.fetch({data: {a: 'a', one: 1}});
  27. equals(lastRequest.url, '/library');
  28. equals(lastRequest.data.a, 'a');
  29. equals(lastRequest.data.one, 1);
  30. });
  31. test("sync: create", function() {
  32. library.add(library.create(attrs));
  33. equals(lastRequest.url, '/library');
  34. equals(lastRequest.type, 'POST');
  35. equals(lastRequest.dataType, 'json');
  36. var data = JSON.parse(lastRequest.data);
  37. equals(data.title, 'The Tempest');
  38. equals(data.author, 'Bill Shakespeare');
  39. equals(data.length, 123);
  40. });
  41. test("sync: update", function() {
  42. library.first().save({id: '1-the-tempest', author: 'William Shakespeare'});
  43. equals(lastRequest.url, '/library/1-the-tempest');
  44. equals(lastRequest.type, 'PUT');
  45. equals(lastRequest.dataType, 'json');
  46. var data = JSON.parse(lastRequest.data);
  47. equals(data.id, '1-the-tempest');
  48. equals(data.title, 'The Tempest');
  49. equals(data.author, 'William Shakespeare');
  50. equals(data.length, 123);
  51. });
  52. test("sync: update with emulateHTTP and emulateJSON", function() {
  53. Backbone.emulateHTTP = Backbone.emulateJSON = true;
  54. library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
  55. equals(lastRequest.url, '/library/2-the-tempest');
  56. equals(lastRequest.type, 'POST');
  57. equals(lastRequest.dataType, 'json');
  58. equals(lastRequest.data._method, 'PUT');
  59. var data = JSON.parse(lastRequest.data.model);
  60. equals(data.id, '2-the-tempest');
  61. equals(data.author, 'Tim Shakespeare');
  62. equals(data.length, 123);
  63. Backbone.emulateHTTP = Backbone.emulateJSON = false;
  64. });
  65. test("sync: update with just emulateHTTP", function() {
  66. Backbone.emulateHTTP = true;
  67. library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
  68. equals(lastRequest.url, '/library/2-the-tempest');
  69. equals(lastRequest.type, 'POST');
  70. equals(lastRequest.contentType, 'application/json');
  71. var data = JSON.parse(lastRequest.data);
  72. equals(data.id, '2-the-tempest');
  73. equals(data.author, 'Tim Shakespeare');
  74. equals(data.length, 123);
  75. Backbone.emulateHTTP = false;
  76. });
  77. test("sync: update with just emulateJSON", function() {
  78. Backbone.emulateJSON = true;
  79. library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
  80. equals(lastRequest.url, '/library/2-the-tempest');
  81. equals(lastRequest.type, 'PUT');
  82. equals(lastRequest.contentType, 'application/x-www-form-urlencoded');
  83. var data = JSON.parse(lastRequest.data.model);
  84. equals(data.id, '2-the-tempest');
  85. equals(data.author, 'Tim Shakespeare');
  86. equals(data.length, 123);
  87. Backbone.emulateJSON = false;
  88. });
  89. test("sync: read model", function() {
  90. library.first().fetch();
  91. equals(lastRequest.url, '/library/2-the-tempest');
  92. equals(lastRequest.type, 'GET');
  93. ok(_.isEmpty(lastRequest.data));
  94. });
  95. test("sync: destroy", function() {
  96. library.first().destroy();
  97. equals(lastRequest.url, '/library/2-the-tempest');
  98. equals(lastRequest.type, 'DELETE');
  99. equals(lastRequest.data, null);
  100. });
  101. test("sync: destroy with emulateHTTP", function() {
  102. Backbone.emulateHTTP = Backbone.emulateJSON = true;
  103. library.first().destroy();
  104. equals(lastRequest.url, '/library/2-the-tempest');
  105. equals(lastRequest.type, 'POST');
  106. equals(JSON.stringify(lastRequest.data), '{"_method":"DELETE"}');
  107. Backbone.emulateHTTP = Backbone.emulateJSON = false;
  108. });
  109. test("sync: urlError", function() {
  110. model = new Backbone.Model();
  111. raises(function() {
  112. model.fetch();
  113. });
  114. model.fetch({url: '/one/two'});
  115. equals(lastRequest.url, '/one/two');
  116. });
  117. });