ajax.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. (function () {
  2. 'use strict';
  3. QUnit.module("Ajax", {
  4. afterEach: function() {
  5. $.mockjax.clear();
  6. }
  7. });
  8. QUnit.test("service factory", function(assert) {
  9. var container = {
  10. context: {
  11. CSRF_COOKIE_NAME: 'doesnt-matter'
  12. }
  13. };
  14. var service = getMisagoService('ajax');
  15. var ajax = service(container);
  16. assert.ok(ajax,
  17. "service factory has returned service instance.");
  18. });
  19. QUnit.test("ajax success", function(assert) {
  20. $.mockjax({
  21. url: '/working-url/',
  22. status: 200,
  23. responseText: {
  24. 'detail': 'ok'
  25. }
  26. });
  27. var container = {
  28. context: {
  29. CSRF_COOKIE_NAME: 'doesnt-matter'
  30. }
  31. };
  32. var service = getMisagoService('ajax');
  33. var ajax = service(container);
  34. var done = assert.async();
  35. ajax.ajax('GET', '/working-url/').then(function(data) {
  36. assert.equal(data.detail, 'ok', 'ajax succeeded on /working-url/');
  37. done();
  38. });
  39. });
  40. QUnit.test("ajax fail", function(assert) {
  41. $.mockjax({
  42. url: '/failing-url/',
  43. status: 400,
  44. responseText: {
  45. 'detail': 'fail'
  46. }
  47. });
  48. var container = {
  49. context: {
  50. CSRF_COOKIE_NAME: 'doesnt-matter'
  51. }
  52. };
  53. var service = getMisagoService('ajax');
  54. var ajax = service(container);
  55. var done = assert.async();
  56. ajax.ajax('GET', '/failing-url/').then(function() {
  57. assert.ok(false, 'ajax succeeded on /failing-url/');
  58. }, function(rejection) {
  59. assert.equal(rejection.detail, 'fail',
  60. 'ajax handled error from /failing-url/');
  61. done();
  62. });
  63. });
  64. QUnit.test("get", function(assert) {
  65. $.mockjax({
  66. url: '/test-url/',
  67. status: 200,
  68. responseText: {
  69. 'detail': 'backend'
  70. }
  71. });
  72. var container = {
  73. context: {
  74. CSRF_COOKIE_NAME: 'doesnt-matter'
  75. }
  76. };
  77. var service = getMisagoService('ajax');
  78. var ajax = service(container);
  79. var done = assert.async();
  80. ajax.get('/test-url/').then(function(data) {
  81. assert.equal(data.detail, 'backend', 'get() read backend data');
  82. done();
  83. });
  84. });
  85. QUnit.test("post, patch, put, delete", function(assert) {
  86. $.mockjax({
  87. type: 'POST',
  88. url: '/test-url/',
  89. status: 200,
  90. responseText: {
  91. 'detail': 'posted'
  92. }
  93. });
  94. $.mockjax({
  95. type: 'PATCH',
  96. url: '/test-url/',
  97. status: 200,
  98. responseText: {
  99. 'detail': 'patched'
  100. }
  101. });
  102. $.mockjax({
  103. type: 'PUT',
  104. url: '/test-url/',
  105. status: 200,
  106. responseText: {
  107. 'detail': 'put'
  108. }
  109. });
  110. $.mockjax({
  111. type: 'DELETE',
  112. url: '/test-url/',
  113. status: 200,
  114. responseText: {
  115. 'detail': 'deleted'
  116. }
  117. });
  118. var container = {
  119. context: {
  120. CSRF_COOKIE_NAME: 'doesnt-matter',
  121. '/test-url/': {
  122. 'detail': 'preloaded'
  123. }
  124. }
  125. };
  126. var service = getMisagoService('ajax');
  127. var ajax = service(container);
  128. var donePost = assert.async();
  129. var donePatch = assert.async();
  130. var donePut = assert.async();
  131. var doneDelete = assert.async();
  132. ajax.post('/test-url/', {}).then(function(data) {
  133. assert.equal(data.detail, 'posted', 'post() call succeeded');
  134. donePost();
  135. });
  136. ajax.patch('/test-url/', {}).then(function(data) {
  137. assert.equal(data.detail, 'patched', 'patch() call succeeded');
  138. donePatch();
  139. });
  140. ajax.put('/test-url/', {}).then(function(data) {
  141. assert.equal(data.detail, 'put', 'put() call succeeded');
  142. donePut();
  143. });
  144. ajax.delete('/test-url/').then(function(data) {
  145. assert.equal(data.detail, 'deleted', 'delete() call succeeded');
  146. doneDelete();
  147. });
  148. });
  149. QUnit.test("alert", function(assert) {
  150. var unknownError = assert.async();
  151. var disconnectedError = assert.async();
  152. var deniedError = assert.async();
  153. var notFoundError = assert.async();
  154. var container = {
  155. context: {
  156. CSRF_COOKIE_NAME: 'doesnt-matter'
  157. },
  158. setup: {
  159. api: '/test-api/'
  160. },
  161. alert: {
  162. error: function(message) {
  163. if (message === "Unknown error has occured.") {
  164. assert.ok(true, "unknown error was handled.");
  165. unknownError();
  166. }
  167. if (message === "Lost connection with application.") {
  168. assert.ok(true, "error 0 was handled.");
  169. disconnectedError();
  170. }
  171. if (message === "You don't have permission to perform this action.") {
  172. assert.ok(true, "error 403 was handled.");
  173. deniedError();
  174. }
  175. if (message === "Action link is invalid.") {
  176. assert.ok(true, "error 404 was handled.");
  177. notFoundError();
  178. }
  179. }
  180. }
  181. };
  182. var service = getMisagoService('ajax');
  183. var ajax = service(container);
  184. ajax.alert({
  185. status: 500
  186. });
  187. ajax.alert({
  188. status: 0
  189. });
  190. ajax.alert({
  191. status: 403,
  192. detail: "Permission denied"
  193. });
  194. ajax.alert({
  195. status: 404,
  196. detail: "Not found"
  197. });
  198. });
  199. }());