public void Repricing_InvalidTickets_ExceptionThrown()
        {
            var order = new Order();
            var callDelegate = new TestDelegate(() => _pricingManager.RepricingAsync(order).Wait());

            Assert.Throws<AggregateException>(callDelegate);
            Assert.Throws<AggregateException>(callDelegate).InnerExceptions.Any(exception => exception is TicketNotValidException);
        }
        public void Repricing_DeltaHasNoChanges_MessageWithNoChanges()
        {
            var testOrder = new Order() {Price = 1000};
            _aviaService.IsTicketValidAsync(Arg.Any<string>()).Returns(info => Task.FromResult(true));
            _dpService.IsTicketValidAsync(Arg.Any<string>()).Returns(info => Task.FromResult(true));
            _aviaService.UpdateTicketPriceAsync(Arg.Any<string>()).Returns(info => new AviaPricesInfo {Price = testOrder.Price * 0.4});
            _dpService.UpdateBookingPriceAsync(Arg.Any<string>()).Returns(info => new HotelPricesInfo { Price = testOrder.Price * 0.6 });

            var repricingTask = _pricingManager.RepricingAsync(testOrder);
            repricingTask.Wait();
            var repricingInfo = repricingTask.Result;

            Assert.That(repricingInfo.Result, Is.EqualTo(StatusEnum.Confirmed));
        }
        public void Repricing_DeltaHasChanged_CriteriaChecked()
        {
            var testOrder = new Order() { Price = 1000 };
            var testCriteria = new FakeCriteria();
            
            _aviaService.IsTicketValidAsync(Arg.Any<string>()).Returns(info => Task.FromResult(true));
            _dpService.IsTicketValidAsync(Arg.Any<string>()).Returns(info => Task.FromResult(true));
            _aviaService.UpdateTicketPriceAsync(Arg.Any<string>()).Returns(info => new AviaPricesInfo { Price = testOrder.Price * 0.1 });
            _dpService.UpdateBookingPriceAsync(Arg.Any<string>()).Returns(info => new HotelPricesInfo { Price = testOrder.Price * 0.6 });
            _criteriaFactory.GetCriterias(Arg.Any<IOrder>()).Returns(info => new List<ICriteria> {testCriteria});
            _decisionFactory.GetDecisions(Arg.Any<ICriteria>()).Returns(info => new List<IDecision>());

            var repricingTask = _pricingManager.RepricingAsync(testOrder);
            repricingTask.Wait();
            var repricingInfo = repricingTask.Result;

            Assert.That(repricingInfo.Result, Is.EqualTo(StatusEnum.Changed));
            Assert.AreEqual(testCriteria.CheckCount, 1);
        }