solana/web3.js/test/connection.test.js

362 lines
7.3 KiB
JavaScript
Raw Normal View History

2018-08-23 10:52:48 -07:00
// @flow
2018-08-24 10:39:51 -07:00
2018-08-23 10:52:48 -07:00
import {Account} from '../src/account';
2018-09-14 08:27:40 -07:00
import {Connection} from '../src/connection';
2018-09-20 10:10:46 -07:00
import {SystemProgram} from '../src/system-program';
2018-08-24 10:39:51 -07:00
import {mockRpc} from './__mocks__/node-fetch';
2018-10-06 11:23:18 -07:00
import {url} from './url.js';
2018-08-23 10:52:48 -07:00
2018-08-24 11:12:48 -07:00
const errorMessage = 'Invalid request';
const errorResponse = {
error: {
message: errorMessage,
},
result: undefined,
};
2018-09-20 15:08:52 -07:00
test('get account info - error', () => {
const account = new Account();
const connection = new Connection(url);
mockRpc.push([
url,
{
method: 'getAccountInfo',
2018-09-30 18:42:45 -07:00
params: [account.publicKey.toBase58()],
2018-09-20 15:08:52 -07:00
},
errorResponse,
]);
expect(connection.getAccountInfo(account.publicKey))
.rejects.toThrow(errorMessage);
});
2018-08-24 10:39:51 -07:00
test('get balance', async () => {
2018-08-23 10:52:48 -07:00
const account = new Account();
const connection = new Connection(url);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'getBalance',
2018-09-30 18:42:45 -07:00
params: [account.publicKey.toBase58()],
2018-08-24 10:39:51 -07:00
},
{
error: null,
result: 0,
}
]);
2018-08-23 10:52:48 -07:00
const balance = await connection.getBalance(account.publicKey);
expect(balance).toBeGreaterThanOrEqual(0);
});
2018-08-24 11:12:48 -07:00
test('confirm transaction - error', () => {
2018-08-23 10:52:48 -07:00
const connection = new Connection(url);
2018-08-24 10:39:51 -07:00
const badTransactionSignature = 'bad transaction signature';
mockRpc.push([
url,
{
method: 'confirmTransaction',
params: [badTransactionSignature],
},
2018-08-24 11:12:48 -07:00
errorResponse,
2018-08-24 10:39:51 -07:00
]
);
expect(connection.confirmTransaction(badTransactionSignature))
.rejects.toThrow(errorMessage);
2018-09-26 19:16:17 -07:00
mockRpc.push([
url,
{
method: 'getSignatureStatus',
params: [badTransactionSignature],
},
errorResponse,
]
);
expect(connection.getSignatureStatus(badTransactionSignature))
.rejects.toThrow(errorMessage);
2018-08-23 10:52:48 -07:00
});
2018-09-26 19:16:17 -07:00
2018-08-24 10:39:51 -07:00
test('get transaction count', async () => {
2018-08-23 10:52:48 -07:00
const connection = new Connection(url);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'getTransactionCount',
params: [],
},
{
error: null,
result: 1000000,
}
]
);
2018-08-23 10:52:48 -07:00
const count = await connection.getTransactionCount();
expect(count).toBeGreaterThanOrEqual(0);
});
2018-08-24 10:39:51 -07:00
test('get last Id', async () => {
2018-08-23 10:52:48 -07:00
const connection = new Connection(url);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'getLastId',
params: [],
},
{
error: null,
result: '2BjEqiiT43J6XskiHdz7aoocjPeWkCPiKD72SiFQsrA2',
2018-08-24 10:39:51 -07:00
}
]
);
2018-08-23 10:52:48 -07:00
const lastId = await connection.getLastId();
expect(lastId.length).toBeGreaterThanOrEqual(43);
});
2018-08-24 10:39:51 -07:00
test('get finality', async () => {
2018-08-23 10:52:48 -07:00
const connection = new Connection(url);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'getFinality',
params: [],
},
{
error: null,
result: 123,
}
]
);
2018-08-23 10:52:48 -07:00
const finality = await connection.getFinality();
expect(finality).toBeGreaterThanOrEqual(0);
});
2018-08-24 10:39:51 -07:00
test('request airdrop', async () => {
2018-08-23 16:39:52 -07:00
const account = new Account();
const connection = new Connection(url);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'requestAirdrop',
2018-09-30 18:42:45 -07:00
params: [account.publicKey.toBase58(), 40],
2018-08-24 10:39:51 -07:00
},
{
error: null,
2018-09-12 17:41:20 -07:00
result: '1WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk',
2018-08-24 10:39:51 -07:00
}
]);
mockRpc.push([
url,
{
method: 'requestAirdrop',
2018-09-30 18:42:45 -07:00
params: [account.publicKey.toBase58(), 2],
2018-08-24 10:39:51 -07:00
},
{
error: null,
2018-09-12 17:41:20 -07:00
result: '2WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk',
2018-08-24 10:39:51 -07:00
}
2018-08-23 16:39:52 -07:00
]);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'getBalance',
2018-09-30 18:42:45 -07:00
params: [account.publicKey.toBase58()],
2018-08-24 10:39:51 -07:00
},
{
error: null,
result: 42,
}
]);
await connection.requestAirdrop(account.publicKey, 40);
await connection.requestAirdrop(account.publicKey, 2);
2018-08-23 16:39:52 -07:00
const balance = await connection.getBalance(account.publicKey);
expect(balance).toBe(42);
2018-09-20 15:08:52 -07:00
mockRpc.push([
url,
{
method: 'getAccountInfo',
2018-09-30 18:42:45 -07:00
params: [account.publicKey.toBase58()],
2018-09-20 15:08:52 -07:00
},
{
error: null,
result: {
2018-09-24 19:17:59 -07:00
program_id: [
2018-09-20 15:08:52 -07:00
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
],
tokens: 42,
userdata: [],
}
}
]);
const accountInfo = await connection.getAccountInfo(account.publicKey);
expect(accountInfo.tokens).toBe(42);
expect(accountInfo.userdata).toHaveLength(0);
2018-09-30 18:42:45 -07:00
expect(accountInfo.programId).toEqual(SystemProgram.programId);
2018-08-24 11:12:48 -07:00
});
test('transaction', async () => {
const accountFrom = new Account();
const accountTo = new Account();
const connection = new Connection(url);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'requestAirdrop',
2018-09-30 18:42:45 -07:00
params: [accountFrom.publicKey.toBase58(), 12],
2018-08-24 10:39:51 -07:00
},
{
error: null,
2018-09-12 17:41:20 -07:00
result: '0WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk',
}
2018-08-24 10:39:51 -07:00
]);
mockRpc.push([
url,
{
method: 'getBalance',
2018-09-30 18:42:45 -07:00
params: [accountFrom.publicKey.toBase58()],
},
{
error: null,
result: 12,
}
]);
await connection.requestAirdrop(accountFrom.publicKey, 12);
expect(await connection.getBalance(accountFrom.publicKey)).toBe(12);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'requestAirdrop',
2018-09-30 18:42:45 -07:00
params: [accountTo.publicKey.toBase58(), 21],
},
{
error: null,
2018-09-12 17:41:20 -07:00
result: '8WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk',
}
]);
mockRpc.push([
url,
{
method: 'getBalance',
2018-09-30 18:42:45 -07:00
params: [accountTo.publicKey.toBase58()],
},
{
error: null,
result: 21,
}
]);
await connection.requestAirdrop(accountTo.publicKey, 21);
expect(await connection.getBalance(accountTo.publicKey)).toBe(21);
2018-08-24 10:39:51 -07:00
mockRpc.push([
url,
{
method: 'getLastId',
params: [],
},
{
error: null,
result: '2BjEqiiT43J6XskiHdz7aoocjPeWkCPiKD72SiFQsrA2',
}
]
);
mockRpc.push([
url,
{
method: 'sendTransaction',
},
{
error: null,
result: '3WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk',
}
]
);
2018-09-14 08:27:40 -07:00
2018-09-20 10:10:46 -07:00
const transaction = SystemProgram.move(
2018-09-14 08:27:40 -07:00
accountFrom.publicKey,
accountTo.publicKey,
10
);
const signature = await connection.sendTransaction(accountFrom, transaction);
mockRpc.push([
url,
{
method: 'confirmTransaction',
params: [
'3WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk'
],
},
{
error: null,
result: true,
}
]
);
expect(connection.confirmTransaction(signature)).resolves.toBe(true);
2018-09-26 19:16:17 -07:00
mockRpc.push([
url,
{
method: 'getSignatureStatus',
params: [
'3WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk'
],
},
{
error: null,
result: 'Confirmed',
}
]
);
expect(connection.getSignatureStatus(signature)).resolves.toBe('Confirmed');
mockRpc.push([
url,
{
method: 'getBalance',
2018-09-30 18:42:45 -07:00
params: [accountFrom.publicKey.toBase58()],
},
{
error: null,
result: 2,
}
]);
expect(await connection.getBalance(accountFrom.publicKey)).toBe(2);
2018-08-23 10:52:48 -07:00
mockRpc.push([
url,
{
method: 'getBalance',
2018-09-30 18:42:45 -07:00
params: [accountTo.publicKey.toBase58()],
},
{
error: null,
result: 31,
}
]);
expect(await connection.getBalance(accountTo.publicKey)).toBe(31);
});