140 lines
4.0 KiB
TypeScript
140 lines
4.0 KiB
TypeScript
import {
|
|
Keypair,
|
|
LAMPORTS_PER_SOL,
|
|
PublicKey,
|
|
SystemProgram,
|
|
} from '@solana/web3.js';
|
|
import chai, { expect } from 'chai';
|
|
import chaiAsPromised from 'chai-as-promised';
|
|
|
|
import {
|
|
createInstruction,
|
|
deleteInstruction,
|
|
reallocInstruction,
|
|
transferInstruction,
|
|
updateInstruction,
|
|
} from '../../src';
|
|
import { Numberu32, Numberu64 } from '../../src/utils';
|
|
|
|
chai.use(chaiAsPromised);
|
|
|
|
describe('SplNameService Instructions', () => {
|
|
const nameServiceAddress = new PublicKey(
|
|
'namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX'
|
|
);
|
|
const nameAccountKey = Keypair.generate().publicKey;
|
|
const nameOwnerKey = Keypair.generate().publicKey;
|
|
const payerKey = Keypair.generate().publicKey;
|
|
const nameClassKey = Keypair.generate().publicKey;
|
|
const nameParent = Keypair.generate().publicKey;
|
|
const nameParentOwner = Keypair.generate().publicKey;
|
|
const name = Buffer.from('hello');
|
|
|
|
it('createInstruction without class and parent name key', () => {
|
|
const instruction = createInstruction(
|
|
nameServiceAddress,
|
|
SystemProgram.programId,
|
|
nameAccountKey,
|
|
nameOwnerKey,
|
|
payerKey,
|
|
name,
|
|
new Numberu64(LAMPORTS_PER_SOL),
|
|
new Numberu64(10)
|
|
);
|
|
|
|
expect(instruction.keys).to.have.length(6);
|
|
instruction.keys[0].pubkey.equals(SystemProgram.programId);
|
|
instruction.keys[1].pubkey.equals(payerKey);
|
|
instruction.keys[2].pubkey.equals(nameAccountKey);
|
|
instruction.keys[3].pubkey.equals(nameOwnerKey);
|
|
instruction.keys[4].pubkey.equals(new PublicKey(Buffer.alloc(32)));
|
|
instruction.keys[5].pubkey.equals(new PublicKey(Buffer.alloc(32)));
|
|
});
|
|
|
|
it('createInstruction with class and parent name key', () => {
|
|
const instruction = createInstruction(
|
|
nameServiceAddress,
|
|
SystemProgram.programId,
|
|
nameAccountKey,
|
|
nameOwnerKey,
|
|
payerKey,
|
|
name,
|
|
new Numberu64(LAMPORTS_PER_SOL),
|
|
new Numberu64(10),
|
|
nameClassKey,
|
|
nameParent,
|
|
nameParentOwner
|
|
);
|
|
|
|
expect(instruction.keys).to.have.length(7);
|
|
instruction.keys[0].pubkey.equals(SystemProgram.programId);
|
|
instruction.keys[1].pubkey.equals(payerKey);
|
|
instruction.keys[2].pubkey.equals(nameAccountKey);
|
|
instruction.keys[3].pubkey.equals(nameOwnerKey);
|
|
instruction.keys[4].pubkey.equals(nameClassKey);
|
|
instruction.keys[5].pubkey.equals(nameParent);
|
|
instruction.keys[6].pubkey.equals(nameParentOwner);
|
|
});
|
|
|
|
it('updateInstruction', () => {
|
|
const data = Buffer.from('@Dudl');
|
|
const instruction = updateInstruction(
|
|
nameServiceAddress,
|
|
nameAccountKey,
|
|
new Numberu32(0),
|
|
data,
|
|
nameOwnerKey,
|
|
undefined
|
|
);
|
|
|
|
expect(instruction.keys).to.have.length(2);
|
|
instruction.keys[0].pubkey.equals(nameAccountKey);
|
|
instruction.keys[1].pubkey.equals(nameOwnerKey);
|
|
});
|
|
|
|
it('transferInstruction', () => {
|
|
const newOwner = Keypair.generate().publicKey;
|
|
const instruction = transferInstruction(
|
|
nameServiceAddress,
|
|
nameAccountKey,
|
|
newOwner,
|
|
nameOwnerKey
|
|
);
|
|
|
|
expect(instruction.keys).to.have.length(2);
|
|
instruction.keys[0].pubkey.equals(nameAccountKey);
|
|
instruction.keys[1].pubkey.equals(nameOwnerKey);
|
|
});
|
|
|
|
it('deleteInstruction', () => {
|
|
const instruction = deleteInstruction(
|
|
nameServiceAddress,
|
|
nameAccountKey,
|
|
payerKey,
|
|
nameOwnerKey
|
|
);
|
|
|
|
expect(instruction.keys).to.have.length(3);
|
|
instruction.keys[0].pubkey.equals(nameAccountKey);
|
|
instruction.keys[1].pubkey.equals(nameOwnerKey);
|
|
instruction.keys[2].pubkey.equals(payerKey);
|
|
});
|
|
|
|
it('reallocInstruction', () => {
|
|
const instruction = reallocInstruction(
|
|
nameServiceAddress,
|
|
SystemProgram.programId,
|
|
payerKey,
|
|
nameAccountKey,
|
|
nameOwnerKey,
|
|
new Numberu32(30)
|
|
);
|
|
|
|
expect(instruction.keys).to.have.length(4);
|
|
instruction.keys[0].pubkey.equals(SystemProgram.programId);
|
|
instruction.keys[1].pubkey.equals(payerKey);
|
|
instruction.keys[2].pubkey.equals(nameAccountKey);
|
|
instruction.keys[3].pubkey.equals(nameOwnerKey);
|
|
});
|
|
});
|