/// <summary>
 /// Constructor. See <a href="https://dev.maxmind.com/minfraud-score-and-insights-api-documentation/#Request_Body">
 /// the minFraud documentation</a> for a general overview of the request sent to the web
 /// service.
 /// </summary>
 /// <param name="device">Information about the device used in the transaction. This param is required.</param>
 /// <param name="account">Information about the account used in the transaction.</param>
 /// <param name="billing">Billing information used in the transaction.</param>
 /// <param name="creditCard">Information about the credit card used in the transaction.</param>
 /// <param name="email">Information about the email used in the transaction.</param>
 /// <param name="userEvent">Details about the event such as the time.</param>
 /// <param name="order">Details about the order.</param>
 /// <param name="payment">Information about the payment processing.</param>
 /// <param name="shipping">Shipping information used in the transaction.</param>
 /// <param name="shoppingCart">List of shopping items in the transaction.</param>
 public Transaction(
     Device device,
     Account account = null,
     Billing billing = null,
     CreditCard creditCard = null,
     Email email = null,
     Event userEvent = null,
     Order order = null,
     Payment payment = null,
     Shipping shipping = null,
     IList<ShoppingCartItem> shoppingCart = default(List<ShoppingCartItem>)
     )
 {
     this.Device = device;
     this.Account = account;
     this.Billing = billing;
     this.CreditCard = creditCard;
     this.Email = email;
     this.Event = userEvent;
     this.Order = order;
     this.Payment = payment;
     this.Shipping = shipping;
     ShoppingCart = shoppingCart;
 }
 public void TestType()
 {
     var eventReq = new Event(type: EventType.AccountCreation);
     Assert.AreEqual(EventType.AccountCreation, eventReq.Type);
 }
 public void TestTransactionId()
 {
     var eventReq = new Event(transactionId: "t12");
     Assert.AreEqual("t12", eventReq.TransactionId);
 }
 public void TestTime()
 {
     var date = new DateTimeOffset();
     var eventReq = new Event(time: date);
     Assert.AreEqual(date, eventReq.Time);
 }
 public void TestShopId()
 {
     var eventReq = new Event(shopId: "s12");
     Assert.AreEqual("s12", eventReq.ShopId);
 }