@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);
  }
  public Peticao buildPeticaoInicial() throws IOException {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    PeticaoBuilder peticaoBuilder = getBuilder(peticaoDto);
    PeticaoDirector director = new PeticaoDirector(peticaoBuilder);
    return director.buildPeticao();
  }
  /**
   * RN-2 - Desloca a petição inicial com: origem em DIVERSOS(250); destino "SEÇÃO DE RECEBIMENTO E
   * DISTRIBUIÇÃO DE ORIGINÁRIOS"(600000679)
   *
   * @throws Exception
   * @throws IOException
   */
  @Test
  public void peticionar_DeslocarDeDiversosParaSRDO_RegistroOk() throws IOException, Exception {
    Peticao peticao = builder.buildPeticaoMock();

    DeslocamentoDto deslocamento = deslocamentoService.regrasDeslocamentoInicial(peticao.getId());
    assertTrue(deslocamento.getCodigoDestino().equals(600000679L));
  }
  /**
   * 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);
  }
  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;
  }
 @Test
 public void peticionar_PeticaoSemErros_RegistroOk() throws IOException, Exception {
   PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);
   ResultActions result = invocaTeste(peticaoDto);
   verificaResultadoCreated(result);
 }