130 lines
3.1 KiB
TypeScript
130 lines
3.1 KiB
TypeScript
import 'mocha';
|
|
import assert from 'assert';
|
|
|
|
import * as sbv2 from '../src';
|
|
import { setupTest, TestContext } from './utilts';
|
|
import { Keypair, PublicKey } from '@solana/web3.js';
|
|
import {
|
|
AggregatorAccount,
|
|
JobAccount,
|
|
LeaseAccount,
|
|
QueueAccount,
|
|
} from '../src';
|
|
import { OracleJob } from '@switchboard-xyz/common';
|
|
|
|
describe('Lease Tests', () => {
|
|
let ctx: TestContext;
|
|
|
|
const jobData = OracleJob.encodeDelimited(
|
|
OracleJob.fromObject({
|
|
tasks: [
|
|
{
|
|
valueTask: {
|
|
value: 1337,
|
|
},
|
|
},
|
|
],
|
|
})
|
|
).finish();
|
|
|
|
const queueAuthority = Keypair.generate();
|
|
let queueAccount: QueueAccount;
|
|
|
|
const jobAuthority1 = Keypair.generate();
|
|
let jobAccount1: JobAccount;
|
|
|
|
const jobAuthority2 = Keypair.generate();
|
|
let jobAccount2: JobAccount;
|
|
|
|
let aggregatorAccount: AggregatorAccount;
|
|
|
|
let userTokenAddress: PublicKey;
|
|
|
|
before(async () => {
|
|
ctx = await setupTest();
|
|
|
|
[queueAccount] = await sbv2.QueueAccount.create(ctx.program, {
|
|
name: 'aggregator-queue',
|
|
metadata: '',
|
|
authority: queueAuthority.publicKey,
|
|
queueSize: 1,
|
|
reward: 0,
|
|
minStake: 0,
|
|
oracleTimeout: 86400,
|
|
slashingEnabled: false,
|
|
unpermissionedFeeds: true,
|
|
unpermissionedVrf: true,
|
|
enableBufferRelayers: false,
|
|
});
|
|
|
|
[jobAccount1] = await JobAccount.create(ctx.program, {
|
|
authority: jobAuthority1,
|
|
data: jobData,
|
|
weight: 1,
|
|
});
|
|
|
|
[jobAccount2] = await JobAccount.create(ctx.program, {
|
|
authority: jobAuthority2,
|
|
data: jobData,
|
|
weight: 1,
|
|
});
|
|
|
|
[aggregatorAccount] = await AggregatorAccount.create(ctx.program, {
|
|
queueAccount: queueAccount,
|
|
queueAuthority: queueAuthority.publicKey,
|
|
batchSize: 2,
|
|
minRequiredOracleResults: 2,
|
|
minRequiredJobResults: 1,
|
|
minUpdateDelaySeconds: 5,
|
|
});
|
|
|
|
[userTokenAddress] = await ctx.program.mint.getOrCreateWrappedUser(
|
|
ctx.payer.publicKey,
|
|
{ fundUpTo: 0.1 }
|
|
);
|
|
});
|
|
|
|
it('Creates a Lease', async () => {
|
|
const fundAmount = 0.025;
|
|
|
|
const [leaseAccount] = await sbv2.LeaseAccount.create(ctx.program, {
|
|
aggregatorAccount,
|
|
queueAccount,
|
|
loadAmount: fundAmount,
|
|
funderTokenAccount: userTokenAddress,
|
|
});
|
|
|
|
await leaseAccount.loadData();
|
|
|
|
const leaseBalance = await leaseAccount.fetchBalance();
|
|
|
|
assert(
|
|
leaseBalance === fundAmount,
|
|
`Incorrect lease balance, expected ${fundAmount} wSOL, received ${leaseBalance}`
|
|
);
|
|
});
|
|
|
|
it('Extends a Lease', async () => {
|
|
const [leaseAccount] = LeaseAccount.fromSeed(
|
|
ctx.program,
|
|
queueAccount.publicKey,
|
|
aggregatorAccount.publicKey
|
|
);
|
|
|
|
const initialLeaseBalance = await leaseAccount.fetchBalance();
|
|
|
|
await leaseAccount.extend({
|
|
amount: 0.075,
|
|
funderTokenAddress: userTokenAddress,
|
|
});
|
|
|
|
const expectedFinalBalance = initialLeaseBalance + 0.075;
|
|
const finalBalance = await leaseAccount.fetchBalance();
|
|
|
|
assert(
|
|
finalBalance === expectedFinalBalance,
|
|
`Incorrect lease balance, expected ${expectedFinalBalance} wSOL, received ${finalBalance}`
|
|
);
|
|
});
|
|
});
|