diff --git a/tokens/escrow/anchor/tests/escrow.ts b/tokens/escrow/anchor/tests/escrow.ts index 2232c5dce..e8b0c56b1 100644 --- a/tokens/escrow/anchor/tests/escrow.ts +++ b/tokens/escrow/anchor/tests/escrow.ts @@ -45,67 +45,6 @@ describe('escrow', async () => { const tokenAOfferedAmount = new BN(1_000_000); const tokenBWantedAmount = new BN(1_000_000); - // We'll call this function from multiple tests, so let's seperate it out - const make = async () => { - // Pick a random ID for the offer we'll make - const offerId = getRandomBigNumber(); - - // Then determine the account addresses we'll use for the offer and the vault - const offer = PublicKey.findProgramAddressSync( - [Buffer.from('offer'), accounts.maker.toBuffer(), offerId.toArrayLike(Buffer, 'le', 8)], - program.programId, - )[0]; - - const vault = getAssociatedTokenAddressSync(accounts.tokenMintA, offer, true, TOKEN_PROGRAM); - - accounts.offer = offer; - accounts.vault = vault; - - const transactionSignature = await program.methods - .makeOffer(offerId, tokenAOfferedAmount, tokenBWantedAmount) - .accounts({ ...accounts }) - .signers([alice]) - .rpc(); - - await confirmTransaction(connection, transactionSignature); - - // Check our vault contains the tokens offered - const vaultBalanceResponse = await connection.getTokenAccountBalance(vault); - const vaultBalance = new BN(vaultBalanceResponse.value.amount); - assert(vaultBalance.eq(tokenAOfferedAmount)); - - // Check our Offer account contains the correct data - const offerAccount = await program.account.offer.fetch(offer); - - assert(offerAccount.maker.equals(alice.publicKey)); - assert(offerAccount.tokenMintA.equals(accounts.tokenMintA)); - assert(offerAccount.tokenMintB.equals(accounts.tokenMintB)); - assert(offerAccount.tokenBWantedAmount.eq(tokenBWantedAmount)); - }; - - // We'll call this function from multiple tests, so let's seperate it out - const take = async () => { - const transactionSignature = await program.methods - .takeOffer() - .accounts({ ...accounts }) - .signers([bob]) - .rpc(); - - await confirmTransaction(connection, transactionSignature); - - // Check the offered tokens are now in Bob's account - // (note: there is no before balance as Bob didn't have any offered tokens before the transaction) - const bobTokenAccountBalanceAfterResponse = await connection.getTokenAccountBalance(accounts.takerTokenAccountA); - const bobTokenAccountBalanceAfter = new BN(bobTokenAccountBalanceAfterResponse.value.amount); - assert(bobTokenAccountBalanceAfter.eq(tokenAOfferedAmount)); - - // Check the wanted tokens are now in Alice's account - // (note: there is no before balance as Alice didn't have any wanted tokens before the transaction) - const aliceTokenAccountBalanceAfterResponse = await connection.getTokenAccountBalance(accounts.makerTokenAccountB); - const aliceTokenAccountBalanceAfter = new BN(aliceTokenAccountBalanceAfterResponse.value.amount); - assert(aliceTokenAccountBalanceAfter.eq(tokenBWantedAmount)); - }; - before('Creates Alice and Bob accounts, 2 token mints, and associated token accounts for both tokens for both users', async () => { const usersMintsAndTokenAccounts = await createAccountsMintsAndTokenAccounts( [ @@ -157,10 +96,61 @@ describe('escrow', async () => { }); it('Puts the tokens Alice offers into the vault when Alice makes an offer', async () => { - await make(); + // Pick a random ID for the offer we'll make + const offerId = getRandomBigNumber(); + + // Then determine the account addresses we'll use for the offer and the vault + const offer = PublicKey.findProgramAddressSync( + [Buffer.from('offer'), accounts.maker.toBuffer(), offerId.toArrayLike(Buffer, 'le', 8)], + program.programId, + )[0]; + + const vault = getAssociatedTokenAddressSync(accounts.tokenMintA, offer, true, TOKEN_PROGRAM); + + accounts.offer = offer; + accounts.vault = vault; + + const transactionSignature = await program.methods + .makeOffer(offerId, tokenAOfferedAmount, tokenBWantedAmount) + .accounts({ ...accounts }) + .signers([alice]) + .rpc(); + + await confirmTransaction(connection, transactionSignature); + + // Check our vault contains the tokens offered + const vaultBalanceResponse = await connection.getTokenAccountBalance(vault); + const vaultBalance = new BN(vaultBalanceResponse.value.amount); + assert(vaultBalance.eq(tokenAOfferedAmount)); + + // Check our Offer account contains the correct data + const offerAccount = await program.account.offer.fetch(offer); + + assert(offerAccount.maker.equals(alice.publicKey)); + assert(offerAccount.tokenMintA.equals(accounts.tokenMintA)); + assert(offerAccount.tokenMintB.equals(accounts.tokenMintB)); + assert(offerAccount.tokenBWantedAmount.eq(tokenBWantedAmount)); }).slow(60 * SECONDS); it("Puts the tokens from the vault into Bob's account, and gives Alice Bob's tokens, when Bob takes an offer", async () => { - await take(); + const transactionSignature = await program.methods + .takeOffer() + .accounts({ ...accounts }) + .signers([bob]) + .rpc(); + + await confirmTransaction(connection, transactionSignature); + + // Check the offered tokens are now in Bob's account + // (note: there is no before balance as Bob didn't have any offered tokens before the transaction) + const bobTokenAccountBalanceAfterResponse = await connection.getTokenAccountBalance(accounts.takerTokenAccountA); + const bobTokenAccountBalanceAfter = new BN(bobTokenAccountBalanceAfterResponse.value.amount); + assert(bobTokenAccountBalanceAfter.eq(tokenAOfferedAmount)); + + // Check the wanted tokens are now in Alice's account + // (note: there is no before balance as Alice didn't have any wanted tokens before the transaction) + const aliceTokenAccountBalanceAfterResponse = await connection.getTokenAccountBalance(accounts.makerTokenAccountB); + const aliceTokenAccountBalanceAfter = new BN(aliceTokenAccountBalanceAfterResponse.value.amount); + assert(aliceTokenAccountBalanceAfter.eq(tokenBWantedAmount)); }).slow(60 * SECONDS); });