@fioprotocol/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
148 lines (134 loc) • 4.2 kB
text/typescript
import { expect } from 'chai';
import { Account, Action, FIOSDK, TransactionResponse } from '../../src/FIOSDK';
import { defaultFee } from '../constants';
export const AccountPermissionsTests = ({
fioSdk,
fioSdk2,
publicKey,
publicKey2,
testFioAddressName,
testFioDomainName,
}: {
fioSdk: FIOSDK,
fioSdk2: FIOSDK,
publicKey: string,
publicKey2: string,
testFioAddressName: string,
testFioDomainName: string,
}) => describe('Test addaddress on account with permissions', () => {
let account1: string
let account2: string
it(`gen account names`, async () => {
account1 = FIOSDK.accountHash(publicKey).accountnm
account2 = FIOSDK.accountHash(publicKey2).accountnm
})
const permissionName = 'addmyadd' // Must be < 12 chars
it(`user1 creates addmyadd permission and assigns to user2`, async () => {
try {
const authorizationObject = {
accounts: [
{
permission: {
actor: account2,
permission: 'active',
},
weight: 1,
},
],
keys: [],
threshold: 1,
waits: [],
}
const result = await fioSdk.genericAction('pushTransaction', {
account: Account.eosio,
action: Action.updateAuth,
data: {
account: account1,
actor: account1,
auth: authorizationObject,
max_fee: defaultFee,
parent: 'active',
permission: permissionName,
},
}) as TransactionResponse
expect(result).to.have.all.keys('transaction_id', 'block_num', 'block_time')
expect(result.block_num).to.be.a('number')
expect(result.transaction_id).to.be.a('string')
} catch (e) {
console.log('Error', e)
}
})
it(`user1 links regmyadd permission to regaddress`, async () => {
try {
const result = await fioSdk.genericAction('pushTransaction', {
account: Account.eosio,
action: Action.linkAuth,
data: {
// the owner of the permission to be linked, this account will sign the transaction
account: account1,
actor: account1,
code: 'fio.address', // the contract owner of the action to be linked
max_fee: defaultFee, // the action to be linked
requirement: permissionName, // the name of the custom permission (created by updateauth)
type: 'addaddress',
},
}) as TransactionResponse
expect(result).to.have.all.keys(
'transaction_id',
'block_num',
'block_time',
)
expect(result.block_num).to.be.a('number')
expect(result.transaction_id).to.be.a('string')
} catch (e) {
// the error we get here is due to using the same account every time we run the test,
// we get an error "same as previous" from linkauth, this is ok!
// console.log(e);
}
})
it(`renewdomain for user1`, async () => {
try {
const result = await fioSdk.genericAction('pushTransaction', {
account: Account.address,
action: Action.renewDomain,
authPermission: 'active',
data: {
actor: account1,
fio_domain: testFioDomainName,
max_fee: defaultFee,
tpid: '',
},
}) as TransactionResponse
expect(result.status).to.equal('OK')
} catch (e) {
console.log(e)
}
})
it(`addaddress as user2`, async () => {
try {
const result = await fioSdk2.genericAction('pushTransaction', {
account: Account.address,
action: Action.addPublicAddresses,
authPermission: permissionName,
data: {
actor: account1,
fio_address: testFioAddressName,
max_fee: defaultFee,
public_addresses: [
{
chain_code: 'BCH',
public_address:
'bitcoincash:qzf8zha74ahdh9j0xnwlffdn0zuyaslx3c90q7n9g9',
token_code: 'BCH',
},
],
tpid: '',
},
signingAccount: account2,
}) as TransactionResponse
expect(result.status).to.equal('OK')
} catch (e) {
console.log(e)
}
})
})