|
| 1 | +const Client = require('../client_base'); |
| 2 | +const setCurrencies = require('../currency_base').setCurrencies; |
| 3 | +const { api, expect, setURL } = require('../../__tests__/tests_common'); |
| 4 | +const State = require('../../storage').State; |
| 5 | +const Url = require('../../url'); |
| 6 | + |
| 7 | +describe('ClientBase', () => { |
| 8 | + const loginid_invalid = 'ZZ123456789'; |
| 9 | + const loginid_virtual = 'VRTC123456789'; |
| 10 | + const loginid_real = 'CR123456789'; |
| 11 | + const loginid_real_2 = 'CR123456788'; |
| 12 | + const loginid_real_iom = 'MX123'; |
| 13 | + const loginid_gaming = 'MLT123'; |
| 14 | + const loginid_financial = 'MF123'; |
| 15 | + |
| 16 | + const landing_company = { landing_company: { financial_company: { name: 'Binary Investments (Europe) Ltd', shortcode: 'maltainvest' }, gaming_company: { name: 'Binary (Europe) Ltd', shortcode: 'malta' } }, msg_type: 'landing_company' }; |
| 17 | + const authorize = { authorize: { upgradeable_landing_companies: [] }}; |
| 18 | + |
| 19 | + describe('.validateLoginid()', () => { |
| 20 | + it('can detect a valid loginid', () => { |
| 21 | + [loginid_virtual, loginid_real].forEach((id) => { |
| 22 | + Client.set('loginid', id, id); |
| 23 | + Client.set('token', 'test', id); |
| 24 | + expect(Client.isValidLoginid()).to.eq(true); |
| 25 | + }); |
| 26 | + }); |
| 27 | + it('can detect an invalid loginid', () => { |
| 28 | + Client.set('loginid', loginid_invalid, loginid_invalid); |
| 29 | + Client.set('token', 'test', loginid_invalid); |
| 30 | + expect(Client.isValidLoginid()).to.eq(false); |
| 31 | + }); |
| 32 | + after(() => { |
| 33 | + Client.clearAllAccounts(); |
| 34 | + }); |
| 35 | + }); |
| 36 | + |
| 37 | + describe('.(set|get)()', () => { |
| 38 | + it('sets and gets for expected client', () => { |
| 39 | + Client.set('currency', 'USD', loginid_virtual); |
| 40 | + Client.set('currency', 'EUR', loginid_real); |
| 41 | + expect(Client.get('currency', loginid_virtual)).to.eq('USD'); |
| 42 | + expect(Client.get('currency', loginid_real)).to.eq('EUR'); |
| 43 | + }); |
| 44 | + it('returns expected data types', () => { |
| 45 | + Client.set('number', 1, loginid_real); |
| 46 | + expect(Client.get('number', loginid_real)).to.be.a('Number').and.to.eq(1); |
| 47 | + Client.set('float', 1.12345, loginid_real); |
| 48 | + expect(Client.get('float', loginid_real)).to.be.a('Number').and.to.eq(1.12345); |
| 49 | + const obj_nested = { a: { b: 'test' } }; |
| 50 | + Client.set('object', obj_nested, loginid_real); |
| 51 | + expect(Client.get('object', loginid_real)).to.be.an('Object').and.to.deep.eq(obj_nested); |
| 52 | + Client.set('bool', true, loginid_real); |
| 53 | + expect(Client.get('bool', loginid_real)).to.be.a('boolean').and.to.eq(true); |
| 54 | + Client.set('undef', undefined, loginid_real); |
| 55 | + expect(Client.get('undef', loginid_real)).to.eq(undefined); |
| 56 | + }); |
| 57 | + }); |
| 58 | + |
| 59 | + describe('.getAllLoginids()', () => { |
| 60 | + it('works as expected', () => { |
| 61 | + expect(Client.getAllLoginids()).to.deep.eq([ loginid_virtual, loginid_real ]); |
| 62 | + }); |
| 63 | + }); |
| 64 | + |
| 65 | + describe('.getAccountType()', () => { |
| 66 | + it('works as expected', () => { |
| 67 | + expect(Client.getAccountType(loginid_virtual)).to.eq('virtual'); |
| 68 | + expect(Client.getAccountType(loginid_real)).to.eq(undefined); |
| 69 | + expect(Client.getAccountType(loginid_gaming)).to.eq('gaming'); |
| 70 | + expect(Client.getAccountType(loginid_financial)).to.eq('financial'); |
| 71 | + }); |
| 72 | + }); |
| 73 | + |
| 74 | + describe('.isAccountOfType()', () => { |
| 75 | + it('works as expected', () => { |
| 76 | + expect(Client.isAccountOfType('virtual', loginid_virtual)).to.eq(true); |
| 77 | + expect(Client.isAccountOfType('real', loginid_real)).to.eq(true); |
| 78 | + }); |
| 79 | + it('doesn\'t return disabled account if enabled_only flag is set', () => { |
| 80 | + Client.set('is_disabled', 1, loginid_financial); |
| 81 | + expect(Client.isAccountOfType('financial', loginid_financial, 1)).to.eq(false); |
| 82 | + }); |
| 83 | + }); |
| 84 | + |
| 85 | + describe('.getAccountOfType()', () => { |
| 86 | + it('works as expected', () => { |
| 87 | + expect(Client.getAccountOfType('virtual').loginid).to.eq(loginid_virtual); |
| 88 | + expect(Client.getAccountOfType('real').loginid).to.eq(loginid_real); |
| 89 | + expect(Client.getAccountOfType('financial').loginid).to.eq(loginid_financial); |
| 90 | + }); |
| 91 | + it('doesn\'t return disabled account if enabled_only flag is set', () => { |
| 92 | + expect(Client.getAccountOfType('financial', 1).loginid).to.eq(undefined); |
| 93 | + }); |
| 94 | + }); |
| 95 | + |
| 96 | + describe('.hasAccountType()', () => { |
| 97 | + it('works as expected', () => { |
| 98 | + expect(Client.hasAccountType('financial')).to.eq(true); |
| 99 | + }); |
| 100 | + it('doesn\'t return disabled account if enabled_only flag is set', () => { |
| 101 | + expect(Client.hasAccountType('financial', 1)).to.eq(false); |
| 102 | + }); |
| 103 | + }); |
| 104 | + |
| 105 | + describe('.hasCurrencyType()', () => { |
| 106 | + it('works as expected', () => { |
| 107 | + Client.set('is_virtual', 1, loginid_virtual); |
| 108 | + expect(Client.hasCurrencyType('fiat')).to.eq(loginid_real); |
| 109 | + expect(Client.hasCurrencyType('crypto')).to.eq(undefined); |
| 110 | + }); |
| 111 | + }); |
| 112 | + |
| 113 | + describe('.shouldAcceptTnc()', () => { |
| 114 | + it('doesn\'t ask to accept if same version', () => { |
| 115 | + State.set(['response', 'website_status', 'website_status', 'terms_conditions_version'], 1); |
| 116 | + State.set(['response', 'get_settings', 'get_settings', 'client_tnc_status'], 1); |
| 117 | + expect(Client.shouldAcceptTnc()).to.eq(false); |
| 118 | + }); |
| 119 | + it('asks to accept if different version', () => { |
| 120 | + State.set(['response', 'website_status', 'website_status', 'terms_conditions_version'], 2); |
| 121 | + expect(Client.shouldAcceptTnc()).to.eq(true); |
| 122 | + }); |
| 123 | + }); |
| 124 | + |
| 125 | + describe('.clearAllAccounts()', () => { |
| 126 | + it('works as expected', () => { |
| 127 | + Client.clearAllAccounts(); |
| 128 | + expect(Client.get()).to.deep.eq({}); |
| 129 | + }); |
| 130 | + }); |
| 131 | + |
| 132 | + describe('.currentLandingCompany()', () => { |
| 133 | + it('works as expected', () => { |
| 134 | + State.set(['response', 'landing_company'], landing_company); |
| 135 | + Client.set('landing_company_shortcode', 'malta'); |
| 136 | + expect(Client.currentLandingCompany()).to.deep.eq({ name: 'Binary (Europe) Ltd', shortcode: 'malta' }); |
| 137 | + Client.set('landing_company_shortcode', 'maltainvest'); |
| 138 | + expect(Client.currentLandingCompany()).to.deep.eq({ name: 'Binary Investments (Europe) Ltd', shortcode: 'maltainvest' }); |
| 139 | + Client.set('landing_company_shortcode', 'virtual'); |
| 140 | + expect(Client.currentLandingCompany()).to.deep.eq({}); |
| 141 | + }); |
| 142 | + }); |
| 143 | + |
| 144 | + describe('.getBasicUpgradeInfo()', () => { |
| 145 | + it('returns false if client can\'t upgrade', () => { |
| 146 | + State.set(['response', 'authorize'], authorize); |
| 147 | + expect(Client.getBasicUpgradeInfo().can_upgrade).to.eq(false); |
| 148 | + }); |
| 149 | + it('returns as expected for accounts that can upgrade to real', () => { |
| 150 | + ['costarica', 'malta', 'iom'].forEach((lc) => { |
| 151 | + State.set(['response', 'authorize', 'authorize', 'upgradeable_landing_companies'], [ lc ]); |
| 152 | + const ugprade_info = Client.getBasicUpgradeInfo(); |
| 153 | + expect(ugprade_info.can_upgrade).to.eq(true); |
| 154 | + expect(ugprade_info.can_upgrade_to).to.eq(lc); |
| 155 | + expect(ugprade_info.type).to.eq('real'); |
| 156 | + expect(ugprade_info.can_open_multi).to.eq(false); |
| 157 | + }); |
| 158 | + }); |
| 159 | + it('returns as expected for accounts that can upgrade to financial', () => { |
| 160 | + State.set(['response', 'authorize', 'authorize', 'upgradeable_landing_companies'], [ 'maltainvest' ]); |
| 161 | + const ugprade_info = Client.getBasicUpgradeInfo(); |
| 162 | + expect(ugprade_info.can_upgrade).to.eq(true); |
| 163 | + expect(ugprade_info.can_upgrade_to).to.eq('maltainvest'); |
| 164 | + expect(ugprade_info.type).to.eq('financial'); |
| 165 | + expect(ugprade_info.can_open_multi).to.eq(false); |
| 166 | + }); |
| 167 | + it('returns as expected for accounts that can upgrade to japan', () => { |
| 168 | + State.set(['response', 'authorize', 'authorize', 'upgradeable_landing_companies'], [ 'japan' ]); |
| 169 | + const ugprade_info = Client.getBasicUpgradeInfo(); |
| 170 | + expect(ugprade_info.can_upgrade).to.eq(true); |
| 171 | + expect(ugprade_info.can_upgrade_to).to.eq('japan'); |
| 172 | + expect(ugprade_info.type).to.eq('real'); |
| 173 | + expect(ugprade_info.can_open_multi).to.eq(false); |
| 174 | + }); |
| 175 | + it('returns as expected for multi account opening', () => { |
| 176 | + State.set(['response', 'authorize', 'authorize', 'upgradeable_landing_companies'], [ 'costarica' ]); |
| 177 | + Client.set('landing_company_shortcode', 'costarica'); |
| 178 | + const ugprade_info = Client.getBasicUpgradeInfo(); |
| 179 | + expect(ugprade_info.can_upgrade).to.eq(false); |
| 180 | + expect(ugprade_info.can_upgrade_to).to.eq(undefined); |
| 181 | + expect(ugprade_info.type).to.eq(undefined); |
| 182 | + expect(ugprade_info.can_open_multi).to.eq(true); |
| 183 | + }); |
| 184 | + }); |
| 185 | + |
| 186 | + describe('.getLandingCompanyValue()', () => { |
| 187 | + it('works as expected', () => { |
| 188 | + expect(Client.getLandingCompanyValue(loginid_financial, landing_company.landing_company, 'name')).to.eq(landing_company.landing_company.financial_company.name); |
| 189 | + expect(Client.getLandingCompanyValue(loginid_gaming, landing_company.landing_company, 'name')).to.eq(landing_company.landing_company.gaming_company.name); |
| 190 | + }); |
| 191 | + }); |
| 192 | + |
| 193 | + describe('.canTransferFunds()', () => { |
| 194 | + before(function (done) { |
| 195 | + this.timeout(5000); |
| 196 | + api.getWebsiteStatus().then((response) => { |
| 197 | + setCurrencies(response.website_status); |
| 198 | + done(); |
| 199 | + }); |
| 200 | + }); |
| 201 | + it('fails if client has maltainvest and malta accounts with one missing currency', () => { |
| 202 | + Client.clearAllAccounts(); |
| 203 | + [loginid_gaming, loginid_financial].forEach((id) => { |
| 204 | + Client.set('loginid', id, id); |
| 205 | + }); |
| 206 | + Client.set('landing_company_shortcode', 'maltainvest', loginid_financial); |
| 207 | + Client.set('landing_company_shortcode', 'malta', loginid_gaming); |
| 208 | + |
| 209 | + Client.set('currency', 'USD', loginid_gaming); |
| 210 | + |
| 211 | + expect(Client.canTransferFunds()).to.eq(false); |
| 212 | + }); |
| 213 | + it('fails if client has maltainvest and malta accounts with differing currencies', () => { |
| 214 | + Client.set('currency', 'USD', loginid_gaming); |
| 215 | + Client.set('currency', 'EUR', loginid_financial); |
| 216 | + |
| 217 | + expect(Client.canTransferFunds()).to.eq(false); |
| 218 | + }); |
| 219 | + it('passes if client has maltainvest and malta accounts with the same currency', () => { |
| 220 | + Client.set('currency', 'USD', loginid_gaming); |
| 221 | + Client.set('currency', 'USD', loginid_financial); |
| 222 | + |
| 223 | + expect(Client.canTransferFunds()).to.eq(true); |
| 224 | + }); |
| 225 | + it('fails if maltainvest and non-malta client even if same currency', () => { |
| 226 | + Client.clearAllAccounts(); |
| 227 | + [loginid_real_iom, loginid_financial].forEach((id) => { |
| 228 | + Client.set('loginid', id, id); |
| 229 | + }); |
| 230 | + Client.set('landing_company_shortcode', 'iom', loginid_real_iom); |
| 231 | + Client.set('landing_company_shortcode', 'maltainvest', loginid_financial); |
| 232 | + |
| 233 | + Client.set('currency', 'USD', loginid_real_iom); |
| 234 | + Client.set('currency', 'USD', loginid_financial); |
| 235 | + |
| 236 | + expect(Client.canTransferFunds()).to.eq(false); |
| 237 | + }); |
| 238 | + it('fails if non-maltainvest client only has fiat accounts', () => { |
| 239 | + Client.clearAllAccounts(); |
| 240 | + [loginid_real, loginid_real_2].forEach((id) => { |
| 241 | + Client.set('loginid', id, id); |
| 242 | + }); |
| 243 | + Client.set('currency', 'USD', loginid_real); |
| 244 | + Client.set('currency', 'EUR', loginid_real_2); |
| 245 | + |
| 246 | + expect(Client.canTransferFunds()).to.eq(false); |
| 247 | + }); |
| 248 | + it('fails if non-maltainvest client only has crypto accounts', () => { |
| 249 | + Client.set('currency', 'BTC', loginid_real); |
| 250 | + Client.set('currency', 'ETH', loginid_real_2); |
| 251 | + |
| 252 | + expect(Client.canTransferFunds()).to.eq(false); |
| 253 | + }); |
| 254 | + it('passes if non-maltainvest client has fiat and crypto accounts', () => { |
| 255 | + Client.set('currency', 'USD', loginid_real); |
| 256 | + Client.set('currency', 'BTC', loginid_real_2); |
| 257 | + |
| 258 | + expect(Client.canTransferFunds()).to.eq(true); |
| 259 | + }); |
| 260 | + after(() => { |
| 261 | + Client.clearAllAccounts(); |
| 262 | + }); |
| 263 | + }); |
| 264 | + |
| 265 | + describe('.hasCostaricaAccount()', () => { |
| 266 | + it('works as expected', () => { |
| 267 | + Client.set('loginid', loginid_financial, loginid_financial); |
| 268 | + Client.set('token', 'test', loginid_financial); |
| 269 | + expect(Client.hasCostaricaAccount()).to.eq(false); |
| 270 | + Client.set('loginid', loginid_real, loginid_real); |
| 271 | + Client.set('token', 'test', loginid_real); |
| 272 | + expect(Client.hasCostaricaAccount()).to.eq(true); |
| 273 | + }); |
| 274 | + }); |
| 275 | + |
| 276 | + after(() => { |
| 277 | + setURL(`${Url.websiteUrl()}en/home.html`); |
| 278 | + Client.clearAllAccounts(); |
| 279 | + }); |
| 280 | +}); |
0 commit comments