UNPKG

@shapeshiftoss/fiosdk

Version:

The Foundation for Interwallet Operability (FIO) is a consortium of leading blockchain wallets, exchanges and payments providers that seeks to accelerate blockchain adoption by reducing the risk, complexity, and inconvenience of sending and receiving cryp

923 lines (781 loc) 31.9 kB
require('mocha') const { expect } = require('chai') const { FIOSDK } = require('../lib/FIOSDK') const { EndPoint } = require('../lib/entities/EndPoint') fetch = require('node-fetch') const fetchJson = async (uri, opts = {}) => { return fetch(uri, opts) } let privateKey, publicKey, privateKey2, publicKey2, testFioAddressName, testFioAddressName2 const mnemonic = 'property follow talent guilt uncover someone gain powder urge slot taxi sketch' const mnemonic2 = 'round work clump little air glue lemon gravity shed charge assault orbit' /** * Urls required */ const baseUrl = '' /** * Keys to transfer funds to be able make all calls with fee */ const faucetPub = ''; const faucetPriv = ''; const fioTokenCode = 'FIO' const fioChainCode = 'FIO' const ethTokenCode = 'ETH' const ethChainCode = 'ETH' const fundAmount = 800 * FIOSDK.SUFUnit const defaultFee = 800 * FIOSDK.SUFUnit const receiveTransferTimout = 5000 let fioSdk, fioSdk2 const generateTestingFioAddress = (customDomain = 'edge') => { return `testing${Date.now()}@${customDomain}` } const generateTestingFioDomain = () => { return `testing-domain-${Date.now()}` } const generateObtId = () => { return `${Date.now()}` } const timeout = async (ms) => { await new Promise(resolve => { setTimeout(resolve, ms) }) } before(async () => { let privateKeyRes = await FIOSDK.createPrivateKeyMnemonic(mnemonic) privateKey = privateKeyRes.fioKey let publicKeyRes = FIOSDK.derivedPublicKey(privateKey) publicKey = publicKeyRes.publicKey fioSdk = new FIOSDK( privateKey, publicKey, baseUrl, fetchJson ) testFioAddressName = generateTestingFioAddress() await timeout(1000) privateKeyRes = await FIOSDK.createPrivateKeyMnemonic(mnemonic2) privateKey2 = privateKeyRes.fioKey publicKeyRes = FIOSDK.derivedPublicKey(privateKey2) publicKey2 = publicKeyRes.publicKey fioSdk2 = new FIOSDK( privateKey2, publicKey2, baseUrl, fetchJson ) testFioAddressName2 = generateTestingFioAddress() const fioSdkFaucet = new FIOSDK( faucetPriv, faucetPub, baseUrl, fetchJson ) await fioSdkFaucet.transferTokens(publicKey, fundAmount * 4, defaultFee) await fioSdkFaucet.transferTokens(publicKey2, fundAmount, defaultFee) await timeout(receiveTransferTimout) try { const isAvailableResult = await fioSdk.genericAction('isAvailable', { fioName: testFioAddressName }) if (!isAvailableResult.is_registered) { await fioSdk.genericAction('registerFioAddress', { fioAddress: testFioAddressName, maxFee: defaultFee }) } const isAvailableResult2 = await fioSdk2.genericAction('isAvailable', { fioName: testFioAddressName2 }) if (!isAvailableResult2.is_registered) { await fioSdk2.genericAction('registerFioAddress', { fioAddress: testFioAddressName2, maxFee: defaultFee }) } } catch (e) { console.log(e); } }) describe('Testing generic actions', () => { const newFioDomain = generateTestingFioDomain() const newFioAddress = generateTestingFioAddress(newFioDomain) const pubKeyForTransfer = FIOSDK.derivedPublicKey('5HvaoRV9QrbbxhLh6zZHqTzesFEG5vusVJGbUazFi5xQvKMMt6U') it(`FIO Key Generation Testing`, async () => { const testMnemonic = 'valley alien library bread worry brother bundle hammer loyal barely dune brave' const privateKeyRes = await FIOSDK.createPrivateKeyMnemonic(testMnemonic) expect(privateKeyRes.fioKey).to.equal('5Kbb37EAqQgZ9vWUHoPiC2uXYhyGSFNbL6oiDp24Ea1ADxV1qnu') const publicKeyRes = FIOSDK.derivedPublicKey(privateKeyRes.fioKey) expect(publicKeyRes.publicKey).to.equal('FIO5kJKNHwctcfUM5XZyiWSqSTM5HTzznJP9F3ZdbhaQAHEVq575o') }) it(`FIO SUF Utilities - amountToSUF`, async () => { const sufa = FIOSDK.amountToSUF (100) expect(sufa).to.equal(100000000000) const sufb = FIOSDK.amountToSUF (500) expect(sufb).to.equal(500000000000) const sufc = FIOSDK.amountToSUF (506) expect(sufc).to.equal(506000000000) const sufd = FIOSDK.amountToSUF (1) expect(sufd).to.equal(1000000000) const sufe = FIOSDK.amountToSUF (2) expect(sufe).to.equal(2000000000) const suff = FIOSDK.amountToSUF (2.568) expect(suff).to.equal(2568000000) const sufg = FIOSDK.amountToSUF (2.123) expect(sufg).to.equal(2123000000) }) it(`FIO SUF Utilities - SUFToAmount`, async () => { const sufa = FIOSDK.SUFToAmount (100000000000) expect(sufa).to.equal(100) const sufb = FIOSDK.SUFToAmount (500000000000) expect(sufb).to.equal(500) const sufc = FIOSDK.SUFToAmount (506000000000) expect(sufc).to.equal(506) const sufd = FIOSDK.SUFToAmount (1000000000) expect(sufd).to.equal(1) const sufe = FIOSDK.SUFToAmount (2000000000) expect(sufe).to.equal(2) const suff = FIOSDK.SUFToAmount (2568000000) expect(suff).to.equal(2.568) const sufg = FIOSDK.SUFToAmount (2123000000) expect(sufg).to.equal(2.123) }) it(`Validation methods`, async () => { try { FIOSDK.isChainCodeValid('$%34') } catch (e) { expect(e.list[0].message).to.equal('chainCode must match /^[a-z0-9]+$/i.') } try { FIOSDK.isTokenCodeValid('') } catch (e) { expect(e.list[0].message).to.equal('tokenCode is required.') } try { FIOSDK.isFioAddressValid('f') } catch (e) { expect(e.list[0].message).to.equal('fioAddress must have a length between 3 and 64.') } try { FIOSDK.isFioDomainValid('$%FG%') } catch (e) { expect(e.list[0].message).to.equal('fioDomain must match /^[a-z0-9\\-]+$/i.') } try { FIOSDK.isFioPublicKeyValid('dfsd') } catch (e) { console.log(e); expect(e.list[0].message).to.equal('fioPublicKey must match /^FIO\\w+$/.') } try { FIOSDK.isPublicAddressValid('') } catch (e) { expect(e.list[0].message).to.equal('publicAddress is required.') } const chainCodeIsValid = FIOSDK.isChainCodeValid('FIO') expect(chainCodeIsValid).to.equal(true) const tokenCodeIsValid = FIOSDK.isTokenCodeValid('FIO') expect(tokenCodeIsValid).to.equal(true) const singleDigitFioAddressIsValid = FIOSDK.isFioAddressValid('f@2') expect(singleDigitFioAddressIsValid).to.equal(true) const fioAddressIsValid = FIOSDK.isFioAddressValid(newFioAddress) expect(fioAddressIsValid).to.equal(true) const fioDomainIsValid = FIOSDK.isFioDomainValid(newFioDomain) expect(fioDomainIsValid).to.equal(true) const privateKeyIsValid = FIOSDK.isFioPublicKeyValid(publicKey) expect(privateKeyIsValid).to.equal(true) const publicKeyIsValid = FIOSDK.isPublicAddressValid(publicKey) expect(publicKeyIsValid).to.equal(true) }) it(`Getting fio public key`, async () => { const result = await fioSdk.genericAction('getFioPublicKey', {}) expect(result).to.equal(publicKey) }) it(`getFioBalance`, async () => { const result = await fioSdk.genericAction('getFioBalance', {}) expect(result).to.have.all.keys('balance') expect(result.balance).to.be.a('number') }) it(`Register fio domain`, async () => { const result = await fioSdk.genericAction('registerFioDomain', { fioDomain: newFioDomain, maxFee: defaultFee }) expect(result).to.have.all.keys('status', 'expiration', 'fee_collected') expect(result.status).to.be.a('string') expect(result.expiration).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`Renew fio domain`, async () => { const result = await fioSdk.genericAction('renewFioDomain', { fioDomain: newFioDomain, maxFee: defaultFee }) expect(result).to.have.all.keys('status', 'expiration', 'fee_collected') expect(result.status).to.be.a('string') expect(result.expiration).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`setFioDomainVisibility true`, async () => { const result = await fioSdk.genericAction('setFioDomainVisibility', { fioDomain: newFioDomain, isPublic: true, maxFee: defaultFee, technologyProviderId: '' }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`Register fio address`, async () => { const result = await fioSdk.genericAction('registerFioAddress', { fioAddress: newFioAddress, maxFee: defaultFee }) expect(result).to.have.all.keys('status', 'expiration', 'fee_collected') expect(result.status).to.be.a('string') expect(result.expiration).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`Register owner fio address`, async () => { const newFioAddress2 = generateTestingFioAddress(newFioDomain) const result = await fioSdk.genericAction('registerFioAddress', { fioAddress: newFioAddress2, ownerPublicKey: publicKey2, maxFee: defaultFee }) expect(result).to.have.all.keys('status', 'expiration', 'fee_collected') expect(result.status).to.be.a('string') expect(result.expiration).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`Renew fio address`, async () => { const result = await fioSdk.genericAction('renewFioAddress', { fioAddress: newFioAddress, maxFee: defaultFee }) expect(result).to.have.all.keys('status', 'expiration', 'fee_collected') expect(result.status).to.be.a('string') expect(result.expiration).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`Push Transaction - renewaddress`, async () => { await timeout(2000) const result = await fioSdk.genericAction('pushTransaction', { action: 'renewaddress', account: 'fio.address', data: { fio_address: newFioAddress, max_fee: defaultFee, tpid: '' } }) expect(result).to.have.all.keys('status', 'expiration', 'fee_collected') expect(result.status).to.be.a('string') expect(result.expiration).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`getFioNames`, async () => { const result = await fioSdk.genericAction('getFioNames', { fioPublicKey: publicKey }) expect(result).to.have.all.keys('fio_domains', 'fio_addresses') expect(result.fio_domains).to.be.a('array') expect(result.fio_addresses).to.be.a('array') }) it(`getFioDomains`, async () => { try{ const result = await fioSdk.genericAction('getFioDomains', { fioPublicKey: fioSdk.publicKey }) expect(result).to.have.all.keys('fio_domains','more') expect(result.fio_domains).to.be.a('array') } catch (e) { console.log(e); } }) it(`setFioDomainVisibility false`, async () => { const result = await fioSdk.genericAction('setFioDomainVisibility', { fioDomain: newFioDomain, isPublic: false, maxFee: defaultFee, technologyProviderId: '' }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`setFioDomainVisibility true`, async () => { const result = await fioSdk.genericAction('setFioDomainVisibility', { fioDomain: newFioDomain, isPublic: true, maxFee: defaultFee, technologyProviderId: '' }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`getFee for transferFioDomain`, async () => { const result = await fioSdk.genericAction('getFeeForTransferFioDomain', { fioAddress: newFioAddress }) expect(result).to.have.all.keys('fee') expect(result.fee).to.be.a('number') }) it(`Transfer fio domain`, async () => { const result = await fioSdk.genericAction('transferFioDomain', { fioDomain: newFioDomain, newOwnerKey: pubKeyForTransfer, maxFee: defaultFee }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`getFee for addPublicAddress`, async () => { const result = await fioSdk.genericAction('getFeeForAddPublicAddress', { fioAddress: newFioAddress }) expect(result).to.have.all.keys('fee') expect(result.fee).to.be.a('number') }) it(`Add public address`, async () => { const result = await fioSdk.genericAction('addPublicAddress', { fioAddress: newFioAddress, chainCode: fioChainCode, tokenCode: fioTokenCode, publicAddress: '1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs', maxFee: defaultFee, technologyProviderId: '' }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`Add public addresses`, async () => { const result = await fioSdk.genericAction('addPublicAddresses', { fioAddress: newFioAddress, publicAddresses: [ { chain_code: ethChainCode, token_code: ethTokenCode, public_address: 'xxxxxxyyyyyyzzzzzz', }, { chain_code: fioChainCode, token_code: fioTokenCode, public_address: publicKey, } ], maxFee: defaultFee, technologyProviderId: '' }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`getFee for removePublicAddresses`, async () => { const result = await fioSdk.genericAction('getFeeForRemovePublicAddresses', { fioAddress: newFioAddress }) expect(result).to.have.all.keys('fee') expect(result.fee).to.be.a('number') }) it(`Remove public addresses`, async () => { const result = await fioSdk.genericAction('removePublicAddresses', { fioAddress: newFioAddress, publicAddresses: [ { chain_code: ethChainCode, token_code: ethTokenCode, public_address: 'xxxxxxyyyyyyzzzzzz', } ], maxFee: defaultFee, technologyProviderId: '' }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`getFee for removeAllPublicAddresses`, async () => { const result = await fioSdk.genericAction('getFeeForRemoveAllPublicAddresses', { fioAddress: newFioAddress }) expect(result).to.have.all.keys('fee') expect(result.fee).to.be.a('number') }) it(`Remove all public addresses`, async () => { await fioSdk.genericAction('addPublicAddresses', { fioAddress: newFioAddress, publicAddresses: [ { chain_code: ethChainCode, token_code: ethTokenCode, public_address: 'xxxxxxyyyyyyzzzzzz1', } ], maxFee: defaultFee, technologyProviderId: '' }) const result = await fioSdk.genericAction('removeAllPublicAddresses', { fioAddress: newFioAddress, maxFee: defaultFee, technologyProviderId: '' }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`isAvailable true`, async () => { const result = await fioSdk.genericAction('isAvailable', { fioName: generateTestingFioAddress(), }) expect(result.is_registered).to.equal(0) }) it(`isAvailable false`, async () => { const result = await fioSdk.genericAction('isAvailable', { fioName: testFioAddressName }) expect(result.is_registered).to.equal(1) }) it(`getFioBalance for custom fioPublicKey`, async () => { const result = await fioSdk.genericAction('getFioBalance', { fioPublicKey: publicKey2 }) expect(result).to.have.all.keys('balance') expect(result.balance).to.be.a('number') }) it(`getFioNames`, async () => { const result = await fioSdk.genericAction('getFioNames', { fioPublicKey: publicKey }) expect(result).to.have.all.keys('fio_domains', 'fio_addresses') expect(result.fio_domains).to.be.a('array') expect(result.fio_addresses).to.be.a('array') }) it(`getPublicAddress`, async () => { const result = await fioSdk.genericAction('getPublicAddress', { fioAddress: newFioAddress, chainCode: fioChainCode, tokenCode: fioTokenCode }) expect(result.public_address).to.be.a('string') }) it(`getFee`, async () => { const result = await fioSdk.genericAction('getFee', { endPoint: 'register_fio_address', fioAddress: '' }) expect(result).to.have.all.keys('fee') expect(result.fee).to.be.a('number') }) it(`getMultiplier`, async () => { const result = await fioSdk.genericAction('getMultiplier', {}) expect(result).to.be.a('number') }) }) describe('Request funds, approve and send', () => { const fundsAmount = 3 let requestId const memo = 'testing fund request' it(`getFee for requestFunds`, async () => { const result = await fioSdk.genericAction('getFeeForNewFundsRequest', { payeeFioAddress: testFioAddressName2 }) expect(result).to.have.all.keys('fee') expect(result.fee).to.be.a('number') }) it(`requestFunds`, async () => { const result = await fioSdk2.genericAction('requestFunds', { payerFioAddress: testFioAddressName, payeeFioAddress: testFioAddressName2, payeePublicAddress: testFioAddressName2, amount: fundsAmount, chainCode: fioChainCode, tokenCode: fioTokenCode, memo, maxFee: defaultFee, }) requestId = result.fio_request_id expect(result).to.have.all.keys('fio_request_id', 'status', 'fee_collected') expect(result.fio_request_id).to.be.a('number') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`getPendingFioRequests`, async () => { await timeout(4000) const result = await fioSdk.genericAction('getPendingFioRequests', {}) expect(result).to.have.all.keys('requests', 'more') expect(result.requests).to.be.a('array') expect(result.more).to.be.a('number') const pendingReq = result.requests.find(pr => parseInt(pr.fio_request_id) === parseInt(requestId)) expect(pendingReq).to.have.all.keys('fio_request_id', 'payer_fio_address', 'payee_fio_address', 'payee_fio_public_key', 'payer_fio_public_key', 'time_stamp', 'content') expect(pendingReq.fio_request_id).to.be.a('number') expect(pendingReq.fio_request_id).to.equal(requestId) expect(pendingReq.payer_fio_address).to.be.a('string') expect(pendingReq.payer_fio_address).to.equal(testFioAddressName) expect(pendingReq.payee_fio_address).to.be.a('string') expect(pendingReq.payee_fio_address).to.equal(testFioAddressName2) }) it(`recordObtData`, async () => { const result = await fioSdk.genericAction('recordObtData', { fioRequestId: requestId, payerFioAddress: testFioAddressName, payeeFioAddress: testFioAddressName2, payerTokenPublicAddress: publicKey, payeeTokenPublicAddress: publicKey2, amount: fundsAmount, chainCode: fioChainCode, tokenCode: fioTokenCode, status: 'sent_to_blockchain', obtId: '', maxFee: defaultFee, }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`getSentFioRequests`, async () => { const result = await fioSdk2.genericAction('getSentFioRequests', {}) expect(result).to.have.all.keys('requests', 'more') expect(result.requests).to.be.a('array') expect(result.more).to.be.a('number') const pendingReq = result.requests.find(pr => parseInt(pr.fio_request_id) === parseInt(requestId)) expect(pendingReq).to.have.all.keys('fio_request_id', 'payer_fio_address', 'payee_fio_address', 'payee_fio_public_key', 'payer_fio_public_key', 'status', 'time_stamp', 'content') expect(pendingReq.fio_request_id).to.be.a('number') expect(pendingReq.fio_request_id).to.equal(requestId) expect(pendingReq.payer_fio_address).to.be.a('string') expect(pendingReq.payer_fio_address).to.equal(testFioAddressName) expect(pendingReq.payee_fio_address).to.be.a('string') expect(pendingReq.payee_fio_address).to.equal(testFioAddressName2) }) it(`Payer getObtData`, async () => { await timeout(10000) const result = await fioSdk.genericAction('getObtData', {}) expect(result).to.have.all.keys('obt_data_records', 'more') expect(result.obt_data_records).to.be.a('array') expect(result.more).to.be.a('number') const obtData = result.obt_data_records.find(pr => parseInt(pr.fio_request_id) === parseInt(requestId)) expect(obtData).to.have.all.keys('fio_request_id', 'payer_fio_address', 'payee_fio_address', 'payee_fio_public_key', 'payer_fio_public_key', 'status', 'time_stamp', 'content') expect(obtData.fio_request_id).to.be.a('number') expect(obtData.fio_request_id).to.equal(requestId) expect(obtData.payer_fio_address).to.be.a('string') expect(obtData.payer_fio_address).to.equal(testFioAddressName) expect(obtData.payee_fio_address).to.be.a('string') expect(obtData.payee_fio_address).to.equal(testFioAddressName2) }) it(`Payee getObtData`, async () => { const result = await fioSdk2.genericAction('getObtData', {}) expect(result).to.have.all.keys('obt_data_records', 'more') expect(result.obt_data_records).to.be.a('array') expect(result.more).to.be.a('number') const obtData = result.obt_data_records.find(pr => parseInt(pr.fio_request_id) === parseInt(requestId)) expect(obtData).to.have.all.keys('fio_request_id', 'payer_fio_address', 'payee_fio_address', 'payee_fio_public_key', 'payer_fio_public_key', 'status', 'time_stamp', 'content') expect(obtData.fio_request_id).to.be.a('number') expect(obtData.fio_request_id).to.equal(requestId) expect(obtData.payer_fio_address).to.be.a('string') expect(obtData.payer_fio_address).to.equal(testFioAddressName) expect(obtData.payee_fio_address).to.be.a('string') expect(obtData.payee_fio_address).to.equal(testFioAddressName2) }) }) describe('Request funds, cancel funds request', () => { const fundsAmount = 3 let requestId const memo = 'testing fund request' it(`requestFunds`, async () => { const result = await fioSdk2.genericAction('requestFunds', { payerFioAddress: testFioAddressName, payeeFioAddress: testFioAddressName2, payeePublicAddress: testFioAddressName2, amount: fundsAmount, chainCode: fioChainCode, tokenCode: fioTokenCode, memo, maxFee: defaultFee, }) requestId = result.fio_request_id expect(result).to.have.all.keys('fio_request_id', 'status', 'fee_collected') expect(result.fio_request_id).to.be.a('number') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`cancel request`, async () => { try{ const result = await fioSdk2.genericAction('cancelFundsRequest', { fioRequestId: requestId, maxFee: defaultFee, tpid: '' }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') } catch (e) { console.log(e); } }) it(`getCancelledFioRequests`, async () => { try{ await timeout(4000) const result = await fioSdk2.genericAction('getCancelledFioRequests', {}) expect(result).to.have.all.keys('requests', 'more') expect(result.requests).to.be.a('array') expect(result.more).to.be.a('number') const pendingReq = result.requests.find(pr => parseInt(pr.fio_request_id) === parseInt(requestId)) expect(pendingReq).to.have.all.keys('fio_request_id', 'payer_fio_address', 'payee_fio_address', 'payee_fio_public_key', 'payer_fio_public_key', 'time_stamp', 'content', 'status') expect(pendingReq.fio_request_id).to.be.a('number') expect(pendingReq.fio_request_id).to.equal(requestId) expect(pendingReq.payer_fio_address).to.be.a('string') expect(pendingReq.payer_fio_address).to.equal(testFioAddressName) expect(pendingReq.payee_fio_address).to.be.a('string') expect(pendingReq.payee_fio_address).to.equal(testFioAddressName2) } catch (e) { console.log(e); } }) }) describe('Request funds, reject', () => { const fundsAmount = 4 let requestId const memo = 'testing fund request' it(`requestFunds`, async () => { const result = await fioSdk2.genericAction('requestFunds', { payerFioAddress: testFioAddressName, payeeFioAddress: testFioAddressName2, payeePublicAddress: testFioAddressName2, amount: fundsAmount, chainCode: fioChainCode, tokenCode: fioTokenCode, memo, maxFee: defaultFee, }) requestId = result.fio_request_id expect(result).to.have.all.keys('fio_request_id', 'status', 'fee_collected') expect(result.fio_request_id).to.be.a('number') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`getPendingFioRequests`, async () => { await timeout(4000) const result = await fioSdk.genericAction('getPendingFioRequests', {}) expect(result).to.have.all.keys('requests', 'more') expect(result.requests).to.be.a('array') expect(result.more).to.be.a('number') const pendingReq = result.requests.find(pr => parseInt(pr.fio_request_id) === parseInt(requestId)) expect(pendingReq).to.have.all.keys('fio_request_id', 'payer_fio_address', 'payee_fio_address', 'payee_fio_public_key', 'payer_fio_public_key', 'time_stamp', 'content') expect(pendingReq.fio_request_id).to.be.a('number') expect(pendingReq.fio_request_id).to.equal(requestId) expect(pendingReq.payer_fio_address).to.be.a('string') expect(pendingReq.payer_fio_address).to.equal(testFioAddressName) expect(pendingReq.payee_fio_address).to.be.a('string') expect(pendingReq.payee_fio_address).to.equal(testFioAddressName2) }) it(`getFee for rejectFundsRequest`, async () => { const result = await fioSdk.genericAction('getFeeForRejectFundsRequest', { payerFioAddress: testFioAddressName2 }) expect(result).to.have.all.keys('fee') expect(result.fee).to.be.a('number') }) it(`rejectFundsRequest`, async () => { const result = await fioSdk.genericAction('rejectFundsRequest', { fioRequestId: requestId, maxFee: defaultFee, }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) }) describe('Transfer tokens', () => { const fundsAmount = FIOSDK.SUFUnit let fioBalance = 0 let fioBalanceAfter = 0 it(`Check balance before transfer`, async () => { const result = await fioSdk2.genericAction('getFioBalance', {}) fioBalance = result.balance }) it(`Transfer tokens`, async () => { const result = await fioSdk.genericAction('transferTokens', { payeeFioPublicKey: publicKey2, amount: fundsAmount, maxFee: defaultFee, }) expect(result).to.have.all.keys('status', 'fee_collected', 'transaction_id', 'block_num') expect(result.status).to.be.a('string') expect(result.transaction_id).to.be.a('string') expect(result.block_num).to.be.a('number') expect(result.fee_collected).to.be.a('number') }) it(`Check balance and balance change`, async () => { await timeout(10000) const result = await fioSdk2.genericAction('getFioBalance', {}) fioBalanceAfter = result.balance expect(fundsAmount).to.equal(fioBalanceAfter - fioBalance) }) }) describe('Record obt data, check', () => { const obtId = generateObtId() const fundsAmount = 4.5 it(`getFee for recordObtData`, async () => { const result = await fioSdk.genericAction('getFeeForRecordObtData', { payerFioAddress: testFioAddressName }) expect(result).to.have.all.keys('fee') expect(result.fee).to.be.a('number') }) it(`recordObtData`, async () => { const result = await fioSdk.genericAction('recordObtData', { fioRequestId: '', payerFioAddress: testFioAddressName, payeeFioAddress: testFioAddressName2, payerTokenPublicAddress: publicKey, payeeTokenPublicAddress: publicKey2, amount: fundsAmount, chainCode: fioChainCode, tokenCode: fioTokenCode, status: 'sent_to_blockchain', obtId, maxFee: defaultFee, }) expect(result).to.have.all.keys('status', 'fee_collected') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') }) it(`Payer getObtData`, async () => { await timeout(4000) const result = await fioSdk.genericAction('getObtData', { tokenCode: fioTokenCode }) expect(result).to.have.all.keys('obt_data_records', 'more') expect(result.obt_data_records).to.be.a('array') expect(result.more).to.be.a('number') const obtData = result.obt_data_records.find(pr => pr.content.obt_id === obtId) expect(obtData).to.have.all.keys('fio_request_id', 'payer_fio_address', 'payee_fio_address', 'payee_fio_public_key', 'payer_fio_public_key', 'status', 'time_stamp', 'content') expect(obtData.content.obt_id).to.be.a('string') expect(obtData.content.obt_id).to.equal(obtId) expect(obtData.payer_fio_address).to.be.a('string') expect(obtData.payer_fio_address).to.equal(testFioAddressName) expect(obtData.payee_fio_address).to.be.a('string') expect(obtData.payee_fio_address).to.equal(testFioAddressName2) }) it(`Payee getObtData`, async () => { const result = await fioSdk2.genericAction('getObtData', { tokenCode: fioTokenCode }) expect(result).to.have.all.keys('obt_data_records', 'more') expect(result.obt_data_records).to.be.a('array') expect(result.more).to.be.a('number') const obtData = result.obt_data_records.find(pr => pr.content.obt_id === obtId) expect(obtData).to.have.all.keys('fio_request_id', 'payer_fio_address', 'payee_fio_address', 'payee_fio_public_key', 'payer_fio_public_key', 'status', 'time_stamp', 'content') expect(obtData.content.obt_id).to.be.a('string') expect(obtData.content.obt_id).to.equal(obtId) expect(obtData.payer_fio_address).to.be.a('string') expect(obtData.payer_fio_address).to.equal(testFioAddressName) expect(obtData.payee_fio_address).to.be.a('string') expect(obtData.payee_fio_address).to.equal(testFioAddressName2) }) }) describe('Check prepared transaction', () => { it(`requestFunds prepared transaction`, async () => { fioSdk2.setSignedTrxReturnOption(true) const preparedTrx = await fioSdk2.genericAction('requestFunds', { payerFioAddress: testFioAddressName, payeeFioAddress: testFioAddressName2, payeePublicAddress: testFioAddressName2, amount: 200000, chainCode: fioChainCode, tokenCode: fioTokenCode, memo: 'prepared transaction', maxFee: defaultFee, }) const result = await fioSdk2.executePreparedTrx(EndPoint.newFundsRequest, preparedTrx) expect(result).to.have.all.keys('transaction_id', 'block_num', 'fio_request_id', 'status', 'fee_collected') expect(result.transaction_id).to.be.a('string') expect(result.block_num).to.be.a('number') expect(result.fio_request_id).to.be.a('number') expect(result.status).to.be.a('string') expect(result.fee_collected).to.be.a('number') fioSdk2.setSignedTrxReturnOption(false) }) })