From da693d15a98090098ed86f9979e6e33f5c210642 Mon Sep 17 00:00:00 2001 From: fa2a5qj3 <174058787+fa2a5qj3@users.noreply.github.com> Date: Mon, 15 Jul 2024 19:13:43 -0400 Subject: [PATCH 1/3] Test the role field of Trades --- src/HavenoClient.test.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/HavenoClient.test.ts b/src/HavenoClient.test.ts index b016351a..4fe98c77 100644 --- a/src/HavenoClient.test.ts +++ b/src/HavenoClient.test.ts @@ -2217,6 +2217,29 @@ test("Selects arbitrators which are online, registered, and least used", async ( } }); +test("Do all trades contain role property", async () => { + if ((await user1.getTrades()).length === 0) { // ensure there is at least one trade available + await executeTrade({ + price: 150, + offerAmount: HavenoUtils.xmrToAtomicUnits(1.0 + (Math.random() * 1.0)), + offerMinAmount: HavenoUtils.xmrToAtomicUnits(.15), + tradeAmount: HavenoUtils.xmrToAtomicUnits(.92), + reserveExactAmount: true, + testBalanceChangeEndToEnd: false + }); + } + const trades = (await user1.getTrades()).concat(await user2.getTrades()); + HavenoUtils.log(0, "Trades size: " + trades.length); + assert(trades.length > 0); + let anyRolesEmpty = false; + for (const trade of trades) { + const role = trade.getRole(); + HavenoUtils.log(0, "Trade: " + trade.getShortId() + " role: " + role); + if (role.length === 0) anyRolesEmpty = true; + } + assert(!anyRolesEmpty); +}); + // ----------------------------- TEST HELPERS --------------------------------- function getTradeContexts(numConfigs: number): TradeContext[] { From 7aaf5e44f54870cd61685315ca9d93b56ca3c6f5 Mon Sep 17 00:00:00 2001 From: fa2a5qj3 <174058787+fa2a5qj3@users.noreply.github.com> Date: Tue, 16 Jul 2024 16:59:27 -0400 Subject: [PATCH 2/3] V2: requested changes from woodser. --- src/HavenoClient.test.ts | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/src/HavenoClient.test.ts b/src/HavenoClient.test.ts index 4fe98c77..fd0de692 100644 --- a/src/HavenoClient.test.ts +++ b/src/HavenoClient.test.ts @@ -2217,29 +2217,6 @@ test("Selects arbitrators which are online, registered, and least used", async ( } }); -test("Do all trades contain role property", async () => { - if ((await user1.getTrades()).length === 0) { // ensure there is at least one trade available - await executeTrade({ - price: 150, - offerAmount: HavenoUtils.xmrToAtomicUnits(1.0 + (Math.random() * 1.0)), - offerMinAmount: HavenoUtils.xmrToAtomicUnits(.15), - tradeAmount: HavenoUtils.xmrToAtomicUnits(.92), - reserveExactAmount: true, - testBalanceChangeEndToEnd: false - }); - } - const trades = (await user1.getTrades()).concat(await user2.getTrades()); - HavenoUtils.log(0, "Trades size: " + trades.length); - assert(trades.length > 0); - let anyRolesEmpty = false; - for (const trade of trades) { - const role = trade.getRole(); - HavenoUtils.log(0, "Trade: " + trade.getShortId() + " role: " + role); - if (role.length === 0) anyRolesEmpty = true; - } - assert(!anyRolesEmpty); -}); - // ----------------------------- TEST HELPERS --------------------------------- function getTradeContexts(numConfigs: number): TradeContext[] { @@ -2623,6 +2600,11 @@ async function executeTrade(ctxP: Partial): Promise { ctx.taker.balancesAfterPayout = await ctx.taker.havenod?.getBalances(); } + const trades = (await user1.getTrades()).concat(await user2.getTrades()); + const tradesForThisOffer = trades.filter( (x) => x.getTradeId() === ctx.offerId); + for (const trade of tradesForThisOffer) HavenoUtils.log(0, "TradeInfo received from getTrades: " + trade.getShortId() + " role: " + trade.getRole()); + for (const trade of tradesForThisOffer) testTrade(trade, ctx); + // test balances after payout tx unless other trades can interfere if (ctx.isStopped) return ctx.offerId!; if (!ctx.concurrentTrades) await testAmountsAfterComplete(ctx); @@ -2839,6 +2821,7 @@ async function takeOffer(ctxP: Partial): Promise { } // test trade model + HavenoUtils.log(0, "TradeInfo received from havenod.takeOffer: " + trade.getShortId() + " role: " + trade.getRole()); await testTrade(trade, ctx); // test buyer and seller balances after offer taken @@ -2900,6 +2883,13 @@ async function testTrade(trade: TradeInfo, ctx: TradeContext) { expect(BigInt(trade.getBuyerSecurityDeposit())).toEqual(expectedSecurityDeposit - ctx.getBuyer().depositTxFee); expect(BigInt(trade.getSellerSecurityDeposit())).toEqual(expectedSecurityDeposit - ctx.getSeller().depositTxFee); + HavenoUtils.log(0, "Trade: " + trade.getShortId() + " role: " + trade.getRole()); + expect(trade.getRole().length > 0); + if (ctx.isBuyerMaker() && trade.getOffer().isMyOffer) assert.equal(trade.getRole(), "XMR buyer as maker"); + if (ctx.isBuyerMaker() && !trade.getOffer().isMyOffer) assert.equal(trade.getRole(), "XMR seller as taker"); + if (!ctx.isBuyerMaker() && trade.getOffer().isMyOffer) assert.equal(trade.getRole(), "XMR seller as maker"); + if (!ctx.isBuyerMaker() && !trade.getOffer().isMyOffer) assert.equal(trade.getRole(), "XMR buyer as taker"); + // TODO: test more fields } From 6f9ce7f558ac7dd2de555016436ae160e6410206 Mon Sep 17 00:00:00 2001 From: fa2a5qj3 <174058787+fa2a5qj3@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:51:56 -0400 Subject: [PATCH 3/3] V3: requested changes --- src/HavenoClient.test.ts | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/HavenoClient.test.ts b/src/HavenoClient.test.ts index fd0de692..ccef5ea3 100644 --- a/src/HavenoClient.test.ts +++ b/src/HavenoClient.test.ts @@ -2600,10 +2600,13 @@ async function executeTrade(ctxP: Partial): Promise { ctx.taker.balancesAfterPayout = await ctx.taker.havenod?.getBalances(); } - const trades = (await user1.getTrades()).concat(await user2.getTrades()); - const tradesForThisOffer = trades.filter( (x) => x.getTradeId() === ctx.offerId); - for (const trade of tradesForThisOffer) HavenoUtils.log(0, "TradeInfo received from getTrades: " + trade.getShortId() + " role: " + trade.getRole()); - for (const trade of tradesForThisOffer) testTrade(trade, ctx); + const tradesForUser1 = await user1.getTrades(); + const tradesForUser2 = await user2.getTrades(); + assert(tradesForUser1.find( (x) => x.getTradeId() === ctx.offerId)); + assert(tradesForUser2.find( (x) => x.getTradeId() === ctx.offerId)); + for (const trade of tradesForUser1.concat(tradesForUser2).filter( (x) => x.getTradeId() === ctx.offerId)) { + testTrade(trade, ctx); + } // test balances after payout tx unless other trades can interfere if (ctx.isStopped) return ctx.offerId!; @@ -2820,10 +2823,6 @@ async function takeOffer(ctxP: Partial): Promise { ctx.getSeller().securityDepositActual = BigInt(trade.getSellerSecurityDeposit()!); } - // test trade model - HavenoUtils.log(0, "TradeInfo received from havenod.takeOffer: " + trade.getShortId() + " role: " + trade.getRole()); - await testTrade(trade, ctx); - // test buyer and seller balances after offer taken if (!ctx.concurrentTrades) { ctx.arbitrator!.trade = await ctx.arbitrator.havenod!.getTrade(ctx.offerId!); @@ -2883,12 +2882,11 @@ async function testTrade(trade: TradeInfo, ctx: TradeContext) { expect(BigInt(trade.getBuyerSecurityDeposit())).toEqual(expectedSecurityDeposit - ctx.getBuyer().depositTxFee); expect(BigInt(trade.getSellerSecurityDeposit())).toEqual(expectedSecurityDeposit - ctx.getSeller().depositTxFee); - HavenoUtils.log(0, "Trade: " + trade.getShortId() + " role: " + trade.getRole()); - expect(trade.getRole().length > 0); - if (ctx.isBuyerMaker() && trade.getOffer().isMyOffer) assert.equal(trade.getRole(), "XMR buyer as maker"); - if (ctx.isBuyerMaker() && !trade.getOffer().isMyOffer) assert.equal(trade.getRole(), "XMR seller as taker"); - if (!ctx.isBuyerMaker() && trade.getOffer().isMyOffer) assert.equal(trade.getRole(), "XMR seller as maker"); - if (!ctx.isBuyerMaker() && !trade.getOffer().isMyOffer) assert.equal(trade.getRole(), "XMR buyer as taker"); + assert(trade.getRole().length > 0); + assert(trade.getRole() === "XMR buyer as maker" + || trade.getRole() === "XMR seller as taker" + || trade.getRole() === "XMR seller as maker" + || trade.getRole() === "XMR buyer as taker"); // TODO: test more fields }