@Test
  @Transactional
  public void invalidSubcontractedTaskDataWithoutOrderElement() {
    int previous = orderDAO.getOrders().size();

    ExternalCompany externalCompany = getClientExternalCompanySaved("Company", "company-nif");

    SubcontractedTaskDataDTO subcontractedTaskDataDTO = new SubcontractedTaskDataDTO();
    subcontractedTaskDataDTO.externalCompanyNif = externalCompany.getNif();

    List<InstanceConstraintViolationsDTO> instanceConstraintViolationsList =
        subcontractService.subcontract(subcontractedTaskDataDTO).instanceConstraintViolationsList;
    assertThat(instanceConstraintViolationsList.size(), equalTo(1));

    assertThat(orderDAO.getOrders().size(), equalTo(previous));
  }
  @Test
  @Transactional
  public void invalidSubcontractedTaskDataWithoutExternalCompanyNif() {
    int previous = orderDAO.getOrders().size();

    String orderLineCode = "order-line-code";

    OrderElementDTO orderElementDTO = givenBasicOrderLineDTO(orderLineCode);

    SubcontractedTaskDataDTO subcontractedTaskDataDTO = new SubcontractedTaskDataDTO();
    subcontractedTaskDataDTO.orderElementDTO = orderElementDTO;

    List<InstanceConstraintViolationsDTO> instanceConstraintViolationsList =
        subcontractService.subcontract(subcontractedTaskDataDTO).instanceConstraintViolationsList;
    assertThat(instanceConstraintViolationsList.size(), equalTo(1));

    assertThat(orderDAO.getOrders().size(), equalTo(previous));
  }
  @Test
  @Transactional
  public void validSubcontractedTaskData() {
    int previous = orderDAO.getOrders().size();

    String orderLineCode = "order-line-code";

    OrderElementDTO orderElementDTO = givenBasicOrderLineDTO(orderLineCode);
    ExternalCompany externalCompany = getClientExternalCompanySaved("Company", "company-nif");

    SubcontractedTaskDataDTO subcontractedTaskDataDTO = new SubcontractedTaskDataDTO();
    subcontractedTaskDataDTO.orderElementDTO = orderElementDTO;
    subcontractedTaskDataDTO.externalCompanyNif = externalCompany.getNif();

    String orderName = "Work description";
    String orderCustomerReference = "client-reference-code";
    BigDecimal orderBudget = new BigDecimal(1000).setScale(2);
    subcontractedTaskDataDTO.workDescription = orderName;
    subcontractedTaskDataDTO.subcontractedCode = orderCustomerReference;
    subcontractedTaskDataDTO.subcontractPrice = orderBudget;

    List<InstanceConstraintViolationsDTO> instanceConstraintViolationsList =
        subcontractService.subcontract(subcontractedTaskDataDTO).instanceConstraintViolationsList;
    assertThat(instanceConstraintViolationsList.size(), equalTo(0));

    assertThat(orderDAO.getOrders().size(), equalTo(previous + 1));

    Order order = orderDAO.getOrders().get(previous);
    assertNotNull(order.getCode());
    assertTrue(order.isCodeAutogenerated());
    assertNotNull(order.getExternalCode());
    assertThat(order.getExternalCode(), equalTo(orderLineCode));
    assertThat(order.getState(), equalTo(OrderStatusEnum.OUTSOURCED));
    assertThat(order.getWorkHours(), equalTo(0));
    assertThat(order.getCustomer().getId(), equalTo(externalCompany.getId()));
    assertThat(order.getName(), equalTo(orderName));
    assertThat(order.getCustomerReference(), equalTo(orderCustomerReference));
    assertThat(order.getTotalManualBudget(), equalTo(orderBudget));

    List<OrderElement> children = order.getChildren();
    assertThat(children.size(), equalTo(1));
    assertNull(children.get(0).getExternalCode());
  }