rpc-service-test.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import Ember from 'ember';
  2. import DS from 'ember-data';
  3. import { module, test } from 'qunit';
  4. import startApp from '../helpers/start-app';
  5. var application, container, service;
  6. module('Acceptance: RPC Service', {
  7. beforeEach: function() {
  8. application = startApp();
  9. container = application.__container__;
  10. service = container.lookup('service:rpc');
  11. },
  12. afterEach: function() {
  13. Ember.run(application, 'destroy');
  14. Ember.$.mockjax.clear();
  15. }
  16. });
  17. test('unpluralizeUrlProcedure fixes urls', function(assert) {
  18. assert.expect(3);
  19. var url = service.unpluralizeUrlProcedure('/some-words/', 'some-word');
  20. assert.equal(url, '/some-word/');
  21. url = service.unpluralizeUrlProcedure('/some-words/', 'someWord');
  22. assert.equal(url, '/some-word/');
  23. url = service.unpluralizeUrlProcedure('/model/some-words/', 'some-word');
  24. assert.equal(url, '/model/some-word/');
  25. });
  26. test('buildProcedureURL builds valid url', function(assert) {
  27. assert.expect(4);
  28. var adapter = container.lookup('adapter:application');
  29. var url = service.buildProcedureURL(adapter, 'close');
  30. assert.equal(url, '/api/close/');
  31. url = service.buildProcedureURL(adapter, 'close-thread');
  32. assert.equal(url, '/api/close-thread/');
  33. url = service.buildProcedureURL(adapter, 'closeThread');
  34. assert.equal(url, '/api/close-thread/');
  35. url = service.buildProcedureURL(adapter, 'thread/1/close');
  36. assert.equal(url, '/api/thread/1/close/');
  37. });
  38. test('successful RPC', function(assert) {
  39. assert.expect(2);
  40. var done = assert.async();
  41. Ember.$.mockjax({
  42. url: '/api/some-rpc/',
  43. status: 200,
  44. responseText: {
  45. 'detail': 'it works'
  46. }
  47. });
  48. service.ajax('some-rpc').then(function(data) {
  49. assert.equal(data.detail, 'it works');
  50. }, function() {
  51. assert.fail('rpc call should pass');
  52. }).finally(function() {
  53. assert.ok(true, 'finally() was called');
  54. done();
  55. });
  56. });
  57. test('failed RPC', function(assert) {
  58. assert.expect(2);
  59. var done = assert.async();
  60. Ember.$.mockjax({
  61. url: '/api/some-rpc/',
  62. status: 400,
  63. responseText: {
  64. 'detail': 'it fails'
  65. }
  66. });
  67. service.ajax('some-rpc').then(function() {
  68. assert.fail('rpc call should fail');
  69. }, function(jqXHR) {
  70. var rejection = jqXHR.responseJSON;
  71. assert.equal(rejection.detail, 'it fails');
  72. }).finally(function() {
  73. assert.ok(true, 'finally() was called');
  74. done();
  75. });
  76. });
  77. test('successful model RPC', function(assert) {
  78. assert.expect(2);
  79. var done = assert.async();
  80. Ember.$.mockjax({
  81. url: '/api/legal-pages/privacy-policy/',
  82. status: 200,
  83. responseText: {
  84. 'id': 'privacy-policy',
  85. 'title': '',
  86. 'link': '',
  87. 'body': ''
  88. }
  89. });
  90. Ember.$.mockjax({
  91. url: '/api/legal-pages/privacy-policy/some-rpc/',
  92. status: 200,
  93. responseText: {
  94. 'detail': 'it works'
  95. }
  96. });
  97. Ember.run(function() {
  98. var store = container.lookup('store:main');
  99. store.find('legal-page', 'privacy-policy').then(function(record) {
  100. service.ajax(record, 'some-rpc').then(function(data) {
  101. assert.equal(data.detail, 'it works');
  102. }, function() {
  103. assert.fail('rpc call should pass');
  104. }).finally(function() {
  105. assert.ok(true, 'finally() was called');
  106. done();
  107. });
  108. });
  109. });
  110. });
  111. test('failed model RPC', function(assert) {
  112. assert.expect(2);
  113. var done = assert.async();
  114. Ember.$.mockjax({
  115. url: '/api/legal-pages/privacy-policy/',
  116. status: 200,
  117. responseText: {
  118. 'id': 'privacy-policy',
  119. 'title': '',
  120. 'link': '',
  121. 'body': ''
  122. }
  123. });
  124. Ember.$.mockjax({
  125. url: '/api/legal-pages/privacy-policy/some-rpc/',
  126. status: 400,
  127. responseText: {
  128. 'detail': 'it failed'
  129. }
  130. });
  131. Ember.run(function() {
  132. var store = container.lookup('store:main');
  133. store.find('legal-page', 'privacy-policy').then(function(record) {
  134. service.ajax(record, 'some-rpc').then(function() {
  135. assert.fail('rpc call should fail');
  136. }, function(jqXHR) {
  137. var rejection = jqXHR.responseJSON;
  138. assert.equal(rejection.detail, 'it failed');
  139. }).finally(function() {
  140. assert.ok(true, 'finally() was called');
  141. done();
  142. });
  143. });
  144. });
  145. });