public void LoansAreHonored() { BoardState state = DataTest.SampleGame; ProposeLoanAction propose = new ProposeLoanAction { LoanAmount = 123m, PayBack = 999m, Period = state.Settings.YearLength, PlayerId = 0 }; state = Tick.Apply(state, new List <GameAction> { propose }); int loanId = state.Proposals.FindIndex(l => l.LoanAmount == 123m); TakeLoanAction loan = new TakeLoanAction { LoanProposalId = loanId, PlayerId = 1 }; state = Tick.Apply(state, new List <GameAction> { loan }); Thread.Sleep(state.Settings.YearLength); state = Tick.Apply(state, new List <GameAction> { }); Assert.AreEqual(-1, state.Loans.FindIndex(l => l.Amount == 123m)); Assert.That(500m < state.Players[0].Cash); }
public void DefaultLoanAlwaysShowsUpFirst() { BoardState state = DataTest.SampleGame; state.Proposals = new List <LoanProposal>(); ProposeLoanAction loan = new ProposeLoanAction { PlayerId = 0, LoanAmount = 100m, PayBack = 101m, Period = state.Settings.YearLength }; state = Tick.Apply(state, new List <GameAction> { loan }); Assert.Greater(state.Proposals.Count, 1); Assert.AreEqual(-1, state.Proposals[0].PlayerId); Assert.AreEqual(state.Settings.YearLength.Ticks * state.Settings.DefaultLoanYears, state.Proposals[0].Period.Ticks); }
public void ProposeLoanShowsUp() { BoardState state = DataTest.SampleGame; ProposeLoanAction loan = new ProposeLoanAction { PlayerId = 0, LoanAmount = 123m, PayBack = 124m, Period = state.Settings.YearLength }; state = Tick.Apply(state, new List <GameAction> { loan }); LoanProposal prop = state.Proposals.First(l => l.LoanAmount == 123m); Assert.AreEqual(0, prop.PlayerId); Assert.AreEqual(123m, prop.LoanAmount); Assert.AreEqual(124m, prop.PayBack); Assert.AreEqual(state.Settings.YearLength, prop.Period); }
public void CannotWithdrawSomeoneElsesProposal() { BoardState state = DataTest.SampleGame; ProposeLoanAction loan = new ProposeLoanAction { PlayerId = 0, LoanAmount = 123m, PayBack = 124m, Period = state.Settings.YearLength }; state = Tick.Apply(state, new List <GameAction> { loan }); int withdrawId = state.Proposals.FindIndex(p => p.LoanAmount == 123m); WithdrawProposalAction withdraw = new WithdrawProposalAction { PlayerId = 1, ProposalId = withdrawId }; state = Tick.Apply(state, new List <GameAction> { withdraw }); Assert.AreEqual(1, state.Proposals.Count(p => p.LoanAmount == 123m)); }
public void TakeLoanActionHonored() { BoardState state = DataTest.SampleGame; ProposeLoanAction propose = new ProposeLoanAction { LoanAmount = 123m, PayBack = 120m, Period = state.Settings.YearLength, PlayerId = 0 }; state = Tick.Apply(state, new List <GameAction> { propose }); int loanId = state.Proposals.FindIndex(l => l.LoanAmount == 123m); TakeLoanAction loan = new TakeLoanAction { LoanProposalId = loanId, PlayerId = 1 }; state = Tick.Apply(state, new List <GameAction> { loan }); Assert.Greater(-90, state.Players[0].Cash); Assert.Less(90, state.Players[1].Cash); }
public void SerializeItAll() { JoinAction join = new JoinAction { PlayerId = 1, PlayerName = "Test Player" }; HireWorkerAction hire = new HireWorkerAction { PlayerId = 2 }; FireWorkerAction fire = new FireWorkerAction { PlayerId = 3 }; ProposeLoanAction propose = new ProposeLoanAction { PlayerId = 4, Period = TimeSpan.FromMinutes(1.0), PayBack = 20m, LoanAmount = 15m }; WithdrawProposalAction withdraw = new WithdrawProposalAction { PlayerId = 5, ProposalId = 2 }; GiveGiftAction gift = new GiveGiftAction { PlayerId = 6, ToPlayerId = 2, GiftAmount = 10.2m }; AssignWorkerAction research = new AssignWorkerAction { PlayerId = 7, Work = Job.Research, WorkerId = 1 }; AssignWorkerAction factory = new AssignWorkerAction { PlayerId = 8, Work = Job.Factory, WorkerId = 2 }; TakeLoanAction loan = new TakeLoanAction { PlayerId = 9, LoanProposalId = 1 }; StringBuilder sb = new StringBuilder(); sb.Append("{\"gameJson\": "); sb.Append(DataTest.SampleGame.ToJson()); sb.Append("\n, \"NoOp\": "); sb.Append(new NoOpAction().ToJson()); sb.Append("\n \"JoinGame\": "); sb.Append(join.ToJson()); sb.Append("\n \"HireWorker\": "); sb.Append(hire.ToJson()); sb.Append("\n \"FireWorker\": "); sb.Append(fire.ToJson()); sb.Append("\n \"ProposeLoan\": "); sb.Append(propose.ToJson()); sb.Append("\n \"WithdrawProposal\": "); sb.Append(withdraw.ToJson()); sb.Append("\n \"GiveGift\": "); sb.Append(gift.ToJson()); sb.Append("\n \"AssignWorkerResearch\": "); sb.Append(research.ToJson()); sb.Append("\n \"AssignWorkerFactory\": "); sb.Append(factory.ToJson()); sb.Append("\n \"TakeLoan\": "); sb.Append(loan.ToJson()); List <GameAction> actions = new List <GameAction> { hire, fire, loan }; string json = GameAction.SerializeList(actions); List <GameAction> fromJson = GameAction.DeserializeList(json); List <GameAction> empty = new List <GameAction>(); json = GameAction.SerializeList(empty); fromJson = GameAction.DeserializeList(json); }