From b3d2b3ee1aba0696829935f9f477cc9542940959 Mon Sep 17 00:00:00 2001 From: Vladimir Setka Date: Sun, 10 Sep 2017 00:43:57 +0200 Subject: [PATCH] tests: write unit tests --- __mocks__/request-helper.js | 12 +++++++++++ __mocks__/translationMap.js | 37 ++++++++++++++++++++++++++++++++ __tests__/index.test.js | 42 +++++++++++++++++++++++++++++++++++++ package.json | 11 ++++++++++ 4 files changed, 102 insertions(+) create mode 100644 __mocks__/request-helper.js create mode 100644 __mocks__/translationMap.js create mode 100644 __tests__/index.test.js diff --git a/__mocks__/request-helper.js b/__mocks__/request-helper.js new file mode 100644 index 0000000..a58882b --- /dev/null +++ b/__mocks__/request-helper.js @@ -0,0 +1,12 @@ +const translationMap = require('./translationMap'); + +module.exports = (options, postBody) => { + return new Promise((resolve, reject) => { + const { params: { jobs: [{ raw_en_sentence: inputText }] } } = postBody; + + process.nextTick( + () => + !translationMap[inputText] ? reject(new Error('This input should throw')) : resolve(translationMap[inputText]) + ); + }); +}; diff --git a/__mocks__/translationMap.js b/__mocks__/translationMap.js new file mode 100644 index 0000000..d166595 --- /dev/null +++ b/__mocks__/translationMap.js @@ -0,0 +1,37 @@ +module.exports = { + 'Happy birthday!': { + result: { + source_lang: 'EN', + target_lang: 'DE', + translations: [ + { + beams: [ + { + postprocessed_sentence: 'Herzlichen Glückwunsch zum Geburtstag!', + }, + ], + }, + ], + }, + }, + 'This is a representative chunk of text in english.': { + result: { + source_lang: 'EN', + target_lang: 'DE', + translations: [ + { + beams: [ + { + postprocessed_sentence: 'This is a representative chunk of text in english.', + }, + ], + }, + ], + }, + }, + 'This mock results in an incorrect reponse format': { + result: { + no_translations_here: [], + }, + }, +}; diff --git a/__tests__/index.test.js b/__tests__/index.test.js new file mode 100644 index 0000000..0a430dd --- /dev/null +++ b/__tests__/index.test.js @@ -0,0 +1,42 @@ +jest.mock('../request-helper'); + +const { translate, detectLanguage } = require('../index'); + +test('Detects english input language correctly', () => { + return expect(detectLanguage('This is a representative chunk of text in english.')).resolves.toEqual({ + languageCode: 'EN', + languageName: 'English', + }); +}); + +test('Translate input correctly without specifying its language', () => { + return expect(translate('Happy birthday!', 'DE')).resolves.toEqual({ + targetLanguage: 'DE', + resolvedSourceLanguage: 'EN', + translation: 'Herzlichen Glückwunsch zum Geburtstag!', + }); +}); + +test('Rejects on invalid target language', () => { + return expect(translate('Happy birthday!')).rejects.toEqual(new Error('Invalid target language code undefined')); +}); + +test('Rejects on invalid source language', () => { + return expect(translate('Happy birthday!', 'DE', 'XX')).rejects.toEqual(new Error('Invalid source language code XX')); +}); + +test('Rejects when source and target languages are identical', () => { + return expect(translate('Happy birthday!', 'DE', 'DE')).rejects.toEqual( + new Error('Target and source language codes identical') + ); +}); + +test('Rejects when input text is not provided', () => { + return expect(translate('', 'DE')).rejects.toEqual(new Error('Must provide text for translation')); +}); + +test('Rejects when response in incorrect format', () => { + return expect(translate('This mock results in an incorrect reponse format', 'DE')).rejects.toEqual( + new Error('Unexpected error when parsing response body: {"result":{"no_translations_here":[]}}') + ); +}); diff --git a/package.json b/package.json index 44b05c8..3fa694e 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,13 @@ "description": "This module provides promised methods for translating text using DeepL Translator (https://www.deepl.com/translator) undocumented API.", "main": "index.js", + "scripts": { + "test": "jest", + "collectCoverage": "true" + }, + "jest": { + "verbose": true + }, "repository": "https://github.com/vsetka/deepl-translator.git", "homepage": "https://github.com/vsetka/deepl-translator#readme", "author": "Vladimir Setka ", @@ -15,5 +22,9 @@ "engineStrict": true, "engines": { "node": ">=6.0.0" + }, + "devDependencies": { + "coveralls": "^2.13.1", + "jest": "^21.0.2" } }