fix: add stake unit tests
This commit is contained in:
committed by
Michael Vines
parent
6ebd47fbac
commit
07c0670f65
222
web3.js/test/stake-program.test.js
Normal file
222
web3.js/test/stake-program.test.js
Normal file
@ -0,0 +1,222 @@
|
||||
// @flow
|
||||
|
||||
import {
|
||||
Account,
|
||||
Authorized,
|
||||
Lockup,
|
||||
PublicKey,
|
||||
StakeAuthorizationLayout,
|
||||
StakeInstruction,
|
||||
StakeInstructionLayout,
|
||||
StakeProgram,
|
||||
SystemInstruction,
|
||||
SystemProgram,
|
||||
Transaction,
|
||||
} from '../src';
|
||||
|
||||
test('createAccountWithSeed', () => {
|
||||
const from = new Account();
|
||||
const seed = 'test string';
|
||||
const newAccountPubkey = PublicKey.createWithSeed(
|
||||
from.publicKey,
|
||||
seed,
|
||||
StakeProgram.programId,
|
||||
);
|
||||
const authorized = new Account();
|
||||
let transaction;
|
||||
|
||||
transaction = StakeProgram.createAccountWithSeed(
|
||||
from.publicKey,
|
||||
newAccountPubkey,
|
||||
seed,
|
||||
new Authorized(authorized.publicKey, authorized.publicKey),
|
||||
new Lockup(0, from.publicKey),
|
||||
123,
|
||||
);
|
||||
|
||||
expect(transaction.instructions).toHaveLength(2);
|
||||
expect(transaction.instructions[0].programId).toEqual(
|
||||
SystemProgram.programId,
|
||||
);
|
||||
expect(transaction.instructions[1].programId).toEqual(StakeProgram.programId);
|
||||
// TODO: Validate transaction contents more
|
||||
});
|
||||
|
||||
test('createAccount', () => {
|
||||
const from = new Account();
|
||||
const newAccount = new Account();
|
||||
const authorized = new Account();
|
||||
let transaction;
|
||||
|
||||
transaction = StakeProgram.createAccount(
|
||||
from.publicKey,
|
||||
newAccount.publicKey,
|
||||
new Authorized(authorized.publicKey, authorized.publicKey),
|
||||
new Lockup(0, from.publicKey),
|
||||
123,
|
||||
);
|
||||
|
||||
expect(transaction.instructions).toHaveLength(2);
|
||||
expect(transaction.instructions[0].programId).toEqual(
|
||||
SystemProgram.programId,
|
||||
);
|
||||
expect(transaction.instructions[1].programId).toEqual(StakeProgram.programId);
|
||||
// TODO: Validate transaction contents more
|
||||
});
|
||||
|
||||
test('delegate', () => {
|
||||
const stake = new Account();
|
||||
const authorized = new Account();
|
||||
const vote = new Account();
|
||||
let transaction;
|
||||
|
||||
transaction = StakeProgram.delegate(
|
||||
stake.publicKey,
|
||||
authorized.publicKey,
|
||||
vote.publicKey,
|
||||
);
|
||||
|
||||
expect(transaction.keys).toHaveLength(5);
|
||||
expect(transaction.programId).toEqual(StakeProgram.programId);
|
||||
// TODO: Validate transaction contents more
|
||||
});
|
||||
|
||||
test('authorize', () => {
|
||||
const stake = new Account();
|
||||
const authorized = new Account();
|
||||
const newAuthorized = new Account();
|
||||
const type = StakeAuthorizationLayout.Staker;
|
||||
let transaction;
|
||||
|
||||
transaction = StakeProgram.authorize(
|
||||
stake.publicKey,
|
||||
authorized.publicKey,
|
||||
newAuthorized.publicKey,
|
||||
type,
|
||||
);
|
||||
|
||||
expect(transaction.keys).toHaveLength(2);
|
||||
expect(transaction.programId).toEqual(StakeProgram.programId);
|
||||
// TODO: Validate transaction contents more
|
||||
});
|
||||
|
||||
test('redeemVoteCredits', () => {
|
||||
const stake = new Account();
|
||||
const vote = new Account();
|
||||
let transaction;
|
||||
|
||||
transaction = StakeProgram.redeemVoteCredits(stake.publicKey, vote.publicKey);
|
||||
|
||||
expect(transaction.keys).toHaveLength(5);
|
||||
expect(transaction.programId).toEqual(StakeProgram.programId);
|
||||
// TODO: Validate transaction contents more
|
||||
});
|
||||
|
||||
test('split', () => {
|
||||
const stake = new Account();
|
||||
const authorized = new Account();
|
||||
const newStake = new Account();
|
||||
let transaction;
|
||||
|
||||
transaction = StakeProgram.split(
|
||||
stake.publicKey,
|
||||
authorized.publicKey,
|
||||
123,
|
||||
newStake.publicKey,
|
||||
);
|
||||
|
||||
expect(transaction.instructions).toHaveLength(2);
|
||||
expect(transaction.instructions[0].programId).toEqual(
|
||||
SystemProgram.programId,
|
||||
);
|
||||
expect(transaction.instructions[1].programId).toEqual(StakeProgram.programId);
|
||||
// TODO: Validate transaction contents more
|
||||
});
|
||||
|
||||
test('withdraw', () => {
|
||||
const stake = new Account();
|
||||
const withdrawer = new Account();
|
||||
const to = new Account();
|
||||
let transaction;
|
||||
|
||||
transaction = StakeProgram.withdraw(
|
||||
stake.publicKey,
|
||||
withdrawer.publicKey,
|
||||
to.publicKey,
|
||||
123,
|
||||
);
|
||||
|
||||
expect(transaction.keys).toHaveLength(5);
|
||||
expect(transaction.programId).toEqual(StakeProgram.programId);
|
||||
// TODO: Validate transaction contents more
|
||||
});
|
||||
|
||||
test('deactivate', () => {
|
||||
const stake = new Account();
|
||||
const authorized = new Account();
|
||||
let transaction;
|
||||
|
||||
transaction = StakeProgram.deactivate(stake.publicKey, authorized.publicKey);
|
||||
|
||||
expect(transaction.keys).toHaveLength(3);
|
||||
expect(transaction.programId).toEqual(StakeProgram.programId);
|
||||
// TODO: Validate transaction contents more
|
||||
});
|
||||
|
||||
test('StakeInstructions', () => {
|
||||
const from = new Account();
|
||||
const seed = 'test string';
|
||||
const newAccountPubkey = PublicKey.createWithSeed(
|
||||
from.publicKey,
|
||||
seed,
|
||||
StakeProgram.programId,
|
||||
);
|
||||
const authorized = new Account();
|
||||
const amount = 123;
|
||||
const recentBlockhash = 'EETubP5AKHgjPAhzPAFcb8BAY1hMH639CWCFTqi3hq1k'; // Arbitrary known recentBlockhash
|
||||
const createWithSeed = StakeProgram.createAccountWithSeed(
|
||||
from.publicKey,
|
||||
newAccountPubkey,
|
||||
seed,
|
||||
new Authorized(authorized.publicKey, authorized.publicKey),
|
||||
new Lockup(0, from.publicKey),
|
||||
amount,
|
||||
);
|
||||
const createWithSeedTransaction = new Transaction({recentBlockhash}).add(
|
||||
createWithSeed,
|
||||
);
|
||||
|
||||
const systemInstruction = SystemInstruction.from(
|
||||
createWithSeedTransaction.instructions[0],
|
||||
);
|
||||
expect(systemInstruction.fromPublicKey).toEqual(from.publicKey);
|
||||
expect(systemInstruction.toPublicKey).toEqual(newAccountPubkey);
|
||||
expect(systemInstruction.amount).toEqual(amount);
|
||||
expect(systemInstruction.programId).toEqual(SystemProgram.programId);
|
||||
|
||||
const stakeInstruction = StakeInstruction.from(
|
||||
createWithSeedTransaction.instructions[1],
|
||||
);
|
||||
expect(stakeInstruction.type).toEqual(StakeInstructionLayout.Initialize);
|
||||
|
||||
expect(() => {
|
||||
StakeInstruction.from(createWithSeedTransaction.instructions[0]);
|
||||
}).toThrow();
|
||||
|
||||
const stake = new Account();
|
||||
const vote = new Account();
|
||||
const delegate = StakeProgram.delegate(
|
||||
stake.publicKey,
|
||||
authorized.publicKey,
|
||||
vote.publicKey,
|
||||
);
|
||||
|
||||
const delegateTransaction = new Transaction({recentBlockhash}).add(delegate);
|
||||
|
||||
const anotherStakeInstruction = StakeInstruction.from(
|
||||
delegateTransaction.instructions[0],
|
||||
);
|
||||
expect(anotherStakeInstruction.type).toEqual(
|
||||
StakeInstructionLayout.DelegateStake,
|
||||
);
|
||||
});
|
Reference in New Issue
Block a user