tooExpensive gold chips test fails

This commit is contained in:
2022-08-09 14:57:31 -05:00
parent 35931eb8e5
commit 6a40c0e592
6 changed files with 108 additions and 63 deletions

View File

@@ -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', () => {})

View File

@@ -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;

View 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 {}

View File

@@ -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,

View File

@@ -0,0 +1 @@
export default {}