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

319 lines
6.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 {Connection} from '../src/connection';
import {Account} from '../src/account';
2018-08-24 10:39:51 -07:00
import {mockRpc} from './__mocks__/node-fetch';
2018-08-23 10:52:48 -07:00
2018-09-12 17:11:05 -07:00
const url = 'http://testnet.solana.com:8899';
//const url = 'http://localhost:8899';
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-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',
params: [account.publicKey],
},
{
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('get balance - error', () => {
const connection = new Connection(url);
const invalidPublicKey = 'not a public key';
mockRpc.push([
url,
{
method: 'getBalance',
params: [invalidPublicKey],
},
errorResponse,
]);
expect(connection.getBalance(invalidPublicKey))
.rejects.toThrow(errorMessage);
});
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-08-23 10:52:48 -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',
params: [account.publicKey, 40],
},
{
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',
params: [account.publicKey, 2],
},
{
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',
params: [account.publicKey],
},
{
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-08-24 11:12:48 -07:00
test('request airdrop - error', () => {
const invalidPublicKey = 'not a public key';
const connection = new Connection(url);
mockRpc.push([
url,
{
method: 'requestAirdrop',
params: [invalidPublicKey, 1],
},
errorResponse
]);
expect(connection.requestAirdrop(invalidPublicKey, 1))
.rejects.toThrow(errorMessage);
});
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',
params: [accountFrom.publicKey, 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',
params: [accountFrom.publicKey],
},
{
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',
params: [accountTo.publicKey, 21],
},
{
error: null,
2018-09-12 17:41:20 -07:00
result: '8WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk',
}
]);
mockRpc.push([
url,
{
method: 'getBalance',
params: [accountTo.publicKey],
},
{
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',
}
]
);
const signature = await connection.sendTokens(accountFrom, accountTo.publicKey, 10);
mockRpc.push([
url,
{
method: 'confirmTransaction',
params: [
'3WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk'
],
},
{
error: null,
result: true,
}
]
);
expect(connection.confirmTransaction(signature)).resolves.toBe(true);
mockRpc.push([
url,
{
method: 'getBalance',
params: [accountFrom.publicKey],
},
{
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',
params: [accountTo.publicKey],
},
{
error: null,
result: 31,
}
]);
expect(await connection.getBalance(accountTo.publicKey)).toBe(31);
});