Skip to content

Commit

Permalink
test: refatoracao do teste funcional TramiteProcessoComDevolucaoAnexo…
Browse files Browse the repository at this point in the history
…OutroTest
  • Loading branch information
marvdias committed Mar 27, 2024
1 parent 266418c commit af91e42
Show file tree
Hide file tree
Showing 4 changed files with 419 additions and 24 deletions.
177 changes: 177 additions & 0 deletions tests_sei4/funcional/tests/CenarioBaseTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use \utilphp\util;
use PHPUnit\Extensions\Selenium2TestCase;
use Tests\Funcional\Sei\Fixtures\{ProtocoloFixture,ProcedimentoFixture,AtividadeFixture,ContatoFixture,ParticipanteFixture,RelProtocoloAssuntoFixture,AtributoAndamentoFixture,DocumentoFixture,AssinaturaFixture,AnexoFixture,AnexoProcessoFixture};

use function PHPSTORM_META\map;

Expand Down Expand Up @@ -634,6 +635,182 @@ public function gerarDadosDocumentoExternoGrandeTeste($contextoProducao, $nomesA
"ORIGEM" => $contextoProducao['URL'],
);
}

protected function cadastrarProcessoFixture(&$dadosProcesso)
{
$parametros = [
'Descricao' => $dadosProcesso['DESCRICAO'],
'Interessados' => $dadosProcesso['INTERESSADOS'],
];
$objProtocoloFixture = new ProtocoloFixture();
$objProtocoloDTO = $objProtocoloFixture->carregar($parametros);
$objProcedimentoFixture = new ProcedimentoFixture();

$objProcedimentoDTO = $objProcedimentoFixture->carregar([
'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo()
]);

$objAtividadeFixture = new AtividadeFixture();
$objAtividadeDTO = $objAtividadeFixture->carregar([
'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(),
'Conclusao' => \InfraData::getStrDataHoraAtual(),
'IdTarefa' => \TarefaRN::$TI_GERACAO_PROCEDIMENTO,
'IdUsuarioConclusao' => 100000001
]);

$objContatoFixture = new ContatoFixture();
$objContatoDTO = $objContatoFixture->carregar([
'Nome' => $parametros['Interessados']
]);

$objParticipanteFixture = new ParticipanteFixture();
$objParticipanteDTO = $objParticipanteFixture->carregar([
'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(),
'IdContato' => $objContatoDTO->getNumIdContato()
]);

$objProtocoloAssuntoFixture = new RelProtocoloAssuntoFixture();
$objProtocoloAssuntoFixture->carregar([
'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo()
]);

$objAtributoAndamentoFixture = new AtributoAndamentoFixture();
$objAtributoAndamentoFixture->carregar([
'IdAtividade' => $objAtividadeDTO->getNumIdAtividade()
]);

$dadosProcesso['PROTOCOLO'] = $protocoloGerado;

return $objProtocoloDTO;
}

protected function cadastrarDocumentoInternoFixture($dadosDocumentoInterno, $idProtocolo)
{
$objDocumentoFixture = new DocumentoFixture();
$objDocumentoDTO = $objDocumentoFixture->carregar([
'IdProtocolo' => $idProtocolo,
'IdProcedimento' => $idProtocolo,
'Descricao' => $dadosDocumentoInterno['DESCRICAO'],
]);

//Adicionar assinatura ao documento
$objAssinaturaFixture = new AssinaturaFixture();
$objAssinaturaFixture->carregar([
'IdProtocolo' => $idProtocolo,
'IdDocumento' => $objDocumentoDTO->getDblIdDocumento(),
]);

}

protected function cadastrarDocumentoExternoFixture($dadosDocumentoExterno, $idProtocolo)
{
$objDocumentoFixture = new DocumentoFixture();
$objDocumentoDTO = $objDocumentoFixture->carregar([
'IdProtocolo' => $idProtocolo,
'IdProcedimento' => $idProtocolo,
'Descricao' => $dadosDocumentoExterno['DESCRICAO'],
'StaProtocolo' => \ProtocoloRN::$TP_DOCUMENTO_RECEBIDO,
'StaDocumento' => \DocumentoRN::$TD_EXTERNO,
'IdConjuntoEstilos' => NULL,
]);

//Adicionar anexo ao documento
$objAnexoFixture = new AnexoFixture();
$objAnexoFixture->carregar([
'IdProtocolo' => $objDocumentoDTO->getDblIdDocumento(),
'Nome' => basename($dadosDocumentoExterno['ARQUIVO']),
]);

}

protected function anexarProcessoFixture($protocoloPrincipalId, $protocoloProcessoAnexadoId)
{
// Realizar a anexação de processos
$objAnexoProcessoFixture = new AnexoProcessoFixture();
$objAnexoProcessoFixture->carregar([
'IdProtocolo' => $protocoloPrincipalId,
'IdDocumento' => $protocoloProcessoAnexadoId,
]);
}

protected function realizarTramiteExternoFixture(&$processoTeste, $documentosTeste, $remetente, $destinatario, $validarTramite)
{
$orgaosDiferentes = $remetente['URL'] != $destinatario['URL'];

$buscar = false;
// 1 - Cadastrar novo processo de teste
if (isset($processoTeste['PROTOCOLO'])) {
$strProtocoloTeste = $processoTeste['PROTOCOLO'];

$parametros = [
'ProtocoloFormatado' => $strProtocoloTeste,
];
$objProtocoloFixture = new ProtocoloFixture();
$objProtocoloDTO = $objProtocoloFixture->buscar($parametros)[0];

} else {
$objProtocoloDTO = $this->cadastrarProcessoFixture($processoTeste);
$strProtocoloTeste = $objProtocoloDTO->getStrProtocoloFormatado();
$processoTeste['PROTOCOLO'] = $strProtocoloTeste;
}

// 2 - Incluir Documentos no Processo
$documentosTeste = array_key_exists('TIPO', $documentosTeste) ? array($documentosTeste) : $documentosTeste;
foreach ($documentosTeste as $doc) {
if ($doc['TIPO'] == 'G') {
// cadastra e assina documento interno
$this->cadastrarDocumentoInternoFixture($doc,$objProtocoloDTO->getDblIdProtocolo());
} else if ($doc['TIPO'] == 'R') {
$this->cadastrarDocumentoExternoFixture($doc, $objProtocoloDTO->getDblIdProtocolo());
}
}

// 3 - Acessar sistema do REMETENTE do processo
$this->acessarSistema($remetente['URL'], $remetente['SIGLA_UNIDADE'], $remetente['LOGIN'], $remetente['SENHA']);

// 4 - Abrir processo
$this->abrirProcesso($strProtocoloTeste);

// 5 - Trâmitar Externamento processo para órgão/unidade destinatária
$paginaTramitar = $this->paginaTramitar;
$this->tramitarProcessoExternamente($strProtocoloTeste, $destinatario['REP_ESTRUTURAS'], $destinatario['NOME_UNIDADE'], $destinatario['SIGLA_UNIDADE_HIERARQUIA'], false);

if ($validarTramite) {
// 6 - Verificar se situação atual do processo está como bloqueado
$this->waitUntil(function ($testCase) use (&$orgaosDiferentes) {
sleep(5);
$this->atualizarTramitesPEN();
$testCase->refresh();
$paginaProcesso = new PaginaProcesso($testCase);
$testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao());
$testCase->assertFalse($paginaProcesso->processoAberto());
$testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado());
return true;
}, PEN_WAIT_TIMEOUT);

// 7 - Validar se recibo de trâmite foi armazenado para o processo (envio e conclusão)
$unidade = mb_convert_encoding($destinatario['NOME_UNIDADE'], "ISO-8859-1");
$mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", $strProtocoloTeste, $unidade);
$this->validarRecibosTramite($mensagemRecibo, true, true);

// 8 - Validar histórico de trâmite do processo
$this->validarHistoricoTramite(self::$nomeUnidadeDestinatario, true, true);

// 9 - Verificar se processo está na lista de Processos Tramitados Externamente
$deveExistir = $remetente['URL'] != $destinatario['URL'];
$this->validarProcessosTramitados($strProtocoloTeste, $deveExistir);
}
}

public function realizarTramiteExternoComValidacaoNoRemetenteFixture(&$processoTeste, $documentosTeste, $remetente, $destinatario)
{
$this->realizarTramiteExternoFixture($processoTeste, $documentosTeste, $remetente, $destinatario, true);
}

public function realizarTramiteExternoSemvalidacaoNoRemetenteFixture(&$processoTeste, $documentosTeste, $remetente, $destinatario)
{
$this->realizarTramiteExternoFixture($processoTeste, $documentosTeste, $remetente, $destinatario, false);
}

protected function realizarTramiteExterno(&$processoTeste, $documentosTeste, $remetente, $destinatario, $validarTramite)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?php

use Tests\Funcional\Sei\Fixtures\{ProtocoloFixture,ProcedimentoFixture,AtividadeFixture,ContatoFixture,ParticipanteFixture,RelProtocoloAssuntoFixture,AtributoAndamentoFixture,DocumentoFixture,AssinaturaFixture,AnexoFixture,AnexoProcessoFixture};

/**
* Testes de trâmite de um processo tendo a sua devolução através de sua anexação à outro processo
* criado no órgão de destino.
Expand Down Expand Up @@ -48,7 +50,8 @@ public function test_tramitar_processo_da_origem()
self::$documentoTeste2 = $this->gerarDadosDocumentoExternoTeste(self::$remetente);

$documentos = array(self::$documentoTeste1, self::$documentoTeste2);
$this->realizarTramiteExternoComValidacaoNoRemetente(self::$processoTesteAnexado, $documentos, self::$remetente, self::$destinatario);

$this->realizarTramiteExternoComValidacaoNoRemetenteFixture(self::$processoTesteAnexado, $documentos, self::$remetente, self::$destinatario);
self::$protocoloTesteAnexado = self::$processoTesteAnexado["PROTOCOLO"];
}

Expand Down Expand Up @@ -84,30 +87,47 @@ public function test_devolucao_processo_anexado_em_outro_para_origem()
{
self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B);
self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A);
// Selecionar banco do org2 para fazer inserção dos documentos
putenv("DATABASE_HOST=org2-database");

self::$documentoTeste3 = $this->gerarDadosDocumentoExternoTeste(self::$remetente);

// Acessar sistema do this->REMETENTE do processo
$this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']);

// Incluir novos documentos relacionados no processo anexado
$this->abrirProcesso(self::$protocoloTesteAnexado);
$this->cadastrarDocumentoExterno(self::$documentoTeste3);
// Busca ID que Protocolo principal recebeu no org2
$parametros = [
'ProtocoloFormatado' => self::$protocoloTesteAnexado,
];
$objProtocoloFixture = new ProtocoloFixture();
$objProtocoloAnexadoDTO = $objProtocoloFixture->buscar($parametros)[0];
$this->cadastrarDocumentoExternoFixture(self::$documentoTeste3, $objProtocoloAnexadoDTO->getDblIdProtocolo());

// Gerar dados de testes para representar o processo principal
self::$processoTestePrincipal = $this->gerarDadosProcessoTeste(self::$remetente);
self::$documentoTeste4 = $this->gerarDadosDocumentoInternoTeste(self::$remetente);
self::$documentoTeste5 = $this->gerarDadosDocumentoExternoTeste(self::$remetente);

// Cadastra processo principal, seus documentos e anexa processo recebido anteriormente
self::$protocoloTestePrincipal = $this->cadastrarProcesso(self::$processoTestePrincipal);
$this->cadastrarDocumentoInterno(self::$documentoTeste4);
$this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']);
$objProtocoloPrincipalDTO = $this->cadastrarProcessoFixture(self::$processoTestePrincipal);
// $objProtocoloPrincipalDTO = $DTOs['Protocolo'];
// $objProcedimentoPrincipalDTO = $DTOs['Procedimento'];
self::$protocoloTestePrincipal = $objProtocoloPrincipalDTO->getStrProtocoloFormatado();

// Cadastra e assina
$this->cadastrarDocumentoInternoFixture(self::$documentoTeste4,$objProtocoloPrincipalDTO->getDblIdProtocolo());

$this->anexarProcesso(self::$protocoloTesteAnexado);
// $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']);

$this->cadastrarDocumentoExterno(self::$documentoTeste5);
$this->anexarProcessoFixture($objProtocoloPrincipalDTO->getDblIdProtocolo(), $objProtocoloAnexadoDTO->getDblIdProtocolo());

// $this->cadastrarDocumentoExternoFixture(self::$documentoTeste5);
$this->cadastrarDocumentoExternoFixture(self::$documentoTeste5, $objProtocoloPrincipalDTO->getDblIdProtocolo());

putenv("DATABASE_HOST=org1-database");

// Acessar sistema do this->REMETENTE do processo
$this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']);

// Abre processo principal para tramitar
$this->abrirProcesso(self::$protocoloTestePrincipal);

// Trâmitar Externamento processo para órgão/unidade destinatária
$this->tramitarProcessoExternamente(
Expand Down
Loading

0 comments on commit af91e42

Please sign in to comment.