Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add:BDD:選擇還價 #7

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/main/java/org/gaas/kuhhandel/bean/Bid.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ public class Bid implements Serializable{
private GameStatusEnum resultStatus;
private String initiateTraderId;
private String respondentId;
private HashMap<AnimalCardEnum, Integer> animalCardMap;
private List<MoneyCard> moneyCards;
private HashMap<AnimalCardEnum, Integer> animalCardMap ;
private List<MoneyCard> moneyCards;
private HashMap<AnimalCardEnum, Integer> respondentAnimalCardMap;
private List<MoneyCard> respondentMoneyCards;
private Integer tradingCount = Integer.valueOf(0);

}
151 changes: 118 additions & 33 deletions src/test/java/org/gaas/kuhhandel/exampleMapping/kuhhandelTest.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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;
Expand All @@ -37,7 +40,8 @@ public void init() {

}

private PlayUser initRespondent(Game game, String id, HashMap<AnimalCardEnum, Integer> animalCardMap, List<MoneyCard> respondentMoneyCards) {
private PlayUser initRespondent(Game game, String id, HashMap<AnimalCardEnum, Integer> animalCardMap,
List<MoneyCard> respondentMoneyCards) {
HandCard respondentHandCard = new HandCard(id, animalCardMap, respondentMoneyCards);
PlayUser playUser = new PlayUser(game, id, 2, 50, 0, respondentHandCard);
return Mockito.spy(playUser);
Expand Down Expand Up @@ -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);
Expand All @@ -85,38 +89,39 @@ public void givenNexRroundStarts_whenTrading_thenUpdateGameData() {
respondentMoneyCardsB.add(new MoneyCard(200, 1));
PlayUser playUserB = initRespondent(game, "2", animalCardMapB, respondentMoneyCardsB);
players.put(playUserB.getId(), playUserB);

HashMap<AnimalCardEnum, Integer> animalCardMapC = new HashMap<>();
animalCardMapC.put(AnimalCardEnum.DOG, 1);
List<MoneyCard> respondentMoneyCardsC = new ArrayList<MoneyCard>();
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(playUserA.getId());
//given
// given(playUserA.isCurrentPlayer()).willReturn(true);
//when

// given
// given(playUserA.isCurrentPlayer()).willReturn(true);

// when
List<BidOption> BidOptions = playUserA.selectBid();
//then

// then
then(playUserA).should().isCurrentPlayer();

assertEquals(BidOptions.size(), 2);
List<BidOption> validBidOptions = List.of(new BidOption("2",List.of(AnimalCardEnum.HORSE)), new BidOption("3",List.of(AnimalCardEnum.DOG)));

//遊戲狀態變更為"幕後交易 被指定玩家 選擇回合權"
List<BidOption> 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());
}

/**
* 接受出價
*/
Expand All @@ -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);
Expand All @@ -145,44 +150,124 @@ public void givenValidBid_whenAcceptBid_thenUpdateGameData() {
respondentMoneyCardsB.add(new MoneyCard(200, 1));
PlayUser playUserB = initRespondent(game, "2", animalCardMapB, respondentMoneyCardsB);
players.put(playUserB.getId(), playUserB);

HashMap<AnimalCardEnum, Integer> animalCardMapC = new HashMap<>();
animalCardMapC.put(AnimalCardEnum.DOG, 1);
List<MoneyCard> respondentMoneyCardsC = new ArrayList<MoneyCard>();
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<AnimalCardEnum, Integer> animalCardMap = new HashMap<>();
animalCardMap.put(AnimalCardEnum.HORSE, 1);
//交易的手牌-金錢卡

// 交易的手牌-金錢卡
List<MoneyCard> moneyCards = new ArrayList<MoneyCard>();
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<String, PlayUser> 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<AnimalCardEnum, Integer> animalCardMapB = new HashMap<>();
animalCardMapB.put(AnimalCardEnum.HORSE, 1);
List<MoneyCard> respondentMoneyCardsB = new ArrayList<MoneyCard>();
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<AnimalCardEnum, Integer> animalCardMapC = new HashMap<>();
animalCardMapC.put(AnimalCardEnum.DOG, 1);
List<MoneyCard> respondentMoneyCardsC = new ArrayList<MoneyCard>();
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<AnimalCardEnum, Integer> animalCardMapA = new HashMap<>();
animalCardMapA.put(AnimalCardEnum.HORSE, 1);

// 交易的手牌-金錢卡
List<MoneyCard> moneyCardsA = new ArrayList<MoneyCard>();
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<MoneyCard> moneyCardsB = new ArrayList<MoneyCard>();
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);
}
}