/test/api.test.js

https://github.com/nanek/mstranslator · JavaScript · 208 lines · 173 code · 25 blank · 10 comment · 3 complexity · 2b98b324230315b6599e2050c13cda9e MD5 · raw file

  1. var MsTranslator = require('../mstranslator');
  2. var assert = require('assert');
  3. var expect = require('chai').expect;
  4. var _ = require('underscore');
  5. var api_key = process.env.API_KEY;
  6. if (!api_key) {
  7. console.log('missing api_key');
  8. process.exit(1);
  9. }
  10. var translator = new MsTranslator({api_key: api_key}, true);
  11. describe('MsTranslator', function () {
  12. /*
  13. it('test breakSentences', function() {
  14. var text = encodeURIComponent("This is one sentence. The method will count this as the second sentences. Finally, the third sentence.");
  15. var params = { text: text, language: 'en' };
  16. translator.access_token(client_id, client_secret, function(err, access_token) {
  17. translator.breakSentences(params, access_token, function(err, data) {
  18. });
  19. });
  20. }*/
  21. it('tests detect', function (done) {
  22. var text = encodeURIComponent("The language of this text is going to be detected.");
  23. var params = {text: text};
  24. translator.detect(params, function (err, data) {
  25. assert.equal(data, 'en');
  26. done();
  27. });
  28. });
  29. it('tests detectArray', function (done) {
  30. var texts = "[\"This is English text.\", \"Das ist deutsche Text.\", \"Questo un testo italiano.\"]";
  31. var params = {texts: texts};
  32. translator.detectArray(params, function (err, data) {
  33. assert.deepEqual(data, ['en', 'de', 'it']);
  34. done();
  35. });
  36. });
  37. it('tests getLanguageNames', function (done) {
  38. var languageCodes = "[\"de\", \"fr\", \"it\"]";
  39. var params = {locale: 'en', languageCodes: languageCodes};
  40. translator.getLanguageNames(params, function (err, data) {
  41. assert.deepEqual(data, ['German', 'French', 'Italian']);
  42. done();
  43. });
  44. });
  45. it('tests getLanguagesForSpeak', function (done) {
  46. translator.getLanguagesForSpeak(function (err, data) {
  47. assert.equal(typeof data, 'object');
  48. done();
  49. });
  50. });
  51. it('tests getLanguagesForTranslate', function (done) {
  52. translator.getLanguagesForTranslate(function (err, data) {
  53. assert.equal(typeof data, 'object');
  54. done();
  55. });
  56. });
  57. it('tests speak', function (done) {
  58. var params = {text: 'Muchas gracias.', language: 'es', format: 'audio/wav'};
  59. translator.speak(params, function (err, data) {
  60. assert.equal(typeof data, 'object');
  61. done();
  62. });
  63. });
  64. it('tests speakURL', function (done) {
  65. var params = {text: 'Muchas gracias.', language: 'es', format: 'audio/wav'};
  66. translator.speakURL(params, function (err, data) {
  67. assert.equal(typeof data, 'string');
  68. done();
  69. });
  70. });
  71. it('tests translate', function (done) {
  72. var params = {text: 'translate this.', from: 'en', to: 'es'};
  73. translator.translate(params, function (err, data) {
  74. assert.equal(data.toLowerCase(), 'traducir esto.');
  75. done();
  76. });
  77. });
  78. it('tests translateArray', function (done) {
  79. var texts = ['monkey', 'cow'];
  80. var params = {texts: texts, from: 'en', to: 'es', maxTranslations: 5};
  81. translator.translateArray(params, function (err, data) {
  82. assert.equal(data[0].TranslatedText, 'mono');
  83. assert.equal(data[1].TranslatedText, 'vaca');
  84. done();
  85. });
  86. });
  87. it('tests translateArray for texts with quotes', function (done) {
  88. var texts = ['"start"', 'single "', 'escaped \\"'];
  89. var params = {texts: texts, from: 'en', to: 'es', maxTranslations: 5};
  90. translator.translateArray(params, function (err, data) {
  91. assert.equal(Array.isArray(data), true);
  92. assert.equal(data[0].TranslatedText, '«start»');
  93. assert.equal(data[1].TranslatedText, 'solo"');
  94. assert.equal(data[2].TranslatedText, 'escapó"');
  95. done();
  96. });
  97. });
  98. it('tests translateArray2', function (done) {
  99. var texts = ['monkey', 'cow'];
  100. var params = {texts: texts, from: 'en', to: 'es', maxTranslations: 5};
  101. translator.translateArray2(params, function (err, data) {
  102. assert.equal(data[0].TranslatedText, 'mono');
  103. assert.equal(data[0].Alignment, '0:5-0:3');
  104. assert.equal(data[1].TranslatedText, 'vaca');
  105. assert.equal(data[1].Alignment, '0:2-0:3');
  106. done();
  107. });
  108. });
  109. it('tests addTranslation', function (done) {
  110. var addParams = {
  111. originalText: 'Esto es una prueba',
  112. translatedText: 'This is a quiz!',
  113. from: 'es',
  114. to: 'en',
  115. user: 'testuser',
  116. };
  117. var getParams = {
  118. text: 'Esto es una prueba',
  119. from: 'es',
  120. to: 'en',
  121. maxTranslations: 200,
  122. };
  123. var params = {text: 'translate this.', from: 'en', to: 'es'};
  124. translator.addTranslation(addParams, function (err, data) {
  125. assert.equal(err, null);
  126. // Added translation should now appear in results
  127. translator.getTranslations(getParams, function (err, data) {
  128. expect(data).to.have.property('Translations');
  129. translations = _.pluck(data.Translations, 'TranslatedText');
  130. expect(translations).to.contain('This is a quiz!');
  131. done();
  132. });
  133. });
  134. });
  135. it('handles an ArgumentOutOfRangeException', function (done) {
  136. var params = {
  137. text: 'whatever',
  138. from: 'en',
  139. to: 'easdfn'
  140. };
  141. translator.translate(params, function (err, data) {
  142. assert.ok(
  143. err.message.indexOf('ArgumentOutOfRangeException:') !== -1,
  144. 'An error reports the ArgumentOutOfRangeException.'
  145. );
  146. done();
  147. });
  148. });
  149. it('handles an ArgumentNullException', function (done) {
  150. var params = {
  151. from: 'en',
  152. to: 'es'
  153. };
  154. translator.translate(params, function (err, data) {
  155. assert.ok(
  156. err.message.indexOf('ArgumentNullException:') !== -1,
  157. 'An error reports the ArgumentNullException.'
  158. );
  159. done();
  160. });
  161. });
  162. it('expires current token if token is bad', function (done) {
  163. var params = {
  164. text: 'Esto es una prueba',
  165. from: 'en',
  166. to: 'es'
  167. };
  168. translator.access_token = 'bad-token';
  169. var expirationInOneMinute = Date.now() + 60000;
  170. translator.expires_at = expirationInOneMinute;
  171. translator.translate(params, function (err, data) {
  172. assert.ok(
  173. err.message.indexOf('token') !== -1,
  174. 'The error contains the word token'
  175. );
  176. assert.ok(
  177. translator.expires_at < expirationInOneMinute,
  178. 'The access_token expiration was set to now'
  179. );
  180. done();
  181. });
  182. });
  183. });