public async Task EnsureOrderCanOnlyBeCapturedWhenOrderStatusIsNotCancelledOrPendingAndPaymentStatusIsAuthorizedAndPaymentModuleSupportsCapture() { var order = new Order { PaymentMethodSystemName = "Payments.TestMethod" }; TestPaymentMethod.TestSupportCapture = true; foreach (OrderStatus os in Enum.GetValues(typeof(OrderStatus))) { foreach (PaymentStatus ps in Enum.GetValues(typeof(PaymentStatus))) { foreach (ShippingStatus ss in Enum.GetValues(typeof(ShippingStatus))) { order.OrderStatus = os; order.PaymentStatus = ps; order.ShippingStatus = ss; if (os != OrderStatus.Cancelled && os != OrderStatus.Pending && ps == PaymentStatus.Authorized) { var canCapture = await _orderProcessingService.CanCaptureAsync(order); canCapture.Should().BeTrue(); } else { var canCapture = await _orderProcessingService.CanCaptureAsync(order); canCapture.Should().BeFalse(); } } } } TestPaymentMethod.TestSupportCapture = false; foreach (OrderStatus os in Enum.GetValues(typeof(OrderStatus))) { foreach (PaymentStatus ps in Enum.GetValues(typeof(PaymentStatus))) { foreach (ShippingStatus ss in Enum.GetValues(typeof(ShippingStatus))) { order.OrderStatus = os; order.PaymentStatus = ps; order.ShippingStatus = ss; var canCapture = await _orderProcessingService.CanCaptureAsync(order); canCapture.Should().BeFalse(); } } } }