public async Task CreateOrder_PerformsServerRequest() { Mock<IOrderRepository> mockOrderRepository = new Mock<IOrderRepository>(); IoC.Instance.RegisterInstance(mockOrderRepository.Object); Mock<IOfferRepository> mockOfferRepository = new Mock<IOfferRepository>(); IoC.Instance.RegisterInstance(mockOfferRepository.Object); Mock<IOrderService> mockOrderService = new Mock<IOrderService>(); IoC.Instance.RegisterInstance(mockOrderService.Object); Mock<IOfferService> mockOfferService = new Mock<IOfferService>(); IoC.Instance.RegisterInstance(mockOfferService.Object); IoC.Instance.Register<ISchedulerService>(() => new SchedulerService()); // Configure it to return a specific object when its CreateOrder() method is called. mockOrderService.Setup(x => x.CreateOrder(It.IsAny<int>())).Returns((int id) => Observable.Return(new Order(new OrderEntity { Id = id }))); // GIVEN OrdersController controller = new OrdersController(); // WHEN // Call the CreateOrder method, and see what happens. ActionResult result = await controller.Create(); // THEN // the controller should call the IOrderService.CreateOrder() method, once. mockOrderService.Verify(x => x.CreateOrder(42), Times.Once()); // the result returned is valid Assert.IsNotNull(result); }
public async Task CreateOrder_HandlesTimeoutGracefully() { Mock<IOrderRepository> mockOrderRepository = new Mock<IOrderRepository>(); IoC.Instance.RegisterInstance(mockOrderRepository.Object); Mock<IOfferRepository> mockOfferRepository = new Mock<IOfferRepository>(); IoC.Instance.RegisterInstance(mockOfferRepository.Object); Mock<IOrderService> mockOrderService = new Mock<IOrderService>(); IoC.Instance.RegisterInstance(mockOrderService.Object); Mock<IOfferService> mockOfferService = new Mock<IOfferService>(); IoC.Instance.RegisterInstance(mockOfferService.Object); IoC.Instance.Register<ISchedulerService>(() => new SchedulerService()); var scheduler = IoC.Instance.Resolve<ISchedulerService>(); // Configure it to return a specific object when its CreateOrder() method is called. mockOrderService.Setup(x => x.CreateOrder(It.IsAny<int>())).Returns((int id) => { // Simulate a 90 second delay return Observable .Return(new Order(new OrderEntity {Id = id})) .Delay(TimeSpan.FromSeconds(90), scheduler.Pool); // Simulate a long running request }); // GIVEN OrdersController controller = new OrdersController(); // WHEN // Call the CreateOrder method, and see what happens. ActionResult result = await controller.Create(); // THEN // the controller should call the IOrderService.CreateOrder() method, once. mockOrderService.Verify(x => x.CreateOrder(42), Times.Once()); // but the result (due to timeout) must be a "not found". Assert.IsInstanceOfType(result, typeof(HttpNotFoundResult)); }