Skip to content

Commit fb97bb0

Browse files
fix(transalte-json-object): implementing translating json in arrays
e.g [{color: "green"}, ...] #5
1 parent d9853a2 commit fb97bb0

File tree

12 files changed

+204
-219
lines changed

12 files changed

+204
-219
lines changed

__mocks__/google-translate.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
module.exports = function () {
22
return {
33
translate: (value, lang, fn) => {
4-
if (Array.isArray(value)) {
5-
var translatedList = value.map(e => {
6-
return {translatedText: e + '-' + lang};
7-
});
4+
if (value) {
5+
var translatedList = {translatedText: value + '-' + lang};
86
fn(null, translatedList);
97
} else {
108
fn({error: 'provide value'});

__mocks__/mock-data.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
const mockDataObject = {name: 'name', some: [{name: 'j'}], addressField: ['city', 'state', 'zipdecode'], bool: true, num: 33, badBool: false, nully: null, undefined: undefined};
3+
const transaltedES = {name: 'name-es', some: [{name: 'j-es'}], addressField: ['city-es', 'state-es', 'zipdecode-es'], bool: true, num: 33, badBool: false, nully: null, undfined: undefined};
4+
5+
module.exports = {
6+
mockDataObject,
7+
transaltedES
8+
};

__mocks__/yandex-translate.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
var hash = '[(.|.)]';
2-
31
module.exports = function () {
42
return {
53
translate: (value, lang, fn) => {
6-
var result = value.split(hash);
7-
if (Array.isArray(result)) {
8-
var translatedList = result.map(e => {
9-
return e + '-' + lang.to;
10-
});
11-
fn(null, {text: [translatedList.join(hash)]});
4+
if (value) {
5+
var translatedList = value + '-' + lang.to;
6+
fn(null, {text: [translatedList]});
127
} else {
138
fn({error: 'provide value'});
149
}

__tests__/api/general.spec.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// eslint-disable-next-line import/no-unresolved, import/no-extraneous-dependencies
2+
const {mockDataObject} = require('mock-data'); // Note mock-data live under __mocks__ dir
3+
const Translate = require('../../lib/translate-json-object');
4+
5+
const TJO = new Translate();
6+
const init = jest.fn(TJO.init);
7+
const translate = jest.fn(TJO.translate);
8+
9+
describe('TJO module to exist', () => {
10+
it('should TJO to exist', () => {
11+
expect(TJO).toBeDefined();
12+
});
13+
14+
it('should TJO.init to exist', () => {
15+
expect(TJO.init).toBeDefined();
16+
});
17+
18+
it('should TJO.translate to exist', () => {
19+
expect(TJO.translate).toBeDefined();
20+
});
21+
});
22+
23+
describe('Translate Module TJO: ', () => {
24+
it('should init() to have been called', () => {
25+
init({googleApiKey: 'apiToken'});
26+
expect(init).toHaveBeenCalled();
27+
});
28+
29+
it('should translate() to have been called', () => {
30+
translate();
31+
expect(translate).toHaveBeenCalled();
32+
});
33+
34+
it('should fail to translate() using unkown service', () => {
35+
init({unkownApiService: 'apiToken'});
36+
return translate(mockDataObject, 'ar')
37+
.catch(err => {
38+
expect(err).toBeDefined();
39+
});
40+
});
41+
42+
it('should TJO.translate fails, becuase of missing google/yandex token', () => {
43+
init();
44+
return translate(mockDataObject, 'ar')
45+
.catch(err => {
46+
expect(err).toBeDefined();
47+
});
48+
});
49+
});

__tests__/api/google.spec.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// eslint-disable-next-line import/no-unresolved, import/no-extraneous-dependencies
2+
const {mockDataObject, transaltedES} = require('mock-data'); // Note mock-data live under __mocks__ dir
3+
const Translate = require('../../lib/translate-json-object');
4+
5+
const TJO = new Translate();
6+
const init = jest.fn(TJO.init);
7+
const translate = jest.fn(TJO.translate);
8+
9+
describe('TJO Google Translate Service', () => {
10+
it('Should transalte object: sucess', () => {
11+
init({googleApiKey: 'apiToken'});
12+
return translate(mockDataObject, 'es')
13+
.then(e => {
14+
expect(e).toEqual(transaltedES);
15+
});
16+
});
17+
18+
it('Should not transalte number: success', () => {
19+
init({googleApiKey: 'apiToken'});
20+
return translate({num: 33}, 'es')
21+
.then(e => {
22+
expect(e).toEqual({num: 33});
23+
});
24+
});
25+
26+
it('Should not boolean: success', () => {
27+
init({googleApiKey: 'apiToken'});
28+
return translate({bool: true}, 'es')
29+
.then(e => {
30+
expect(e).toEqual({bool: true});
31+
});
32+
});
33+
});

__tests__/api/yandex.spec.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// eslint-disable-next-line import/no-unresolved, import/no-extraneous-dependencies
2+
const {mockDataObject, transaltedES} = require('mock-data');
3+
const Translate = require('../../lib/translate-json-object');
4+
5+
const TJO = new Translate();
6+
const init = jest.fn(TJO.init);
7+
const translate = jest.fn(TJO.translate);
8+
9+
describe('TJO Yandex Translate Service', () => {
10+
it('Should transalte object: success', () => {
11+
init({yandexApiKey: 'apiToken'});
12+
return translate(mockDataObject, 'es')
13+
.then(e => {
14+
expect(e).toBeDefined();
15+
expect(e).toEqual(transaltedES);
16+
});
17+
});
18+
19+
it('Should not transalte number: success', () => {
20+
init({yandexApiKey: 'apiToken'});
21+
return translate({num: 33}, 'es')
22+
.then(e => {
23+
expect(e).toBeDefined();
24+
expect(e).toEqual({num: 33});
25+
});
26+
});
27+
28+
it('Should not boolean: success', () => {
29+
init({yandexApiKey: 'apiToken'});
30+
return translate({bool: true}, 'es')
31+
.then(e => {
32+
expect(e).toBeDefined();
33+
expect(e).toEqual({bool: true});
34+
});
35+
});
36+
});

__tests__/service/google.spec.js

Lines changed: 0 additions & 27 deletions
This file was deleted.

__tests__/service/yandex.spec.js

Lines changed: 0 additions & 28 deletions
This file was deleted.

__tests__/translate-json-object.spec.js

Lines changed: 0 additions & 108 deletions
This file was deleted.

lib/service/google.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ function init(setting) {
77
translateService = require('google-translate')(setting.googleApiKey);
88
}
99

10-
function translateString(language, key, destObj) {
10+
function translateObject(language, key, destObj) {
1111
// Find the keys of the current object that has string value (str is translatable)
1212
var objKeys = _.pickBy(destObj[key], _.isString);
1313
var keysArray = _.keys(objKeys);
@@ -30,18 +30,13 @@ function translateString(language, key, destObj) {
3030
});
3131
}
3232

33-
function translateArray(language, key, destObj, valuesArray) {
33+
function translateString(language, key, destObj, valueStr) {
3434
return new Promise(function (resolve, reject) {
35-
translateService.translate(valuesArray, language, function (err, res) {
35+
translateService.translate(valueStr, language, function (err, res) {
3636
if (err || !res) {
37-
reject('Translation service failed', err);
37+
reject('Google translation service failed', err);
3838
} else {
39-
var translatedArray = [];
40-
for (var i = 0; i < res.length; i++) {
41-
translatedArray.push(res[i].translatedText);
42-
}
43-
44-
destObj[key] = translatedArray;
39+
destObj[key] = res.translatedText;
4540
resolve(destObj);
4641
}
4742
});
@@ -50,6 +45,6 @@ function translateArray(language, key, destObj, valuesArray) {
5045

5146
module.exports = {
5247
init: init,
53-
array: translateArray,
48+
object: translateObject,
5449
string: translateString
5550
};

0 commit comments

Comments
 (0)