/**
   * CA-4 - É obrigatória a seleção de classe processual
   *
   * @throws Exception
   * @throws IOException
   */
  @Test
  public void peticionar_PeticaoInicialClasseNaoInformada_PeticaoInvalidaException()
      throws IOException, Exception {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    peticaoDto.setClasseProcessual(null);

    ResultActions result = invocaTeste(peticaoDto);
    verificaBadRequest(result);
  }
  @Test
  public void peticionar_SemPartes_PeticaoInvalidaException() throws IOException, Exception {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    peticaoDto.setPolos(builder.buildListaDePartesVazia());

    ResultActions result = invocaTeste(peticaoDto);

    verificaBadRequest(result);
  }
  /**
   * CA-8 - Deve ser validado se todas as peças obrigatórias à classe foram inseridas
   *
   * @throws Exception
   * @throws IOException
   */
  @Test
  public void peticionar_ClasseSemPecaObrigatoria_PeticaoInvalidaException()
      throws IOException, Exception {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    peticaoDto.setPecas(builder.buildListaDePecasSemPeticaoInicial());

    ResultActions result = invocaTeste(peticaoDto);

    result.andExpect(status().isBadRequest());
  }
  /**
   * CA-7 - Se a classe processual for diferente de HC ou RHC, é obrigatório existir pelo menos um
   * número de inscrição na OAB válido (não pode ser cancelado ou falecido)
   *
   * @throws Exception
   * @throws IOException
   */
  @Test
  public void peticionar_ClasseDiferenteHCouRHCsemOAB_PeticaoInvalidaException()
      throws IOException, Exception {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    peticaoDto.getPolos().add(builder.buildClasseDiferenteHCouRHCcomOABInvalido());

    ResultActions result = invocaTeste(peticaoDto);

    result.andExpect(status().isBadRequest());
  }
  /**
   * CA-7 - Se a classe processual for diferente de HC ou RHC, é obrigatório existir pelo menos um
   * número de inscrição na OAB válido (não pode ser cancelado ou falecido)
   *
   * @throws Exception
   * @throws IOException
   */
  @Test
  public void peticionar_PeticionadorCpfInvalido_PeticaoInvalidaException()
      throws IOException, Exception {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    peticaoDto.getPolos().add(builder.buildPoloAtivoCpfInvalido());

    ResultActions result = invocaTeste(peticaoDto);

    verificaBadRequest(result);
  }
  /**
   * CA-5 - Deve existir pelo menos uma peça
   *
   * @throws Exception
   * @throws IOException
   */
  @Test
  public void peticionar_NenhumArquivoEnviado_PeticaoInvalidaException()
      throws IOException, Exception {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    peticaoDto.setPecas(builder.buildListaDePecasVazia());

    ResultActions result = invocaTeste(peticaoDto);

    result.andExpect(status().isBadRequest());
  }
  /**
   * CA-4 - É obrigatória a seleção de classe processual;
   *
   * @throws Exception
   * @throws IOException
   */
  @Test
  public void peticionar_ClasseComPreferenciaObrigatoriaNaoInformada_PeticaoInvalidaException()
      throws IOException, Exception {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    peticaoDto.setClasseProcessual("AP");
    peticaoDto.setPreferencias(builder.buildPreferenciasVazias());

    ResultActions result = invocaTeste(peticaoDto);

    verificaBadRequest(result);
  }
 private PeticaoBuilder getBuilder(PeticaoDto peticaoDto) {
   PeticaoBuilder peticaoBuilder = null;
   if (EnumTipoPeticao.INICIAL.getCodigo().equalsIgnoreCase(peticaoDto.getTipoPeticao())) {
     peticaoBuilder = new PeticaoInicialBuilder(peticaoBuilderServices, numerador, peticaoDto);
   } else {
     peticaoBuilder = new PeticaoIncidentalBuilder(peticaoBuilderServices, peticaoDto);
   }
   return peticaoBuilder;
 }
  private ResultActions invocaTeste(PeticaoDto peticaoDto) throws IOException, Exception {
    ResultActions resultActions =
        mockMvc.perform(
            post(URL_PETICIONAR)
                .accept(APPLICATION_JSON_UTF8)
                .content(convertObjectToJsonBytes(peticaoDto))
                .contentType(MediaType.APPLICATION_JSON));

    // Remove as peças do arquivo temporário para evitar superlotação
    for (PecaEnviadaDto pecaEnviada : peticaoDto.getPecas()) {
      builder.getArquivoTemporarioRepository().remove(pecaEnviada.getId());
    }
    return resultActions;
  }