@Test
  public void testAddTradeOrderFill() {

    try {
      testAddTradeOrder();
      boolean stopped = true;
      int minute = 25;

      for (TradeOrder tradeOrder : this.tradestrategy.getTradeOrders()) {

        tradeOrder = tradeOrderHome.findTradeOrderByKey(tradeOrder.getOrderKey());
        minute = minute + 3;
        ZonedDateTime filledDate = this.tradestrategy.getTradingday().getOpen().plusMinutes(minute);
        if (tradeOrder.getIsOpenPosition()) {

          TradeOrderfill orderfill =
              new TradeOrderfill(
                  tradeOrder,
                  "Paper",
                  tradeOrder.getLimitPrice(),
                  tradeOrder.getQuantity() / 2,
                  "ISLAND",
                  "1234",
                  tradeOrder.getLimitPrice(),
                  tradeOrder.getQuantity() / 2,
                  this.tradestrategy.getSide(),
                  filledDate);

          tradeOrder.addTradeOrderfill(orderfill);

          TradeOrderfill orderfill1 =
              new TradeOrderfill(
                  tradeOrder,
                  "Paper",
                  tradeOrder.getLimitPrice(),
                  tradeOrder.getQuantity() / 2,
                  "ISLAND",
                  "12345",
                  tradeOrder.getLimitPrice(),
                  tradeOrder.getQuantity() / 2,
                  this.tradestrategy.getSide(),
                  filledDate.plusMinutes(3));
          tradeOrder.addTradeOrderfill(orderfill1);
          tradeOrder.setIsFilled(true);
          tradeOrder.setFilledQuantity(tradeOrder.getQuantity());
          tradeOrder.setStatus("FILLED");
          tradeOrder.setFilledDate(filledDate.plusMinutes(3));
          tradeOrder.setAverageFilledPrice(tradeOrder.getLimitPrice());
          tradeOrder.setCommission(new BigDecimal(tradeOrder.getQuantity() * 0.005));

        } else {
          if (stopped) {
            if (OrderType.STP.equals(tradeOrder.getOrderType())) {

              TradeOrderfill orderfill =
                  new TradeOrderfill(
                      tradeOrder,
                      "Paper",
                      tradeOrder.getAuxPrice(),
                      tradeOrder.getQuantity(),
                      "ISLAND",
                      "12345",
                      tradeOrder.getAuxPrice(),
                      tradeOrder.getQuantity(),
                      this.tradestrategy.getSide(),
                      filledDate.plusMinutes(5));
              tradeOrder.addTradeOrderfill(orderfill);
              tradeOrder.setIsFilled(true);
              tradeOrder.setStatus(OrderStatus.FILLED);
              tradeOrder.setAverageFilledPrice(tradeOrder.getAuxPrice());
              tradeOrder.setFilledDate(filledDate.plusMinutes(5));
              tradeOrder.setCommission(new BigDecimal(tradeOrder.getQuantity() * 0.005));
              tradeOrder.setFilledQuantity(tradeOrder.getQuantity());

            } else {
              tradeOrder.setStatus(OrderStatus.CANCELLED);
            }
          } else {
            if (OrderType.LMT.equals(tradeOrder.getOrderType())) {

              TradeOrderfill orderfill =
                  new TradeOrderfill(
                      tradeOrder,
                      "Paper",
                      tradeOrder.getLimitPrice(),
                      tradeOrder.getQuantity() / 2,
                      "ISLAND",
                      "12345",
                      tradeOrder.getLimitPrice(),
                      tradeOrder.getQuantity() / 2,
                      this.tradestrategy.getSide(),
                      filledDate.plusMinutes(5));
              tradeOrder.addTradeOrderfill(orderfill);
              TradeOrderfill orderfill1 =
                  new TradeOrderfill(
                      tradeOrder,
                      "Paper",
                      tradeOrder.getLimitPrice(),
                      tradeOrder.getQuantity() / 2,
                      "ISLAND",
                      "12345",
                      tradeOrder.getLimitPrice(),
                      tradeOrder.getQuantity() / 2,
                      this.tradestrategy.getSide(),
                      filledDate.plusMinutes(6));
              orderfill1.setTradeOrder(tradeOrder);
              tradeOrder.addTradeOrderfill(orderfill1);
              tradeOrder.setIsFilled(true);
              tradeOrder.setStatus(OrderStatus.FILLED);
              tradeOrder.setFilledQuantity(tradeOrder.getQuantity());
              tradeOrder.setFilledDate(filledDate.plusMinutes(15));
              tradeOrder.setAverageFilledPrice(tradeOrder.getLimitPrice());
              tradeOrder.setCommission(new BigDecimal(tradeOrder.getQuantity() * 0.005));

            } else {
              tradeOrder.setStatus(OrderStatus.CANCELLED);
            }
          }
        }

        tradeOrder = tradeOrderHome.persist(tradeOrder);
        _log.info(
            "IdOrder: "
                + tradeOrder.getIdTradeOrder()
                + " Action:"
                + tradeOrder.getAction()
                + " OrderType:"
                + tradeOrder.getOrderType()
                + " Status:"
                + tradeOrder.getStatus()
                + " filledDate:"
                + filledDate);
      }
    } catch (Exception | AssertionError ex) {
      String msg = "Error running " + name.getMethodName() + " msg: " + ex.getMessage();
      _log.error(msg);
      fail(msg);
    }
  }