Skip to content

Commit a1eb0a3

Browse files
committed
add more unit tests
1 parent 65c5973 commit a1eb0a3

20 files changed

Lines changed: 414 additions & 144 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
const { expect, setURL } = require('./tests_common');
2+
const Language = require('../language');
3+
const Url = require('../url');
4+
5+
describe('Language', () => {
6+
const all_languages = {
7+
ACH : 'Translations',
8+
EN : 'English',
9+
DE : 'Deutsch',
10+
ES : 'Español',
11+
FR : 'Français',
12+
ID : 'Indonesia',
13+
IT : 'Italiano',
14+
JA : '日本語',
15+
PL : 'Polish',
16+
PT : 'Português',
17+
RU : 'Русский',
18+
TH : 'Thai',
19+
VI : 'Tiếng Việt',
20+
ZH_CN: '简体中文',
21+
ZH_TW: '繁體中文',
22+
};
23+
const website_url = Url.websiteUrl();
24+
25+
describe('.getAll()', () => {
26+
it('works as expected', () => {
27+
expect(Language.getAll()).to.deep.eq(all_languages);
28+
});
29+
});
30+
31+
describe('.get()', () => {
32+
it('defaults to EN', () => {
33+
expect(Language.get()).to.eq('EN');
34+
});
35+
it('can detect language from url', () => {
36+
setURL(`${website_url}es/home.html`);
37+
expect(Language.get()).to.eq('ES');
38+
});
39+
it('reverts to default language (EN) if invalid url language', () => {
40+
setURL(`${website_url}zz/home.html`);
41+
expect(Language.get()).to.eq('EN');
42+
setURL(`${website_url}en/home.html`);
43+
});
44+
});
45+
46+
describe('.urlFor()', () => {
47+
it('works as expected for current url', () => {
48+
expect(Language.urlFor('ZH_TW')).to.eq(`${website_url}zh_tw/home.html`);
49+
});
50+
it('works as expected for custom url', () => {
51+
expect(Language.urlFor('ZH_CN', `${website_url}en/tour.html`)).to.eq(`${website_url}zh_cn/tour.html`);
52+
});
53+
it('reverts to default (EN) if passed empty language', () => {
54+
expect(Language.urlFor('', `${website_url}en/tour.html`)).to.eq(`${website_url}en/tour.html`);
55+
});
56+
});
57+
58+
describe('.urlLang()', () => {
59+
it('works as expected for current url', () => {
60+
setURL(`${website_url}id/home.html`);
61+
expect(Language.urlLang()).to.eq('id');
62+
});
63+
it('works as expected for custom url', () => {
64+
expect(Language.urlLang(`${website_url}vi/tour.html`)).to.eq('vi');
65+
});
66+
it('works as expected for invalid language in custom url', () => {
67+
expect(Language.urlLang(`${website_url}zz/tour.html`)).to.eq('');
68+
});
69+
});
70+
});

src/javascript/app/base/__tests__/tests_common.js renamed to src/javascript/_common/__tests__/tests_common.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ const { LiveApi } = require('binary-live-api');
22
const expect = require('chai').expect;
33
const jsdom = require('jsdom');
44
const websocket = require('ws');
5-
const Language = require('../../../_common/language');
6-
const Url = require('../../../_common/url');
5+
const Language = require('../language');
6+
const Url = require('../url');
77

88
const setURL = (url) => {
99
jsdom.changeURL(window, url);
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
const { expect, setURL } = require('./tests_common');
2+
const Url = require('../url');
3+
4+
describe('Url', () => {
5+
const website_url = Url.websiteUrl();
6+
const language = 'en';
7+
const query_string = 'market=forex&duration_amount=5&no_value=';
8+
const params_obj = { market: 'forex', duration_amount: '5', no_value: '' };
9+
const url_no_qs = `${website_url}${language}/trading.html`;
10+
const url_with_qs = `${url_no_qs}?${query_string}`;
11+
const home_url = `${website_url}${language}/home.html`;
12+
13+
describe('.paramsHash()', () => {
14+
it('returns correct object', () => {
15+
expect(Url.paramsHash(url_with_qs)).to.be.an('Object')
16+
.and.to.have.all.keys('market', 'duration_amount', 'no_value')
17+
.and.to.deep.equal(params_obj);
18+
});
19+
it('returns empty object when there is no query string', () => {
20+
expect(Url.paramsHash(url_no_qs)).to.be.an('Object')
21+
.and.to.deep.equal({});
22+
expect(Url.paramsHash(`${url_no_qs}?`)).to.be.an('Object')
23+
.and.to.deep.equal({});
24+
setURL(url_no_qs);
25+
expect(Url.paramsHash()).to.deep.eq({});
26+
});
27+
});
28+
29+
describe('.getLocation()', () => {
30+
it('works as expected', () => {
31+
expect(Url.getLocation().hostname).to.eq('www.binary.com');
32+
});
33+
});
34+
35+
describe('.paramsHashToString()', () => {
36+
it('returns an empty string if empty object or undefined passed', () => {
37+
expect(Url.paramsHashToString({})).to.eq('');
38+
expect(Url.paramsHashToString()).to.eq('');
39+
});
40+
it('returns the expected conversion of object to string', () => {
41+
expect(Url.paramsHashToString(params_obj)).to.eq(query_string);
42+
});
43+
});
44+
45+
describe('.urlFor()', () => {
46+
it('returns home as default', () => {
47+
[undefined, null, '', '/', 'home'].forEach((path) => {
48+
expect(Url.urlFor(path)).to.eq(home_url);
49+
});
50+
});
51+
it('accepts params', () => {
52+
expect(Url.urlFor('trading', query_string)).to.eq(url_with_qs);
53+
});
54+
it('returns the correct language', () => {
55+
expect(Url.urlFor('home', undefined, 'es')).to.eq(`${website_url}es/home.html`);
56+
});
57+
it('ignores invalid characters', () => {
58+
expect(Url.urlFor('`~!@#$%^&*)(=+\[}{\]\\\"\';:\?><,|')).to.eq(home_url);
59+
});
60+
it('handles all valid characters', () => {
61+
expect(Url.urlFor('metatrader/comparison-4_vs_5'))
62+
.to.eq(`${website_url}${language}/metatrader/comparison-4_vs_5.html`);
63+
});
64+
});
65+
66+
describe('.urlForStatic()', () => {
67+
it('returns base path as default', () => {
68+
expect(Url.urlForStatic()).to.eq(website_url);
69+
});
70+
it('returns expected path', () => {
71+
expect(Url.urlForStatic('images/common/plus.svg')).to.eq(`${website_url}images/common/plus.svg`);
72+
});
73+
});
74+
75+
describe('.param()', () => {
76+
it('returns undefined if no match', () => {
77+
setURL(url_with_qs);
78+
expect(Url.param()).to.eq(undefined);
79+
});
80+
it('returns expected parameter', () => {
81+
expect(Url.param('duration_amount')).to.be.a('string').and.eq('5');
82+
expect(Url.param('no_value')).to.be.a('string').and.eq('');
83+
});
84+
});
85+
86+
describe('.websiteUrl()', () => {
87+
it('returns expected value', () => {
88+
expect(website_url).to.eq('https://www.binary.com/');
89+
});
90+
});
91+
});

src/javascript/app/base/__tests__/utility.js renamed to src/javascript/_common/__tests__/utility.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const expect = require('chai').expect;
2-
const Utility = require('../../../_common/utility');
2+
const Utility = require('../utility');
33
global.$ = require('jquery');
44

55
describe('Utility', () => {

src/javascript/_common/language.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ const Language = (() => {
6060
};
6161

6262
const urlForLanguage = (lang, url = window.location.href) =>
63-
url.replace(new RegExp(`/${getLanguage()}/`, 'i'), `/${lang.trim().toLowerCase()}/`);
63+
url.replace(new RegExp(`/${getLanguage()}/`, 'i'), `/${(lang || 'EN').trim().toLowerCase()}/`);
6464

6565
const onChangeLanguage = () => {
6666
applyToAllElements('li', (el) => {

src/javascript/_common/menu_selector.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ const MenuSelector = (() => {
6262

6363
return {
6464
init,
65-
showSelectedDiv,
6665
clean,
6766
};
6867
})();

0 commit comments

Comments
 (0)