public void BreakPadsAndDiscsWereChangedAtTheSameTime()
        {
            var breakPads = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Break Pads",
                UnitCost        = 50,
                ItemName        = "Pads",
                ItemTime        = 60
            };

            var discs = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Discs",
                UnitCost        = 90,
                ItemName        = "Discs",
                ItemTime        = 100
            };

            _jobSheet.Items = new List <Item>();
            _jobSheet.Items.Add(breakPads);
            _jobSheet.Items.Add(discs);


            var jobApprovalDecision   = new JobApprovalDecision(JobApprovalDecisionEnum.Approved);
            var jobRulesEvaluatorMock = new Mock <JobRulesEvaluator>()
            {
                CallBase = true
            };

            Assert.AreEqual(jobApprovalDecision.JobApprovalDecisionEnum, jobRulesEvaluatorMock.Object.EvaluateBreakPadsAndDiscsChangeTogetherRule(_jobSheet).JobApprovalDecisionEnum);
            Assert.AreEqual(jobApprovalDecision.ReasonForDeclining, jobRulesEvaluatorMock.Object.EvaluateBreakPadsAndDiscsChangeTogetherRule(_jobSheet).ReasonForDeclining);
        }
        public void ReferenceHoursExceedTotalHoursOfLabour()
        {
            var pads = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Break Pads",
                UnitCost        = 50,
                ItemName        = "Pads",
                ItemTime        = 60
            };

            var discs = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Break Discs",
                UnitCost        = 90,
                ItemName        = "Discs",
                ItemTime        = 160
            };

            _jobSheet.ReferenceHoursInMin = 221;
            _jobSheet.Items = new List <Item>();
            _jobSheet.Items.Add(pads);
            _jobSheet.Items.Add(discs);

            var jobApprovalDecision   = new JobApprovalDecision(JobApprovalDecisionEnum.Declined);
            var jobRulesEvaluatorMock = new Mock <JobRulesEvaluator>()
            {
                CallBase = true
            };

            Assert.AreEqual(jobApprovalDecision.JobApprovalDecisionEnum, jobRulesEvaluatorMock.Object.EvaluateReferenceHoursNotExceedTotalHoursOfLabourRule(_jobSheet).JobApprovalDecisionEnum);
        }
        public void TyresChangedInPairsAndMaxFour()
        {
            var tyreOne = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Tyres",
                UnitCost        = 200,
                ItemName        = "Tyre One",
                ItemTime        = 30
            };

            var tyreTwo = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Tyres",
                UnitCost        = 200,
                ItemName        = "Tyre Two",
                ItemTime        = 30
            };

            _jobSheet.Items = new List <Item>();
            _jobSheet.Items.Add(tyreOne);
            _jobSheet.Items.Add(tyreTwo);

            var jobApprovalDecision   = new JobApprovalDecision(JobApprovalDecisionEnum.Approved);
            var jobRulesEvaluatorMock = new Mock <JobRulesEvaluator>()
            {
                CallBase = true
            };

            Assert.AreEqual(jobApprovalDecision.JobApprovalDecisionEnum, jobRulesEvaluatorMock.Object.EvaluateTyresChangedInPairsAndMaxFourRule(_jobSheet).JobApprovalDecisionEnum);
        }
        public void ExceedingOneExhaust()
        {
            var exhaustOne = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Exhaust",
                UnitCost        = 175,
                ItemName        = "Exhaust 1",
                ItemTime        = 240
            };

            var exhaustTwo = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Exhaust",
                UnitCost        = 175,
                ItemName        = "Exhaust 2",
                ItemTime        = 240
            };

            _jobSheet.Items = new List <Item>();
            _jobSheet.Items.Add(exhaustOne);
            _jobSheet.Items.Add(exhaustTwo);

            var jobApprovalDecision   = new JobApprovalDecision(JobApprovalDecisionEnum.Declined);
            var jobRulesEvaluatorMock = new Mock <JobRulesEvaluator>()
            {
                CallBase = true
            };

            Assert.AreEqual(jobApprovalDecision.JobApprovalDecisionEnum, jobRulesEvaluatorMock.Object.EvaluateOneExhaustRule(_jobSheet).JobApprovalDecisionEnum);
        }
        public void DeclineOverallDecisionAbove15Percent()
        {
            var tyreOne = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Tyres",
                UnitCost        = 200,
                ItemName        = "Tyre One",
                ItemTime        = 30
            };

            var tyreTwo = new Item
            {
                ItemId          = Guid.NewGuid(),
                GenericCategory = "Tyres",
                UnitCost        = 200,
                ItemName        = "Tyre Two",
                ItemTime        = 30
            };

            _jobSheet.Items = new List <Item>();
            _jobSheet.Items.Add(tyreOne);
            _jobSheet.Items.Add(tyreTwo);

            var twelvePercent = (_jobSheet.TotalCost / 100) * (decimal)15.1;

            _jobSheet.ReferenceTotalPrice = _jobSheet.TotalCost + twelvePercent;

            var jobApprovalDecision   = new JobApprovalDecision(JobApprovalDecisionEnum.Declined);
            var jobRulesEvaluatorMock = new Mock <JobRulesEvaluator>()
            {
                CallBase = true
            };

            Assert.AreEqual(jobApprovalDecision.JobApprovalDecisionEnum, jobRulesEvaluatorMock.Object.EvaluateOverallDecisionRule(_jobSheet).JobApprovalDecisionEnum);
        }