Show explicit blackjack settlements across the stack
- Replace round payout multipliers with per-player settlement amounts - Update blackjack panel to display wager, payout, and net results
This commit is contained in:
@@ -303,6 +303,7 @@ describe("handleAction — stand", () => {
|
||||
dealerHand: [makeCard("7"), makeCard("8")],
|
||||
turnOrder: ["p1"],
|
||||
deck: [makeCard("2")], // dealer: 15 + 2 = 17
|
||||
betAmount: 10,
|
||||
});
|
||||
|
||||
const result = blackjackPlugin.handleAction(state, { type: "stand" }, "p1");
|
||||
@@ -310,8 +311,8 @@ describe("handleAction — stand", () => {
|
||||
if (!result.ok) return;
|
||||
expect(result.state.phase).toBe("resolved");
|
||||
expect(result.state.seats["p1"]!.hands[0]!.result).toBe("win"); // 19 > 17
|
||||
expect(result.roundPayouts).toBeDefined();
|
||||
expect(result.roundPayouts!["p1"]).toBe(2); // 1:1 win
|
||||
expect(result.roundSettlements).toBeDefined();
|
||||
expect(result.roundSettlements!["p1"]).toEqual({ wager: 10, payout: 20, net: 10 });
|
||||
});
|
||||
|
||||
it("dealer busts — all standing players win", () => {
|
||||
@@ -480,6 +481,7 @@ describe("handleAction — double_down", () => {
|
||||
dealerHand: [makeCard("7"), makeCard("8")],
|
||||
turnOrder: ["p1"],
|
||||
deck: [makeCard("9"), makeCard("2")], // draw 9 → 20, dealer hits
|
||||
betAmount: 10,
|
||||
});
|
||||
|
||||
const result = blackjackPlugin.handleAction(state, { type: "double_down" }, "p1");
|
||||
@@ -524,13 +526,14 @@ describe("handleAction — double_down", () => {
|
||||
dealerHand: [makeCard("7"), makeCard("8")],
|
||||
turnOrder: ["p1"],
|
||||
deck: [makeCard("9"), makeCard("2")], // p1: 20, dealer: 15+2 = 17
|
||||
betAmount: 10,
|
||||
});
|
||||
|
||||
const result = blackjackPlugin.handleAction(state, { type: "double_down" }, "p1");
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.roundPayouts).toBeDefined();
|
||||
expect(result.roundPayouts!["p1"]).toBe(4); // bet=2, win=2*2=4
|
||||
expect(result.roundSettlements).toBeDefined();
|
||||
expect(result.roundSettlements!["p1"]).toEqual({ wager: 20, payout: 40, net: 20 });
|
||||
});
|
||||
});
|
||||
|
||||
@@ -831,25 +834,25 @@ describe("onPlayerDisconnect", () => {
|
||||
// ── Multi-hand payout tests ──
|
||||
|
||||
describe("multi-hand payouts", () => {
|
||||
it("split with one win and one loss", () => {
|
||||
// Set up a resolved state with split hands
|
||||
it("split with one win and one loss settles to flat net", () => {
|
||||
const state = riggedState({
|
||||
seats: {
|
||||
"p1": makeSeat([
|
||||
{ ...stoodHand([makeCard("8"), makeCard("K")], 1, true), result: "win", resultReason: "Higher hand" }, // 18 wins
|
||||
{ ...stoodHand([makeCard("8"), makeCard("5")], 1, true), result: "lose", resultReason: "Lower hand" }, // 13 loses
|
||||
], -1),
|
||||
stoodHand([makeCard("8"), makeCard("K")], 1, true),
|
||||
playingHand([makeCard("8"), makeCard("5")], 1, true),
|
||||
], 1),
|
||||
},
|
||||
dealerHand: [makeCard("7"), makeCard("Q")], // 17
|
||||
dealerHand: [makeCard("10"), makeCard("7")], // 17
|
||||
turnOrder: ["p1"],
|
||||
phase: "resolved",
|
||||
activePlayerIndex: -1,
|
||||
activePlayerIndex: 0,
|
||||
betAmount: 10,
|
||||
});
|
||||
|
||||
// We can't easily test calculateRoundPayouts directly, but we can verify through
|
||||
// a round that resolves. Let's set up a playable scenario instead.
|
||||
// The payout for p1 should be: win(1*2) + lose(0) = 2
|
||||
// This is verified through the stand/resolve flow in the actual game
|
||||
const result = blackjackPlugin.handleAction(state, { type: "stand" }, "p1");
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
|
||||
expect(result.roundSettlements!["p1"]).toEqual({ wager: 20, payout: 20, net: 0 });
|
||||
});
|
||||
|
||||
it("doubled hand win pays 4x betAmount", () => {
|
||||
@@ -858,13 +861,14 @@ describe("multi-hand payouts", () => {
|
||||
dealerHand: [makeCard("6"), makeCard("8")],
|
||||
turnOrder: ["p1"],
|
||||
deck: [makeCard("8"), makeCard("K")], // p1: 5+6+8=19, dealer: 6+8+K=24 bust
|
||||
betAmount: 10,
|
||||
});
|
||||
|
||||
const result = blackjackPlugin.handleAction(state, { type: "double_down" }, "p1");
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
// bet=2, win → payout = 2*2 = 4
|
||||
expect(result.roundPayouts!["p1"]).toBe(4);
|
||||
expect(result.roundSettlements!["p1"]).toEqual({ wager: 20, payout: 40, net: 20 });
|
||||
});
|
||||
|
||||
it("doubled hand push refunds 2x betAmount", () => {
|
||||
@@ -873,13 +877,14 @@ describe("multi-hand payouts", () => {
|
||||
dealerHand: [makeCard("K"), makeCard("10")],
|
||||
turnOrder: ["p1"],
|
||||
deck: [makeCard("3")], // p1: 9+8+3=20, dealer: 20 → push
|
||||
betAmount: 10,
|
||||
});
|
||||
|
||||
const result = blackjackPlugin.handleAction(state, { type: "double_down" }, "p1");
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
// bet=2, push → payout = 2*1 = 2
|
||||
expect(result.roundPayouts!["p1"]).toBe(2);
|
||||
expect(result.roundSettlements!["p1"]).toEqual({ wager: 20, payout: 20, net: 0 });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user