public void ApproveYoungCheapPlayerTransfer() { Mock <IPhysicalExamination> mockExamination = new Mock <IPhysicalExamination>(); //mockExamination.Setup(x => // x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>())).Returns(true); mockExamination.Setup(x => x.IsHealthy( It.Is <int>(age => age < 30), It.IsIn <int>(80, 85, 90), It.IsInRange <int>(75, 99, Range.Inclusive))) .Returns(true); var approval = new TransferApproval(mockExamination.Object); var emreTransfer = new TransferApplication { PlayerName = "Emre Can", PlayerAge = 24, TransferFee = 0, AnnualSalary = 4.52m, ContractYears = 4, IsSuperStar = false, PlayerStrength = 80, PlayerSpeed = 75, }; var result = approval.Evaluate(emreTransfer); Assert.Equal(TransferResult.Approved, result); }
public void ShouldPhysicalExamineWhenTransferringSuperStar() { var mockExamination = new Mock <IPhysicalExamination>(); mockExamination.Setup(x => x.MediacalRoom.Status.IsAvailable).Returns("Available"); mockExamination.SetupProperty(x => x.PhysicalGrade, PhysicalGrade.Passed); mockExamination.Setup(x => x.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())).Returns(true); var approval = new TransferApproval(mockExamination.Object); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); //mockExamination.Verify(x => x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>())); //mockExamination.Verify(x => x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()), Times.Once); //mockExamination.Verify(x => x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()), Times.Exactly(1); mockExamination.Verify(x => x.IsHealthy(33, 95, 88), Times.Never); }
public void ShouldPostponedWhenNotInTransferperiod() { //var mockExamination = new Mock<IPhysicalExamination>(); //mockExamination.Setup(x => x.MedicalRoom.Status.IsAvailable).Returns("xxx"); //mockExamination.SetupProperty(x => x.PhysicalGrade, PhysicalGrade.Passed); //mockExamination.Setup(x => // x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>())) // .Returns(true); //var mockTransferPlicy = new Mock<TransferPolicyEvaluator>(); //mockTransferPlicy.Setup(x => x.IsInTransferPeriod()).Returns(false); // approval = new TransferApproval(mockExamination.Object,mockTransferPlicy.Object); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.Postponed, result); }
public void ShouldPlayerHealthCheckedWhenTransferringSuperstar() { //var mockExamination = new Mock<IPhysicalExamination>(); //mockExamination.Setup(x => x.MedicalRoom.Status.IsAvailable).Returns("xxx"); //mockExamination.SetupProperty(x => x.PhysicalGrade, PhysicalGrade.Passed); //mockExamination.Setup(x => // x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>())) // .Returns(true) // .Raises(x=>x.HealthChecked += null,EventArgs.Empty); //var approval = new TransferApproval(mockExamination.Object); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); //mockExamination.Raise(x=>x.HealthChecked += null,EventArgs.Empty); Assert.True(approval.PlayerHealthChecked); }
public void PostponedWhenTransferringChildPlayer() { //var mockExamination = new Mock<IPhysicalExamination>(); //mockExamination.Setup(x => x.MedicalRoom.Status.IsAvailable).Returns("xxx"); //mockExamination.SetupProperty(x => x.PhysicalGrade, PhysicalGrade.Passed); //mockExamination.Setup(x => // x.IsHealthy(It.Is<int>(age => age < 16), It.IsAny<int>(), It.IsAny<int>())) // //.Throws<Exception>(); // .Throws(new Exception("The player is still a child")); //var approval = new TransferApproval(mockExamination.Object); var childTransfer = new TransferApplication { PlayerName = "Some Child Player", PlayerAge = 13, TransferFee = 0, AnnualSalary = 0.01m, ContractYears = 3, IsSuperStar = false, PlayerStrength = 40, PlayerSpeed = 50 }; var result = approval.Evaluate(childTransfer); Assert.Equal(TransferResult.Postponed, result); }
public TransferResult Evaluate(TransferApplication transfer) { var isHealthy = _physicalExamination .IsHealthy(transfer.PlayerAge, transfer.PlayerStrength, transfer.PlayerSpeed); if (!isHealthy) { return(TransferResult.Rejected); } var totalTransferFee = transfer.TransferFee + transfer.ContractYears * transfer.AnnualSalary; if (RemainingTotalBudget < totalTransferFee) { return(TransferResult.Rejected); } if (transfer.PlayerAge < 30) { return(TransferResult.Approved); } if (transfer.IsSuperStar) { return(TransferResult.ReferredToBoss); } return(TransferResult.Rejected); }
public void RejectedWhenExcessingBudget() { var mockExamination = new Mock <IPhysicalExamination> { DefaultValue = DefaultValue.Mock }; mockExamination.Setup(x => x.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())).Returns(true); var approval = new TransferApproval(mockExamination.Object); var mbappeTransfer = new TransferApplication { PlayerName = "Kylian Mbappé", PlayerAge = 19, TransferFee = 500m, AnnualSalary = 10m, ContractYears = 5, IsSuperStar = true, PlayerStrength = 85, PlayerSpeed = 92 }; var result = approval.Evaluate(mbappeTransfer); Assert.Equal(TransferResult.Rejected, result); }
public void ReferToBossWhenTransferringSuperStar() { //var mockExamination = new Mock<IPhysicalExamination> //{ // DefaultValue = DefaultValue.Mock //}; //mockExamination.Setup(x=>x.MedicalRoom.Status.IsAvailable); //mockExamination.Setup(x => // x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>())).Returns(true); //var approval = new TransferApproval(mockExamination.Object); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.ReferredToBoss, result); }
public void ShouldSetPhysicalGradeWhenTransferringSuperStar_Sequence() { mockExamination.SetupSequence(x => x.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())) .Returns(true) .Returns(false); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.ReferredToBoss, result); var result2 = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.Rejected, result2); }
public void LinqToMocks() { var mockExamination = Mock.Of <IPhysicalExamination> ( me => me.MediacalRoom.Status.IsAvailable == "Available" && me.PhysicalGrade == PhysicalGrade.Passed && me.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>()) == true ); var mockTransferPolicy = Mock.Of <TransferPolicyEvaluator> ( mt => mt.IsInTransferPeriod() == false ); approval = new TransferApproval(mockExamination, mockTransferPolicy); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.Postponed, result); }
public void ShouldPostponedWhenNotInTransferPeriod() { mockTransferPolicy.Setup(x => x.IsInTransferPeriod()).Returns(false); //mockTransferPolicy.Protected() // .Setup<bool>("IsBannedFromTransferring") // // .Setup<bool>("IsBannedFromTransferring", ItExpr.IsAny<string>()) // .Returns(true); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.Postponed, result); }
public void RejectedWhenPlayerIsNotHealthy() { var mockExamination = new Mock <IPhysicalExamination> { DefaultValue = DefaultValue.Mock }; mockExamination.Setup(x => x.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())).Returns(false); var approval = new TransferApproval(mockExamination.Object); var andreaContiTransfer = new TransferApplication { PlayerName = "Andrea Conti", PlayerAge = 22, TransferFee = 25m, AnnualSalary = 2.5m, ContractYears = 4, IsSuperStar = false, PlayerStrength = 75, PlayerSpeed = 91 }; var result = approval.Evaluate(andreaContiTransfer); Assert.Equal(TransferResult.Rejected, result); }
public void ReferredToBossWhenTransferringSuperStar() { var mockExamination = new Mock <IPhysicalExamination>(MockBehavior.Strict); mockExamination.Setup(x => x.MediacalRoom.Status.IsAvailable).Returns("Available"); mockExamination.SetupProperty(x => x.PhysicalGrade, PhysicalGrade.Passed); mockExamination.Setup(x => x.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())).Returns(true); var approval = new TransferApproval(mockExamination.Object); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.ReferredToBoss, result); }
public void PhysicalGradeShouldPassWhenTransferringSuperStar() { var mockExamination = new Mock <IPhysicalExamination> { DefaultValue = DefaultValue.Mock }; mockExamination.SetupAllProperties(); // 开始追踪PhysicalGrade属性 mockExamination.SetupProperty(x => x.PhysicalGrade, PhysicalGrade.Failed); mockExamination.Setup(x => x.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())).Returns(true); var approval = new TransferApproval(mockExamination.Object); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(PhysicalGrade.Passed, mockExamination.Object.PhysicalGrade); }
public void RejectedWhenNonSuperstarOldPlayer() { var mockExamination = new Mock <IPhysicalExamination> { DefaultValue = DefaultValue.Mock }; //bool isHealthy = true; //mockExamination.Setup(x => x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>(), out isHealthy)); mockExamination.Setup(x => x.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())).Returns(true); var approval = new TransferApproval(mockExamination.Object); var carlosBaccaTransfer = new TransferApplication { PlayerName = "Carlos Bacca", PlayerAge = 32, TransferFee = 15m, AnnualSalary = 3.5m, ContractYears = 4, IsSuperStar = false, PlayerStrength = 80, PlayerSpeed = 70 }; var result = approval.Evaluate(carlosBaccaTransfer); Assert.Equal(TransferResult.Rejected, result); }
public void ShouldCheckMedicalRoomIsAvailableWhenTransferringSuperStar() { var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); mockExamination.VerifyGet(x => x.MediacalRoom.Status.IsAvailable); }
public void ShouldSetPhysicalGradeWhenTransferringSuperStar() { var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); mockExamination.VerifySet(x => x.PhysicalGrade = PhysicalGrade.Passed); }
private const int RemainingTotalBudget = 300; // 剩余预算(百万) public TransferResult Evaluate(TransferApplication transfer) { var totalTransferFee = transfer.TransferFee + transfer.ContractYears * transfer.AnnualSalary; if (RemainingTotalBudget < totalTransferFee) { return(TransferResult.Rejected); } if (transfer.PlayerAge < 30) { return(TransferResult.Approved); } if (transfer.IsSuperStar) { return(TransferResult.ReferredToBoss); } return(TransferResult.Rejected); }
public void ApproveYoungCheapPlayerTransfer() { var emreTransfer = new TransferApplication { PlayerName = "Emre Can", PlayerAge = 24, TransferFee = 0, AnnualSalary = 4.52m, ContractYears = 4, IsSuperStar = false, PlayerStrength = 80, PlayerSpeed = 75, }; var result = approval.Evaluate(emreTransfer); Assert.Equal(TransferResult.Approved, result); }
public void ReferredToBossWhenTransferringSuperStar() { var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.ReferredToBoss, result); }
public void RejectedWhenNonSuperstarOldPlayer() { mockExamination.DefaultValue = DefaultValue.Mock; var carlosBaccaTransfer = new TransferApplication { PlayerName = "Carlos Bacca", PlayerAge = 32, TransferFee = 15m, AnnualSalary = 3.5m, ContractYears = 4, IsSuperStar = false, PlayerStrength = 80, PlayerSpeed = 70 }; var result = approval.Evaluate(carlosBaccaTransfer); Assert.Equal(TransferResult.Rejected, result); }
public void ShouldSetPhysicalGradeWhenTransferringSuperStar() { //var mockExamination = new Mock<IPhysicalExamination>(); //mockExamination.Setup(x => x.MedicalRoom.Status.IsAvailable).Returns("Avail"); //mockExamination.SetupProperty(x => x.PhysicalGrade, PhysicalGrade.Passed); ////mockExamination.Setup(x => //// x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>())) //// .Returns(true); //mockExamination.SetupSequence(x => // x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>())) // .Returns(true) // .Returns(false); //var approval = new TransferApproval(mockExamination.Object); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.ReferredToBoss, result); var result2 = approval.Evaluate(cr7Transfer); Assert.Equal(TransferResult.Rejected, result2); //确认set mockExamination.VerifySet(c => c.PhysicalGrade = PhysicalGrade.Passed); //mockExamination.VerifySet(c=>c.PhysicalGrade=PhysicalGrade.Superb); }
public void ShouldPhysicalExamineWhenTransferringSuperStar() { var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); //mockExamination.Verify(x => x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>())); //mockExamination.Verify(x => x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()), Times.Once); //mockExamination.Verify(x => x.IsHealthy(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()), Times.Exactly(1); mockExamination.Verify(x => x.IsHealthy(33, 95, 88), Times.Never); }
public void PhysicalGradeShouldPassWhenTransferringSuperStar() { mockExamination.DefaultValue = DefaultValue.Mock; // 开始追踪PhysicalGrade属性 mockExamination.SetupProperty(x => x.PhysicalGrade, PhysicalGrade.Failed); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); Assert.Equal(PhysicalGrade.Passed, mockExamination.Object.PhysicalGrade); }
public void PostponedWhenTransferringChildPlayer() { //mockExamination.Setup(x => x.IsHealthy(It.Is<int>(age => age < 16), It.IsAny<int>(), It.IsAny<int>())) // .Throws<Exception>(); mockExamination.Setup(x => x.IsHealthy(It.Is <int>(age => age < 16), It.IsAny <int>(), It.IsAny <int>())) .Throws(new Exception("The player is still a child")); var childTransfer = new TransferApplication { PlayerName = "Some Child Player", PlayerAge = 13, TransferFee = 0, AnnualSalary = 0.01m, ContractYears = 3, IsSuperStar = false, PlayerStrength = 40, PlayerSpeed = 50 }; var result = approval.Evaluate(childTransfer); Assert.Equal(TransferResult.Postponed, result); }
public void ShouldPlayerHealthCheckedWhenTransferringSuperStar() { mockExamination.Setup(x => x.IsHealthy(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>())) .Returns(true) .Raises(x => x.HealthChecked += null, EventArgs.Empty); var cr7Transfer = new TransferApplication { PlayerName = "Cristiano Ronaldo", PlayerAge = 33, TransferFee = 112m, AnnualSalary = 30m, ContractYears = 4, IsSuperStar = true, PlayerStrength = 90, PlayerSpeed = 90 }; var result = approval.Evaluate(cr7Transfer); // mockExamination.Raise(x => x.HealthChecked += null, EventArgs.Empty); Assert.True(approval.PlayerHealthChecked); }