solana-program-library/name-service/js/test/unit/index.test.ts

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);
});
});