@yoroi/exchange
Version:
The Exchange package of Yoroi SDK
236 lines (235 loc) • 8.71 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.providers = void 0;
var _types = require("@yoroi/types");
var _immer = require("immer");
var _manager = require("./manager");
describe('referralLink', () => {
test('should generate a correct referral link with all parameters with access token and pathname', async () => {
const origin = 'https://checkout.banxa.com';
const pathname = '/pw';
const baseUrl = `${origin}${pathname}?&access_token=FAKE_TOKEN`;
const fullUrl = `${origin}` + `${pathname}/?` + 'orderType=sell' + '&' + 'fiatType=USD' + '&' + 'fiatAmount=500' + '&' + 'coinType=ADA' + '&' + 'coinAmount=800' + '&' + 'blockchain=ADA' + '&' + 'walletAddress=addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf' + '&' + 'access_token=FAKE_TOKEN';
const api = {
getBaseUrl: jest.fn(() => Promise.resolve(baseUrl))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
const url = await manager.referralLink.create({
providerId: 'encryptus',
queries: {
orderType: 'sell',
fiatType: 'USD',
fiatAmount: 500,
coinType: 'ADA',
coinAmount: 800,
blockchain: 'ADA',
walletAddress: 'addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf'
}
});
expect(url.toString()).toBe(fullUrl);
});
test('should generate a correct referral link with all parameters with access token without pathname', async () => {
const origin = 'https://checkout.banxa.com';
const baseUrl = `${origin}/?&access_token=FAKE_TOKEN`;
const fullUrl = `${origin}/?` + 'orderType=sell' + '&' + 'fiatType=USD' + '&' + 'fiatAmount=500' + '&' + 'coinType=ADA' + '&' + 'coinAmount=800' + '&' + 'blockchain=ADA' + '&' + 'walletAddress=addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf' + '&' + 'access_token=FAKE_TOKEN';
const api = {
getBaseUrl: jest.fn(() => Promise.resolve(baseUrl))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
const url = await manager.referralLink.create({
providerId: 'banxa',
queries: {
orderType: 'sell',
fiatType: 'USD',
fiatAmount: 500,
coinType: 'ADA',
coinAmount: 800,
blockchain: 'ADA',
walletAddress: 'addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf'
}
});
expect(url.toString()).toBe(fullUrl);
});
test('should generate a correct referral link with all parameters without access token and without pathname', async () => {
const baseUrl = 'https://checkout.banxa.com/?';
const fullUrl = baseUrl + 'orderType=sell' + '&' + 'fiatType=USD' + '&' + 'fiatAmount=500' + '&' + 'coinType=ADA' + '&' + 'coinAmount=800' + '&' + 'blockchain=ADA' + '&' + 'walletAddress=addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf';
const api = {
getBaseUrl: jest.fn(() => Promise.resolve(baseUrl))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
const url = await manager.referralLink.create({
providerId: 'banxa',
queries: {
orderType: 'sell',
fiatType: 'USD',
fiatAmount: 500,
coinType: 'ADA',
coinAmount: 800,
blockchain: 'ADA',
walletAddress: 'addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf'
}
});
expect(url.toString()).toBe(fullUrl);
});
test('should generate a correct referral link with mandatory parameters only', async () => {
const baseUrl = 'https://checkout.banxa.com/?';
const fullUrl = baseUrl + 'orderType=sell' + '&' + 'fiatType=USD' + '&' + 'coinType=ADA' + '&' + 'walletAddress=addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf';
const api = {
getBaseUrl: jest.fn(() => Promise.resolve(baseUrl))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
const url = await manager.referralLink.create({
providerId: 'banxa',
queries: {
orderType: 'sell',
fiatType: 'USD',
coinType: 'ADA',
walletAddress: 'addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf'
}
});
expect(url.toString()).toBe(fullUrl);
});
test('should not include undefined optional parameters in the referral link', async () => {
const baseUrl = 'https://checkout.banxa.com/?';
const api = {
getBaseUrl: jest.fn(() => Promise.resolve(baseUrl))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
const url = await manager.referralLink.create({
providerId: 'banxa',
queries: {
orderType: 'sell',
fiatType: 'USD',
coinType: 'ADA',
walletAddress: 'addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf'
}
});
const urlString = url.toString();
expect(urlString).not.toContain('sellMode');
expect(urlString).not.toContain('fiatAmount');
expect(urlString).not.toContain('coinAmount');
expect(urlString).not.toContain('blockchain');
expect(urlString).not.toContain('walletAddressTag');
});
test('should throw an BanxaValidationError when schema is invalid', async () => {
const baseUrl = 'https://checkout.banxa.com/?';
const api = {
getBaseUrl: jest.fn(() => Promise.resolve(baseUrl))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
try {
await manager.referralLink.create({
providerId: 'banxa',
queries: {
// @ts-ignore
fiatType: 'ABC',
// Invalid fiatType
coinType: 'ADA',
walletAddress: 'addr1q9v8dvht2mv847gwarl7r4p49yzys8r7zlep7c8t2hqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquvupf'
}
});
fail('it should crash before');
} catch (e) {
expect(e).toBeInstanceOf(_types.Exchange.Errors.Validation);
}
});
test('should throw an error when ADA walletAddress is not a possible Cardano address', async () => {
const baseUrl = 'https://checkout.banxa.com/?';
const api = {
getBaseUrl: jest.fn(() => Promise.resolve(baseUrl))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
try {
await manager.referralLink.create({
providerId: 'banxa',
// @ts-ignore
queries: {
fiatType: 'USD',
coinType: 'ADA',
walletAddress: 'invalid-cardano-address'
}
});
fail('it should crash before');
} catch (e) {
expect(e).toBeInstanceOf(_types.Exchange.Errors.Validation);
}
});
});
describe('provider', () => {
it('should get the suggested providers', () => {
const baseUrl = 'https://checkout.banxa.com/?';
const api = {
getBaseUrl: jest.fn(() => Promise.resolve(baseUrl))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
const suggested = manager.provider.suggested.byOrderType();
expect(suggested.sell).toBe('encryptus');
expect(suggested.buy).toBe('banxa');
});
it('should list the buy providers', async () => {
const api = {
getProviders: jest.fn(() => Promise.resolve(providers))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
const list = await manager.provider.list.byOrderType('buy');
expect(list).toEqual([[providers.banxa?.id, providers.banxa]]);
});
it('should list the sell providers', async () => {
const api = {
getProviders: jest.fn(() => Promise.resolve(providers))
};
const manager = (0, _manager.exchangeManagerMaker)({
api
});
const list = await manager.provider.list.byOrderType('sell');
expect(list).toEqual([[providers.encryptus?.id, providers.encryptus]]);
});
});
const providers = (0, _immer.freeze)({
banxa: {
id: 'banxa',
name: 'Banxa',
logo: 'RFU',
supportedOrders: {
buy: {
fee: 2,
min: 100000000
}
},
supportUrl: 'https://support.banxa.com/'
},
encryptus: {
id: 'encryptus',
name: 'Encryptus',
logo: 'RFU',
supportedOrders: {
sell: {
fee: 2.5,
min: 1000000
}
},
supportUrl: 'https://support.encryptus.com/'
}
}, true);
exports.providers = providers;
//# sourceMappingURL=manager.test.js.map