public Peticao buildPeticaoInicial() throws IOException {
    PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);

    PeticaoBuilder peticaoBuilder = getBuilder(peticaoDto);
    PeticaoDirector director = new PeticaoDirector(peticaoBuilder);
    return director.buildPeticao();
  }
  /**
   * 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);
  }
 @Test
 public void peticionar_PeticaoSemErros_RegistroOk() throws IOException, Exception {
   PeticaoDto peticaoDto = builder.buildPeticaoInicialPadrao(pessoaRepository);
   ResultActions result = invocaTeste(peticaoDto);
   verificaResultadoCreated(result);
 }