Skip to content

Commit

Permalink
Merge pull request #2491 from LiskHQ/2302-support-swiss-franc
Browse files Browse the repository at this point in the history
Support Swiss Franc (CHF) - Closes #2302
  • Loading branch information
slaweet committed Sep 26, 2019
2 parents 58e18fb + d2eea58 commit f41d050
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 26 deletions.
24 changes: 17 additions & 7 deletions src/actions/service.js
Expand Up @@ -6,15 +6,25 @@ import { errorToastDisplayed } from './toaster';
export const pricesRetrieved = () => (dispatch, getState) => {
const { settings: { token } } = getState();
const activeToken = token.active;
const tickerReducer = (acc, key) => ({
...acc,
[key.from]: {
...acc[key.from],
[key.to]: key.rate,
},
});

serviceAPI.getPriceTicker(activeToken)
.then(priceTicker => dispatch({
type: actionTypes.pricesRetrieved,
data: {
priceTicker,
activeToken,
},
}))
.then((priceTicker) => {
const priceTickerReduced = priceTicker.reduce(tickerReducer, {});
dispatch({
type: actionTypes.pricesRetrieved,
data: {
priceTicker: priceTickerReduced,
activeToken,
},
});
})
.catch(() => dispatch(errorToastDisplayed(i18next.t('Error retrieving conversion rates.'))));
};

Expand Down
17 changes: 12 additions & 5 deletions src/actions/service.test.js
@@ -1,9 +1,10 @@
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import actionTypes from '../constants/actions';
import serviceAPI from '../utils/api/service';
import configureMockStore from 'redux-mock-store';
import { pricesRetrieved, dynamicFeesRetrieved } from './service';
import { initialState as settings } from '../store/reducers/settings';
import actionTypes from '../constants/actions';
import prices from '../../test/constants/prices';
import serviceAPI from '../utils/api/service';

const middlewares = [thunk];
const mockStore = configureMockStore(middlewares);
Expand All @@ -19,8 +20,14 @@ describe('actions: service', () => {

describe('pricesRetrieved', () => {
it('should dispatch pricesRetrieved action with given data', async () => {
const tickers = { EUR: 1, USD: 1 };
serviceAPI.getPriceTicker.mockResolvedValueOnce(tickers);
const tickers = {
LSK: {
USD: prices.find(({ to }) => to === 'USD').rate,
EUR: prices.find(({ to }) => to === 'EUR').rate,
CHF: prices.find(({ to }) => to === 'CHF').rate,
},
};
serviceAPI.getPriceTicker.mockResolvedValueOnce(prices);

await store.dispatch(pricesRetrieved());

Expand Down
8 changes: 4 additions & 4 deletions src/components/converter/index.js
@@ -1,18 +1,18 @@
/* istanbul ignore file */
import { connect } from 'react-redux';

import { settingsUpdated } from '../../actions/settings';
import { pricesRetrieved } from '../../actions/service';
import { settingsUpdated } from '../../actions/settings';
import Converter from './converter';
import settings from '../../constants/settings';

const mapStateToProps = state => ({
settings: state.settings,
token: state.settings.token && state.settings.token.active,
priceTicker: (state.service && state.service.priceTicker)
? state.service.priceTicker
: {
LSK: { USD: '0', EUR: '0' },
BTC: { USD: '0', EUR: '0' },
LSK: settings.currencies.reduce((acc, key) => ({ ...acc, [key]: '0' })),
BTC: settings.currencies.reduce((acc, key) => ({ ...acc, [key]: '0' })),
},
});

Expand Down
2 changes: 1 addition & 1 deletion src/constants/settings.js
@@ -1,5 +1,5 @@
const settings = {
currencies: ['USD', 'EUR'],
currencies: ['USD', 'EUR', 'CHF'],
keys: {
loginKey: 'loginKey',
liskCoreUrl: 'liskCoreUrl',
Expand Down
8 changes: 4 additions & 4 deletions src/utils/api/btc/service.js
Expand Up @@ -5,13 +5,13 @@ const liskServiceUrl = 'https://service.lisk.io';

export const getPriceTicker = () => new Promise(async (resolve, reject) => {
try {
const response = await popsicle.get(`${liskServiceUrl}/api/getPriceTicker`)
const response = await popsicle.get(`${liskServiceUrl}/api/v1/market/prices`)
.use(popsicle.plugins.parse('json'));

if (response) {
resolve(response.body.tickers);
if (response.body.data.length) {
resolve(response.body.data);
} else {
reject(response.body.tickers);
reject(response.body);
}
} catch (error) {
reject(error);
Expand Down
9 changes: 4 additions & 5 deletions src/utils/api/lsk/liskService.js
@@ -1,15 +1,14 @@
// import popsicle from 'popsicle'; // doesn't work
const popsicle = require('popsicle');
import * as popsicle from 'popsicle';

const liskServiceUrl = 'https://service.lisk.io';

const liskServiceApi = {
getPriceTicker: () => new Promise((resolve, reject) => {
popsicle.get(`${liskServiceUrl}/api/getPriceTicker`)
popsicle.get(`${liskServiceUrl}/api/v1/market/prices`)
.use(popsicle.plugins.parse('json'))
.then((response) => {
if (response.body.success) {
resolve(response.body.tickers);
if (response.body.data.length) {
resolve(response.body.data);
} else {
reject(response.body);
}
Expand Down
19 changes: 19 additions & 0 deletions test/constants/prices.js
@@ -0,0 +1,19 @@
export default [{
code: 'LSK_USD',
from: 'LSK',
to: 'USD',
rate: '0.928182548039292',
updateTimestamp: 1569501933,
}, {
code: 'LSK_EUR',
from: 'LSK',
to: 'EUR',
rate: '0.8464144752',
updateTimestamp: 1569501816,
}, {
code: 'LSK_CHF',
from: 'LSK',
to: 'CHF',
rate: '0.923896066',
updateTimestamp: 1569501933,
}];

0 comments on commit f41d050

Please sign in to comment.