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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #18
0
        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);
        }