tooExpensive gold chips test fails
This commit is contained in:
@@ -1,57 +0,0 @@
|
|||||||
import { expensiveCard, midGameCardOne, midGameCardTwo, midGameState, mockPlayerOne, mockPlayerTwo, mockState } from '../../../util/testUtils';
|
|
||||||
import { buyCard, tooExpensive } from './buyCardActions';
|
|
||||||
import getTotalBuyingPower from '../../../util/getTotalBuyingPower';
|
|
||||||
import { useCurrentPlayer } from '../../../hooks/useCurrentPlayer';
|
|
||||||
import { AppState, CardData, PlayerData, ResourceCost } from '../../../util/types';
|
|
||||||
import { test, expect, describe, vi, afterEach } from 'vitest';
|
|
||||||
import { renderHook } from "@testing-library/react";
|
|
||||||
import React, { useState } from 'react';
|
|
||||||
import { turnOrderUtil } from '../../../util/turnOrderUtil';
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
vi.restoreAllMocks();
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('buy cards', () => {
|
|
||||||
test('detects unaffordable cards', () => {
|
|
||||||
const result = tooExpensive(expensiveCard, mockState);
|
|
||||||
expect(result).toBeTruthy();
|
|
||||||
})
|
|
||||||
|
|
||||||
test('calculates total buying power', () => {
|
|
||||||
let modifiedState = {
|
|
||||||
...mockState,
|
|
||||||
players: [
|
|
||||||
{
|
|
||||||
...mockPlayerOne,
|
|
||||||
inventory: {
|
|
||||||
ruby: 3,
|
|
||||||
sapphire: 3,
|
|
||||||
emerald: 3,
|
|
||||||
onyx: 3,
|
|
||||||
diamond: 3,
|
|
||||||
gold: 3
|
|
||||||
},
|
|
||||||
cards: [expensiveCard]
|
|
||||||
},
|
|
||||||
mockPlayerTwo
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
const totalBuyingPower = getTotalBuyingPower(mockPlayerOne);
|
|
||||||
|
|
||||||
const expectedValue = {
|
|
||||||
ruby: 3,
|
|
||||||
sapphire: 3,
|
|
||||||
emerald: 3,
|
|
||||||
onyx: 3,
|
|
||||||
diamond: 4,
|
|
||||||
gold: 3
|
|
||||||
}
|
|
||||||
|
|
||||||
expect(totalBuyingPower).toStrictEqual(expectedValue);
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
// describe('get chips', () => {})
|
|
||||||
// describe('reserve card', () => {})
|
|
||||||
@@ -9,11 +9,23 @@ import usePreviousPlayer from "../../../hooks/usePreviousPlayer";
|
|||||||
export const tooExpensive = (card: CardData, state: AppState): boolean => {
|
export const tooExpensive = (card: CardData, state: AppState): boolean => {
|
||||||
const currentPlayer = useCurrentPlayer(state);
|
const currentPlayer = useCurrentPlayer(state);
|
||||||
if (!currentPlayer) return true;
|
if (!currentPlayer) return true;
|
||||||
|
|
||||||
|
let availableGold = currentPlayer.inventory.gold || 0;
|
||||||
for (let [cardGemType, cardCost] of Object.entries(card.resourceCost)) {
|
for (let [cardGemType, cardCost] of Object.entries(card.resourceCost)) {
|
||||||
let totalBuyingPower = getTotalBuyingPower(currentPlayer);
|
let totalBuyingPower = getTotalBuyingPower(currentPlayer);
|
||||||
for (let [heldResource, quantity] of Object.entries(totalBuyingPower)) {
|
for (let [heldResource, quantity] of Object.entries(totalBuyingPower)) {
|
||||||
if (cardGemType === heldResource && quantity < cardCost) {
|
if (cardGemType === heldResource && quantity < cardCost) {
|
||||||
return true;
|
let adjustedQuantity = quantity;
|
||||||
|
while (availableGold > 0) {
|
||||||
|
adjustedQuantity++;
|
||||||
|
availableGold--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (adjustedQuantity > cardCost) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,10 +44,11 @@ export const buyCard = (state: AppState, setState: setStateType, card: CardData)
|
|||||||
const updatedPlayer = newPlayers[idx];
|
const updatedPlayer = newPlayers[idx];
|
||||||
|
|
||||||
// pointers for each value to be modified
|
// pointers for each value to be modified
|
||||||
const cardCost = card.resourceCost;
|
const cardCost: ResourceCost = card.resourceCost;
|
||||||
const playerBuyingPower = getTotalBuyingPower(currentPlayer);
|
const playerBuyingPower = getTotalBuyingPower(currentPlayer);
|
||||||
const newPlayerInventory = updatedPlayer.inventory;
|
const newPlayerInventory = updatedPlayer.inventory;
|
||||||
const newResourcePool = prev.gameboard.tradingResources;
|
const newResourcePool = prev.gameboard.tradingResources;
|
||||||
|
let availableGold = updatedPlayer.inventory.gold || 0;
|
||||||
|
|
||||||
for (let key of Object.keys(cardCost)) {
|
for (let key of Object.keys(cardCost)) {
|
||||||
const typedKey = key as keyof ResourceCost;
|
const typedKey = key as keyof ResourceCost;
|
||||||
|
|||||||
88
src/components/Player/ActionMethods/tests/buyCard.test.ts
Normal file
88
src/components/Player/ActionMethods/tests/buyCard.test.ts
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
import { describe, expect, test } from "vitest"
|
||||||
|
import { initialState } from "../../../../hooks/stateSetters"
|
||||||
|
import { mockPlayerTwo } from "../../../../util/testUtils"
|
||||||
|
import { AppState, CardData, PlayerData } from "../../../../util/types"
|
||||||
|
import { tooExpensive } from "../buyCardActions"
|
||||||
|
|
||||||
|
describe("buy card methods", () => {
|
||||||
|
test("tooExpensive", () => {
|
||||||
|
const card: CardData = {
|
||||||
|
gemValue: 'ruby',
|
||||||
|
tier: 3,
|
||||||
|
points: 0,
|
||||||
|
resourceCost: {
|
||||||
|
ruby: 0,
|
||||||
|
sapphire: 0,
|
||||||
|
emerald: 0,
|
||||||
|
diamond: 0,
|
||||||
|
onyx: 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const testPlayer: PlayerData = {
|
||||||
|
name: "Test Player",
|
||||||
|
id: 1,
|
||||||
|
starter: true,
|
||||||
|
turnActive: true,
|
||||||
|
points: 0,
|
||||||
|
cards: [],
|
||||||
|
nobles: [],
|
||||||
|
inventory: {
|
||||||
|
ruby: 1,
|
||||||
|
sapphire: 1,
|
||||||
|
emerald: 1,
|
||||||
|
diamond: 1,
|
||||||
|
onyx: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const sampleState: AppState = {
|
||||||
|
...initialState,
|
||||||
|
players: [testPlayer, mockPlayerTwo]
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(tooExpensive(card, sampleState)).toBeTruthy();
|
||||||
|
})
|
||||||
|
|
||||||
|
test('tooExpensive accounts for gold chips', () => {
|
||||||
|
const card: CardData = {
|
||||||
|
gemValue: 'ruby',
|
||||||
|
tier: 3,
|
||||||
|
points: 0,
|
||||||
|
resourceCost: {
|
||||||
|
ruby: 0,
|
||||||
|
sapphire: 0,
|
||||||
|
emerald: 0,
|
||||||
|
diamond: 0,
|
||||||
|
onyx: 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const testPlayer: PlayerData = {
|
||||||
|
name: "Test Player",
|
||||||
|
id: 1,
|
||||||
|
starter: true,
|
||||||
|
turnActive: true,
|
||||||
|
points: 0,
|
||||||
|
cards: [],
|
||||||
|
nobles: [],
|
||||||
|
inventory: {
|
||||||
|
ruby: 1,
|
||||||
|
sapphire: 1,
|
||||||
|
emerald: 1,
|
||||||
|
diamond: 1,
|
||||||
|
onyx: 2,
|
||||||
|
gold: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const sampleState: AppState = {
|
||||||
|
...initialState,
|
||||||
|
players: [testPlayer, mockPlayerTwo]
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(tooExpensive(card, sampleState)).toBeFalsy();
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
export default {}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { describe, expect, it, test } from "vitest";
|
import { describe, expect, it, test } from "vitest";
|
||||||
import { initialActions } from "../../../hooks/stateSetters";
|
import { initialActions } from "../../../../hooks/stateSetters";
|
||||||
import { mockPlayerOne, mockState } from "../../../util/testUtils";
|
import { mockPlayerOne, mockState } from "../../../../util/testUtils";
|
||||||
import { AppState, PlayerData } from "../../../util/types";
|
import { AppState, PlayerData } from "../../../../util/types";
|
||||||
import { hasMaxChips, validateChips } from "./getChipsActions";
|
import { hasMaxChips, validateChips } from "../getChipsActions";
|
||||||
|
|
||||||
const getChipsState: AppState = {
|
const getChipsState: AppState = {
|
||||||
...mockState,
|
...mockState,
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default {}
|
||||||
Reference in New Issue
Block a user