diff --git a/src/main/java/org/gaas/kuhhandel/bean/Bid.java b/src/main/java/org/gaas/kuhhandel/bean/Bid.java index 9092b12..fcf9be2 100644 --- a/src/main/java/org/gaas/kuhhandel/bean/Bid.java +++ b/src/main/java/org/gaas/kuhhandel/bean/Bid.java @@ -23,8 +23,10 @@ public class Bid implements Serializable{ private GameStatusEnum resultStatus; private String initiateTraderId; private String respondentId; - private HashMap animalCardMap; - private List moneyCards; + private HashMap animalCardMap ; + private List moneyCards; + private HashMap respondentAnimalCardMap; + private List respondentMoneyCards; private Integer tradingCount = Integer.valueOf(0); } diff --git a/src/test/java/org/gaas/kuhhandel/exampleMapping/kuhhandelTest.java b/src/test/java/org/gaas/kuhhandel/exampleMapping/kuhhandelTest.java index 8059f84..9f184a5 100644 --- a/src/test/java/org/gaas/kuhhandel/exampleMapping/kuhhandelTest.java +++ b/src/test/java/org/gaas/kuhhandel/exampleMapping/kuhhandelTest.java @@ -1,6 +1,7 @@ package org.gaas.kuhhandel.exampleMapping; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; @@ -15,6 +16,8 @@ import org.gaas.kuhhandel.bean.HandCard; import org.gaas.kuhhandel.bean.MoneyCard; import org.gaas.kuhhandel.bean.PlayUser; +import org.gaas.kuhhandel.bean.demo.websocket.Player; +import org.gaas.kuhhandel.bean.demo.websocket.Room; import org.gaas.kuhhandel.bean.demo.websocket.RoomB; import org.gaas.kuhhandel.eum.AnimalCardEnum; import org.gaas.kuhhandel.eum.ControllerTypeEnum; @@ -37,7 +40,8 @@ public void init() { } - private PlayUser initRespondent(Game game, String id, HashMap animalCardMap, List respondentMoneyCards) { + private PlayUser initRespondent(Game game, String id, HashMap animalCardMap, + List respondentMoneyCards) { HandCard respondentHandCard = new HandCard(id, animalCardMap, respondentMoneyCards); PlayUser playUser = new PlayUser(game, id, 2, 50, 0, respondentHandCard); return Mockito.spy(playUser); @@ -72,7 +76,7 @@ public void givenNexRroundStarts_whenTrading_thenUpdateGameData() { game.setCurrentRound(7); game.setGameStatus(GameStatusEnum.ROUND_STARTS); game.setController(ControllerTypeEnum.PLAYER); - + // 初始化發起交易者手牌 PlayUser playUserA = initTrader(game, "1"); players.put(playUserA.getId(), playUserA); @@ -85,7 +89,7 @@ public void givenNexRroundStarts_whenTrading_thenUpdateGameData() { respondentMoneyCardsB.add(new MoneyCard(200, 1)); PlayUser playUserB = initRespondent(game, "2", animalCardMapB, respondentMoneyCardsB); players.put(playUserB.getId(), playUserB); - + HashMap animalCardMapC = new HashMap<>(); animalCardMapC.put(AnimalCardEnum.DOG, 1); List respondentMoneyCardsC = new ArrayList(); @@ -93,30 +97,31 @@ public void givenNexRroundStarts_whenTrading_thenUpdateGameData() { respondentMoneyCardsC.add(new MoneyCard(200, 1)); PlayUser playUserC = initRespondent(game, "3", animalCardMapC, respondentMoneyCardsC); players.put(playUserC.getId(), playUserC); - + game.setCurrentPlayerId(playUserA.getId()); - - //given -// given(playUserA.isCurrentPlayer()).willReturn(true); - - //when + + // given + // given(playUserA.isCurrentPlayer()).willReturn(true); + + // when List BidOptions = playUserA.selectBid(); - - //then + + // then then(playUserA).should().isCurrentPlayer(); - + assertEquals(BidOptions.size(), 2); - List validBidOptions = List.of(new BidOption("2",List.of(AnimalCardEnum.HORSE)), new BidOption("3",List.of(AnimalCardEnum.DOG))); - - //遊戲狀態變更為"幕後交易 被指定玩家 選擇回合權" + List validBidOptions = List.of(new BidOption("2", List.of(AnimalCardEnum.HORSE)), + new BidOption("3", List.of(AnimalCardEnum.DOG))); + + // 遊戲狀態變更為"幕後交易 被指定玩家 選擇回合權" assertEquals(GameStatusEnum.TRADING_PLAYER, game.getGameStatus()); // 驗證選擇幕後交易的回傳值 assertEquals(validBidOptions, BidOptions); - //回合控制權玩家A交易者 + // 回合控制權玩家A交易者 assertEquals(ControllerTypeEnum.PLAYER, game.getController()); assertEquals(playUserA.getId(), game.getCurrentPlayerId()); } - + /** * 接受出價 */ @@ -132,7 +137,7 @@ public void givenValidBid_whenAcceptBid_thenUpdateGameData() { game.setCurrentRound(9); game.setGameStatus(GameStatusEnum.TRADING_PLAYER); game.setController(ControllerTypeEnum.PLAYER); - + // 初始化發起交易者手牌 PlayUser playUserA = initTrader(game, "1"); players.put(playUserA.getId(), playUserA); @@ -145,7 +150,7 @@ public void givenValidBid_whenAcceptBid_thenUpdateGameData() { respondentMoneyCardsB.add(new MoneyCard(200, 1)); PlayUser playUserB = initRespondent(game, "2", animalCardMapB, respondentMoneyCardsB); players.put(playUserB.getId(), playUserB); - + HashMap animalCardMapC = new HashMap<>(); animalCardMapC.put(AnimalCardEnum.DOG, 1); List respondentMoneyCardsC = new ArrayList(); @@ -153,36 +158,116 @@ public void givenValidBid_whenAcceptBid_thenUpdateGameData() { respondentMoneyCardsC.add(new MoneyCard(200, 1)); PlayUser playUserC = initRespondent(game, "3", animalCardMapC, respondentMoneyCardsC); players.put(playUserC.getId(), playUserC); - + game.setCurrentPlayerId(playUserB.getId()); - - //交易的手牌-動物卡 + + // 交易的手牌-動物卡 HashMap animalCardMap = new HashMap<>(); animalCardMap.put(AnimalCardEnum.HORSE, 1); - - //交易的手牌-金錢卡 + + // 交易的手牌-金錢卡 List moneyCards = new ArrayList(); MoneyCard moneyCard = new MoneyCard(100, 1); moneyCards.add(moneyCard); - - //發起幕後交易的資料 - Bid bid = new Bid(null, playUserA.getId(), playUserB.getId(), animalCardMap, moneyCards, 0); + + // 發起幕後交易的資料 + Bid bid = new Bid(null, playUserA.getId(), playUserB.getId(), animalCardMap, moneyCards,null,null, 0); given(playUserB.validBid(bid)).willReturn(true); - //when + // when playUserB.acceptBid(bid); - - //then - //後端保留幕後交易資料 + + // then + // 後端保留幕後交易資料 assertEquals(game.getBid(), bid); assertEquals(game.getBid().getResultStatus(), GameStatusEnum.TRADING_PLAYER_ACCEPT_BID); assertEquals(game.getBid().getInitiateTraderId(), bid.getInitiateTraderId()); assertEquals(game.getBid().getRespondentId(), bid.getRespondentId()); assertEquals(game.getBid().getAnimalCardMap(), bid.getAnimalCardMap()); assertEquals(game.getBid().getMoneyCards(), bid.getMoneyCards()); - //遊戲狀態變更為"幕後交易 系統 判斷議價價高者或平手,與分配金錢卡與動物卡" + // 遊戲狀態變更為"幕後交易 系統 判斷議價價高者或平手,與分配金錢卡與動物卡" + assertEquals(game.getGameStatus(), GameStatusEnum.TRADING_JUDGMENT); + // 回合控制權移交給系統 + assertEquals(game.getController(), ControllerTypeEnum.SYSTEM); + } + + /** + * 選擇還價 + */ + @Test + public void givenValidBid_whenDicker_thenUpdateGameData() { + // 初始化遊戲資料 + RoomB room = new RoomB(); + room.setId(RandomIdUtils.generateRandomId()); + room.setName("Room"); + ConcurrentHashMap players = room.getPlayers(); + Game game = new Game(); + game.setGameId(RandomIdUtils.generateRandomId()); + game.setRoom(room); + game.setCurrentRound(9); + game.setGameStatus(GameStatusEnum.TRADING_PLAYER); + game.setController(ControllerTypeEnum.PLAYER); + + // 初始化發起幕後交易者手牌-玩家A + PlayUser playUserA = initTrader(game, "1"); + players.put(playUserA.getId(), playUserA); + + // 初始化被指定交易者手牌-玩家B + HashMap animalCardMapB = new HashMap<>(); + animalCardMapB.put(AnimalCardEnum.HORSE, 1); + List respondentMoneyCardsB = new ArrayList(); + respondentMoneyCardsB.add(new MoneyCard(0, 1)); + respondentMoneyCardsB.add(new MoneyCard(50, 2)); + respondentMoneyCardsB.add(new MoneyCard(200, 1)); + PlayUser playUserB = initRespondent(game, "2", animalCardMapB, respondentMoneyCardsB); + players.put(playUserB.getId(), playUserB); + + // 初始化其他玩家手牌-玩家C + HashMap animalCardMapC = new HashMap<>(); + animalCardMapC.put(AnimalCardEnum.DOG, 1); + List respondentMoneyCardsC = new ArrayList(); + respondentMoneyCardsC.add(new MoneyCard(50, 2)); + respondentMoneyCardsC.add(new MoneyCard(200, 1)); + PlayUser playUserC = initRespondent(game, "3", animalCardMapC, respondentMoneyCardsC); + players.put(playUserC.getId(), playUserC); + + game.setCurrentPlayerId(playUserB.getId()); + + // 交易的手牌-動物卡 + HashMap animalCardMapA = new HashMap<>(); + animalCardMapA.put(AnimalCardEnum.HORSE, 1); + + // 交易的手牌-金錢卡 + List moneyCardsA = new ArrayList(); + MoneyCard moneyCardA = new MoneyCard(100, 1); + moneyCardsA.add(moneyCardA); + + // 發起幕後交易的資料 + Bid bid = new Bid(null, playUserA.getId(), playUserB.getId(), animalCardMapA, moneyCardsA,null,null, 0); + given(playUserB.validBid(bid)).willReturn(true); + + // 被指定玩家選擇的手牌-金錢卡 + List moneyCardsB = new ArrayList(); + MoneyCard moneyCardB = new MoneyCard(0, 1); + moneyCardsB.add(moneyCardB); + + // when + // 被指定玩家B 選擇金錢卡(0元*1) + bid.setRespondentMoneyCards(moneyCardsB); + + // then + // 後端保留幕後交易資料 + assertEquals(game.getBid(), bid); + assertEquals(game.getBid().getResultStatus(), GameStatusEnum.TRADING_PLAYER_DICKER); + assertEquals(game.getBid().getInitiateTraderId(), bid.getInitiateTraderId()); + assertEquals(game.getBid().getRespondentId(), bid.getRespondentId()); + assertEquals(game.getBid().getAnimalCardMap(), bid.getAnimalCardMap()); + assertEquals(game.getBid().getMoneyCards(), bid.getMoneyCards()); + assertEquals(game.getBid().getRespondentAnimalCardMap(), bid.getRespondentAnimalCardMap()); + assertEquals(game.getBid().getRespondentMoneyCards(), bid.getRespondentMoneyCards()); + // 遊戲狀態變更為"幕後交易 系統 判斷議價價高者或平手,與分配金錢卡與動物卡" assertEquals(game.getGameStatus(), GameStatusEnum.TRADING_JUDGMENT); - //回合控制權移交給系統 + // 回合控制權移交給系統 assertEquals(game.getController(), ControllerTypeEnum.SYSTEM); } }