public async Task TestConfirmationPostWhenClientIdHasValue() { // Arrange OrderData[1].CreatorId = "Creator1"; OrderData[1].Status = OrderStatusCodes.Created; OrderData[1].PaymentType = PaymentTypeCodes.Other; Controller.ErrorMessage = null; var orderDetails = CreateValidEntities.OrderDetails(2); orderDetails.OtherPaymentInfo.PaymentType = "SomethingElse"; orderDetails.ClientInfo.ClientId = "FAKE1"; OrderData[1].SaveDetails(orderDetails); MockLabworksService.Setup(a => a.GetClientDetails(It.IsAny <string>())).ReturnsAsync(CreateValidEntities.ClientDetailsLookupModel(2)); // Act var controllerResult = await Controller.Confirmation(2, true); // Assert Controller.ErrorMessage.ShouldBeNull(); OrderData[1].GetOrderDetails().Payment.AccountName.ShouldBeNull(); MockDbContext.Verify(a => a.SaveChangesAsync(new CancellationToken()), Times.Once); MockFinancialService.Verify(a => a.GetAccountName(It.IsAny <string>()), Times.Never); MockOrderMessagingService.Verify(a => a.EnqueueBillingMessage(OrderData[1], It.IsAny <string>()), Times.Never); MockOrderService.Verify(a => a.UpdateTestsAndPrices(OrderData[1]), Times.Once); MockOrderService.Verify(a => a.UpdateAdditionalInfo(OrderData[1]), Times.Once); MockLabworksService.Verify(a => a.GetClientDetails("FAKE1"), Times.Once); MockOrderMessagingService.Verify(a => a.EnqueueCreatedMessage(OrderData[1]), Times.Once); var redirectResult = Assert.IsType <RedirectToActionResult>(controllerResult); redirectResult.ActionName.ShouldBe("Confirmed"); redirectResult.RouteValues["id"].ShouldBe(2); redirectResult.ControllerName.ShouldBeNull(); var od = OrderData[1].GetOrderDetails(); od.ClientInfo.Email.ShouldBe("*****@*****.**"); od.ClientInfo.PhoneNumber.ShouldBe("SubPhone2"); od.ClientInfo.CopyPhone.ShouldBe("CopyPhone2"); od.ClientInfo.Department.ShouldBe("Department2"); }
/// <summary> /// Test Setup /// </summary> public OrderControllerTests() { //To return the user so can check identity. MockHttpContext = new Mock <HttpContext>(); MockOrderService = new Mock <IOrderService>(); MockOrderMessagingService = new Mock <IOrderMessageService>(); MockLabworksService = new Mock <ILabworksService>(); MockFinancialService = new Mock <IFinancialService>(); MockAppSettings = new Mock <IOptions <AppSettings> >(); MockDbContext = new Mock <ApplicationDbContext>(); MockClaimsPrincipal = new Mock <ClaimsPrincipal>(); var mockDataProvider = new Mock <SessionStateTempDataProvider>(); //Default data var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.NameIdentifier, "Creator1"), })); TestItemModelData = new List <TestItemModel>(); for (int i = 0; i < 10; i++) { TestItemModelData.Add(CreateValidEntities.TestItemModel(i + 1)); } OrderData = new List <Order>(); for (int i = 0; i < 3; i++) { var order = CreateValidEntities.Order(i + 1, true); order.Creator = CreateValidEntities.User(2); OrderData.Add(order); } var proc = new TestItemPrices(); proc.Id = "PROC"; proc.InternalCost = 6m; var appSettings = new AppSettings(); appSettings.NonUcRate = 1.9m; UserData = new List <User>() { CreateValidEntities.User(1, true), CreateValidEntities.User(2, true) }; UserData[0].Id = "Creator1"; //Setups MockClaimsPrincipal.Setup(a => a.Claims).Returns(user.Claims); MockClaimsPrincipal.Setup(a => a.IsInRole(RoleCodes.Admin)).Returns(false); MockClaimsPrincipal.Setup(a => a.FindFirst(It.IsAny <string>())).Returns(new Claim(ClaimTypes.NameIdentifier, "Creator1")); MockHttpContext.Setup(m => m.User).Returns(MockClaimsPrincipal.Object); MockDbContext.Setup(m => m.Orders).Returns(OrderData.AsQueryable().MockAsyncDbSet().Object); MockDbContext.Setup(a => a.Users).Returns(UserData.AsQueryable().MockAsyncDbSet().Object); MockOrderService.Setup(a => a.PopulateTestItemModel(It.IsAny <bool>())).ReturnsAsync(TestItemModelData); MockOrderService.Setup(a => a.PopulateOrder(It.IsAny <OrderSaveModel>(), It.IsAny <Order>())); MockLabworksService.Setup(a => a.GetPrice("PROC")).ReturnsAsync(proc); MockLabworksService.Setup(a => a.GetClientDetails(It.IsAny <string>())).ReturnsAsync(CreateValidEntities.ClientDetailsLookupModel(3)); MockAppSettings.Setup(a => a.Value).Returns(appSettings); //The controller Controller = new OrderController(MockDbContext.Object, MockOrderService.Object, MockOrderMessagingService.Object, MockLabworksService.Object, MockFinancialService.Object, MockAppSettings.Object) { ControllerContext = new ControllerContext { HttpContext = MockHttpContext.Object }, TempData = new TempDataDictionary(MockHttpContext.Object, mockDataProvider.Object) }; }