@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
JavaScript
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)
})
})