diff --git a/sdk/tests/sdk/whirlpools/utils/pool-utils.test.ts b/sdk/tests/sdk/whirlpools/utils/pool-utils.test.ts new file mode 100644 index 0000000..70696fd --- /dev/null +++ b/sdk/tests/sdk/whirlpools/utils/pool-utils.test.ts @@ -0,0 +1,64 @@ +import * as assert from "assert"; +import { PoolUtil, SwapDirection, TokenType } from "../../../../src"; +import { testWhirlpoolData } from "../../../utils/testDataTypes"; +import { Keypair } from "@solana/web3.js"; + +describe("PoolUtils tests", () => { + describe("getTokenType", () => { + it("Token is tokenA", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getTokenType(whirlpoolData, whirlpoolData.tokenMintA); + assert.equal(result, TokenType.TokenA); + }); + + it("Token is tokenB", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getTokenType(whirlpoolData, whirlpoolData.tokenMintB); + assert.equal(result, TokenType.TokenB); + }); + + it("Token is some other token", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getTokenType(whirlpoolData, Keypair.generate().publicKey); + assert.ok(result === undefined); + }); + }); + + describe("getSwapDirection", () => { + it("SwapToken is tokenA and is an input", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getSwapDirection(whirlpoolData, whirlpoolData.tokenMintA, true); + assert.equal(result, SwapDirection.AtoB); + }); + + it("SwapToken is tokenB and is an input", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getSwapDirection(whirlpoolData, whirlpoolData.tokenMintB, true); + assert.equal(result, SwapDirection.BtoA); + }); + + it("SwapToken is tokenA and is not an input", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getSwapDirection(whirlpoolData, whirlpoolData.tokenMintA, false); + assert.equal(result, SwapDirection.BtoA); + }); + + it("SwapToken is tokenB and is not an input", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getSwapDirection(whirlpoolData, whirlpoolData.tokenMintB, false); + assert.equal(result, SwapDirection.AtoB); + }); + + it("SwapToken is a random mint and is an input", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getSwapDirection(whirlpoolData, Keypair.generate().publicKey, true); + assert.equal(result, undefined); + }); + + it("SwapToken is a random mint and is not an input", async () => { + const whirlpoolData = testWhirlpoolData; + const result = PoolUtil.getSwapDirection(whirlpoolData, Keypair.generate().publicKey, false); + assert.equal(result, undefined); + }); + }); +}); diff --git a/sdk/tests/utils/testDataTypes.ts b/sdk/tests/utils/testDataTypes.ts new file mode 100644 index 0000000..cf59120 --- /dev/null +++ b/sdk/tests/utils/testDataTypes.ts @@ -0,0 +1,24 @@ +import { Keypair } from "@solana/web3.js"; +import { BN } from "bn.js"; +import { PriceMath } from "../../src"; + +export const testWhirlpoolData = { + whirlpoolsConfig: Keypair.generate().publicKey, + whirlpoolBump: [], + feeRate: 300, + protocolFeeRate: 1800, + liquidity: new BN("32523523532"), + sqrtPrice: new BN("32523523532"), + tickCurrentIndex: PriceMath.sqrtPriceX64ToTickIndex(new BN("32523523532")), + protocolFeeOwedA: new BN("2314532532"), + protocolFeeOwedB: new BN("2314532532"), + tokenMintA: Keypair.generate().publicKey, + tokenVaultA: Keypair.generate().publicKey, + feeGrowthGlobalA: new BN("32532523523523523"), + tokenMintB: Keypair.generate().publicKey, + tokenVaultB: Keypair.generate().publicKey, + feeGrowthGlobalB: new BN("32532523523523523"), + rewardLastUpdatedTimestamp: new BN("3253252312412523523523"), + rewardInfos: [], + tickSpacing: 64, +};