diff --git a/src/components/Player/ActionMethods/buyCard.test.tsx b/src/components/Player/ActionMethods/buyCard.test.tsx deleted file mode 100644 index 4d28fc0..0000000 --- a/src/components/Player/ActionMethods/buyCard.test.tsx +++ /dev/null @@ -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', () => {}) \ No newline at end of file diff --git a/src/components/Player/ActionMethods/buyCardActions.ts b/src/components/Player/ActionMethods/buyCardActions.ts index a41e7e5..562547a 100644 --- a/src/components/Player/ActionMethods/buyCardActions.ts +++ b/src/components/Player/ActionMethods/buyCardActions.ts @@ -9,11 +9,23 @@ import usePreviousPlayer from "../../../hooks/usePreviousPlayer"; export const tooExpensive = (card: CardData, state: AppState): boolean => { const currentPlayer = useCurrentPlayer(state); if (!currentPlayer) return true; + + let availableGold = currentPlayer.inventory.gold || 0; for (let [cardGemType, cardCost] of Object.entries(card.resourceCost)) { let totalBuyingPower = getTotalBuyingPower(currentPlayer); for (let [heldResource, quantity] of Object.entries(totalBuyingPower)) { 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]; // pointers for each value to be modified - const cardCost = card.resourceCost; + const cardCost: ResourceCost = card.resourceCost; const playerBuyingPower = getTotalBuyingPower(currentPlayer); const newPlayerInventory = updatedPlayer.inventory; const newResourcePool = prev.gameboard.tradingResources; + let availableGold = updatedPlayer.inventory.gold || 0; for (let key of Object.keys(cardCost)) { const typedKey = key as keyof ResourceCost; diff --git a/src/components/Player/ActionMethods/reserveCard.test.ts b/src/components/Player/ActionMethods/reserveCard.test.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/Player/ActionMethods/tests/buyCard.test.ts b/src/components/Player/ActionMethods/tests/buyCard.test.ts new file mode 100644 index 0000000..541b458 --- /dev/null +++ b/src/components/Player/ActionMethods/tests/buyCard.test.ts @@ -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 {} \ No newline at end of file diff --git a/src/components/Player/ActionMethods/getChips.test.ts b/src/components/Player/ActionMethods/tests/getChips.test.ts similarity index 89% rename from src/components/Player/ActionMethods/getChips.test.ts rename to src/components/Player/ActionMethods/tests/getChips.test.ts index 293e55e..f4b59a0 100644 --- a/src/components/Player/ActionMethods/getChips.test.ts +++ b/src/components/Player/ActionMethods/tests/getChips.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it, test } from "vitest"; -import { initialActions } from "../../../hooks/stateSetters"; -import { mockPlayerOne, mockState } from "../../../util/testUtils"; -import { AppState, PlayerData } from "../../../util/types"; -import { hasMaxChips, validateChips } from "./getChipsActions"; +import { initialActions } from "../../../../hooks/stateSetters"; +import { mockPlayerOne, mockState } from "../../../../util/testUtils"; +import { AppState, PlayerData } from "../../../../util/types"; +import { hasMaxChips, validateChips } from "../getChipsActions"; const getChipsState: AppState = { ...mockState, diff --git a/src/components/Player/ActionMethods/tests/reserveCard.test.ts b/src/components/Player/ActionMethods/tests/reserveCard.test.ts new file mode 100644 index 0000000..56004c9 --- /dev/null +++ b/src/components/Player/ActionMethods/tests/reserveCard.test.ts @@ -0,0 +1 @@ +export default {} \ No newline at end of file