diff --git a/tests_sei4/funcional/src/fixtures/TipoProcessoPadraoFixture.php b/tests_sei4/funcional/src/fixtures/TipoProcessoPadraoFixture.php new file mode 100644 index 00000000..dad75f16 --- /dev/null +++ b/tests_sei4/funcional/src/fixtures/TipoProcessoPadraoFixture.php @@ -0,0 +1,30 @@ +objPenParametroDTO = new \PenParametroDTO(); + } + + protected function inicializarObjInfraIBanco() + { + return \BancoSEI::getInstance(); + } + + public function cadastrar($dados = []) + { + $objPenParametroDTO = new \PenParametroDTO(); + $objPenParametroDTO->setStrNome($dados['Nome']); + + $objPenParametroBD = new \PenParametroBD($this->inicializarObjInfraIBanco()); + if($objPenParametroBD->contar($objPenParametroDTO) > 0) { + $objPenParametroDTO->setStrValor($dados['Valor']); + $objPenParametroBD->alterar($objPenParametroDTO); + } + } +} diff --git a/tests_sei4/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php b/tests_sei4/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php index e775890f..dd07a649 100644 --- a/tests_sei4/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php +++ b/tests_sei4/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php @@ -116,6 +116,12 @@ public function buscarMensagemAlerta() return !empty($alerta->text()) ? $alerta->text() : ""; } + public function buscarQuantidadeProcessosRecusados() + { + $linhasDaTabelaRecusadas = $this->test->elements($this->test->using('xpath')->value("//img[@title='Recusado']")); + return count($linhasDaTabelaRecusadas); + } + public function tramitarProcessoExternamente($repositorio, $unidadeDestino, $unidadeDestinoHierarquia, $urgente = false, $callbackEnvio = null, $timeout = PEN_WAIT_TIMEOUT) { // Preencher parâmetros do trâmite diff --git a/tests_sei4/funcional/src/paginas/PaginaTramiteEmBloco.php b/tests_sei4/funcional/src/paginas/PaginaTramiteEmBloco.php index 8c2e6a83..b18a8472 100644 --- a/tests_sei4/funcional/src/paginas/PaginaTramiteEmBloco.php +++ b/tests_sei4/funcional/src/paginas/PaginaTramiteEmBloco.php @@ -44,6 +44,37 @@ public function selecionarTramiteEmBloco() $btnTramiteEmBloco->click(); } + /** + * Seleciona um processo específico com base no número do protocolo formatado. + * + * Este método busca o rótulo que contém o número do protocolo + * fornecido e simula um clique sobre ele para selecionar o processo. + * + * @param string $numProtocoloFormatado O número do protocolo formatado a ser selecionado. + * @return void + */ + public function selecionarProcesso($numProtocoloFormatado) + { + $btnTramiteEmBloco = $this->test->byXPath('//label[@title="' . $numProtocoloFormatado . '"]'); + $btnTramiteEmBloco->click(); + } + + /** + * Verifica o título da página atual. + * + * Este método busca e retorna o texto do título da página + * atual, comparando-o com o título fornecido. Ele é útil para + * garantir que a navegação ocorreu corretamente. + * + * @param string $titulo O título esperado da página. + * @return string O título da página atual. + */ + public function verificarTituloDaPagina($titulo) + { + $tituloDaPagina = $this->test->byXPath('//div[text()="' . $titulo . '"]'); + return $tituloDaPagina->text(); + } + /** * Selecionar bloco * @param string $selAndamento diff --git a/tests_sei4/funcional/tests/FixtureCenarioBaseTestCase.php b/tests_sei4/funcional/tests/FixtureCenarioBaseTestCase.php index fa608e45..09a51cd6 100755 --- a/tests_sei4/funcional/tests/FixtureCenarioBaseTestCase.php +++ b/tests_sei4/funcional/tests/FixtureCenarioBaseTestCase.php @@ -5,7 +5,7 @@ use Tests\Funcional\Sei\Fixtures\{ProtocoloFixture,ProcedimentoFixture,AtividadeFixture,ContatoFixture}; use Tests\Funcional\Sei\Fixtures\{ParticipanteFixture,RelProtocoloAssuntoFixture,AtributoAndamentoFixture}; use Tests\Funcional\Sei\Fixtures\{DocumentoFixture,AssinaturaFixture,AnexoFixture,AnexoProcessoFixture}; -use Tests\Funcional\Sei\Fixtures\{HipoteseLegalFixture}; +use Tests\Funcional\Sei\Fixtures\{HipoteseLegalFixture,TipoProcedimentoFixture}; use function PHPSTORM_META\map; /** @@ -15,7 +15,6 @@ class FixtureCenarioBaseTestCase extends CenarioBaseTestCase { protected function cadastrarProcessoFixture(&$dadosProcesso) { - if (!is_null($dadosProcesso['HIPOTESE_LEGAL'])){ $param = [ 'Nome' => trim(explode('(',$dadosProcesso['HIPOTESE_LEGAL'])[0]), @@ -36,9 +35,13 @@ protected function cadastrarProcessoFixture(&$dadosProcesso) $objProtocoloDTO = $objProtocoloFixture->carregar($parametros); $objProcedimentoFixture = new ProcedimentoFixture(); - $objProcedimentoDTO = $objProcedimentoFixture->carregar([ - 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() - ]); + $parametrosProcedimento = [ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]; + if (!is_null($dadosProcesso['ID_TIPO_PROCESSO'])) { + $parametrosProcedimento['IdTipoProcedimento'] = $dadosProcesso['ID_TIPO_PROCESSO']; + } + $objProcedimentoDTO = $objProcedimentoFixture->carregar($parametrosProcedimento); $objAtividadeFixture = new AtividadeFixture(); $objAtividadeDTO = $objAtividadeFixture->carregar([ @@ -248,4 +251,14 @@ protected function buscarIdSerieDoDocumento($tipoDocumento) return $objBD->consultar($serieDTO); } + protected function cadastrarTipoProcedimentoFixture($dados = []) + { + $objTipoProcedimentoFixture = new TipoProcedimentoFixture(); + $objTipoProcedimentoDTO = $objTipoProcedimentoFixture->carregar([ + 'Nome' => $dados['NOME'] + ]); + + return $objTipoProcedimentoDTO; + } + } diff --git a/tests_sei4/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php b/tests_sei4/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php new file mode 100644 index 00000000..db4516b0 --- /dev/null +++ b/tests_sei4/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php @@ -0,0 +1,234 @@ +carregar([ + 'Nome' => 'PEN_TIPO_PROCESSO_EXTERNO', + 'Valor' => null + ]); + putenv("DATABASE_HOST=org1-database"); + } + + public function teste_tramite_bloco_externo_com_processo_nao_mapeado() + { + // Configuração do dados para teste do cenário + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + $this->prepararCenariosFixtures(); + + // Acesso ao sistema + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $this->paginaCadastrarProcessoEmBloco->bntTramitarBloco(); + $this->paginaCadastrarProcessoEmBloco->tramitarProcessoExternamente( + self::$destinatario['REP_ESTRUTURAS'], + self::$destinatario['NOME_UNIDADE'], + self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], + false, + function ($testCase) { + try { + $testCase->frame('ifrEnvioProcesso'); + $mensagemSucesso = mb_convert_encoding('Processo(s) aguardando envio. Favor acompanhar a tramitação por meio do bloco, na funcionalidade \'Blocos de Trâmite Externo\'', 'UTF-8', 'ISO-8859-1'); + $testCase->assertStringContainsString($mensagemSucesso, $testCase->byCssSelector('body')->text()); + $btnFechar = $testCase->byXPath("//input[@id='btnFechar']"); + $btnFechar->click(); + } finally { + try { + $testCase->frame(null); + $testCase->frame("ifrVisualizacao"); + } catch (Exception $e) { + } + } + + return true; + } + ); + + // Saída do sistema + $this->sairSistema(); + } + + public function test_verificar_envio_processo() + { + $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $this->paginaCadastrarProcessoEmBloco->bntVisualizarProcessos(); + + $this->waitUntil(function ($testCase) { + sleep(5); + $testCase->refresh(); + $linhasDaTabela = $testCase->elements($testCase->using('xpath')->value('//table[@id="tblBlocos"]/tbody/tr')); + + $totalConcluidos = 0; + foreach ($linhasDaTabela as $linha) { + $statusTd = $linha->byXPath('./td[7]'); + $statusTd->byXPath(mb_convert_encoding("(//img[@title='Concluído'])", 'UTF-8', 'ISO-8859-1')); + $totalConcluidos++; + } + $this->assertEquals($totalConcluidos, 3); + return true; + }, PEN_WAIT_TIMEOUT); + + sleep(5); + } + + public function test_verificar_envio_tramite_em_bloco() + { + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $novoStatus = $this->paginaCadastrarProcessoEmBloco->retornarTextoColunaDaTabelaDeBlocos(); + $this->assertEquals(mb_convert_encoding("Concluído", 'UTF-8', 'ISO-8859-1'), $novoStatus); + + $this->paginaCadastrarProcessoEmBloco->bntVisualizarProcessos(); + + $quantidadeLinhasRecusadas = $this->paginaCadastrarProcessoEmBloco->buscarQuantidadeProcessosRecusados(); + + $this->assertEquals($quantidadeLinhasRecusadas, 1); + + // Saída do sistema + $this->sairSistema(); + } + + public function test_incluir_processo_recusado_em_novo_bloco() + { + // Carregar dados do bloco de trâmite + $objBlocoDeTramiteFixture = new \BlocoDeTramiteFixture(); + self::$objBlocoDeTramiteDTO2 = $objBlocoDeTramiteFixture->carregar(); + + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaBase->navegarParaControleProcesso(); + + // Seleção do processo e do bloco de trâmite + $protocoloFormatado = self::$objProtocoloDTO3->getStrProtocoloFormatado(); + $this->paginaTramiteEmBloco->selecionarProcesso($protocoloFormatado); + $this->paginaTramiteEmBloco->selecionarTramiteEmBloco(); + + // Verificação do título da página + $titulo = mb_convert_encoding("Incluir Processo(s) no Bloco de Trâmite", 'UTF-8', 'ISO-8859-1'); + $tituloRetorno = $this->paginaTramiteEmBloco->verificarTituloDaPagina($titulo); + $this->assertEquals($titulo, $tituloRetorno); + + // Inclusão do processo no bloco de trâmite + $this->paginaTramiteEmBloco->selecionarBloco(self::$objBlocoDeTramiteDTO2->getNumId()); + $this->paginaTramiteEmBloco->clicarSalvar(); + + // Espera para a mensagem de sucesso aparecer + sleep(2); + $mensagem = $this->paginaTramiteEmBloco->buscarMensagemAlerta(); + $this->assertStringContainsString( + mb_convert_encoding('Processo(s) incluído(s) com sucesso no bloco ' . self::$objBlocoDeTramiteDTO2->getNumOrdem(), 'UTF-8', 'ISO-8859-1'), + $mensagem + ); + + // Saída do sistema + $this->sairSistema(); + } + + private function prepararCenariosFixtures() + { + // Carregar dados do bloco de trâmite + $objBlocoDeTramiteProtocoloFixture = new \BlocoDeTramiteProtocoloFixture(); + $objBlocoDeTramiteFixture = new \BlocoDeTramiteFixture(); + self::$objBlocoDeTramiteDTO1 = $objBlocoDeTramiteFixture->carregar(); + + // Geração dos dados para o processo e documento de teste 1 + self::$processoTeste1 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste1 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + // Cadastro do processo e documento 1 + self::$objProtocoloDTO1 = $this->cadastrarProcessoFixture(self::$processoTeste1); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste1, self::$objProtocoloDTO1->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO1->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + + // Geração dos dados para o processo e documento de teste 2 + self::$processoTeste2 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste2 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + + // Cadastro do processo e documento 2 + self::$objProtocoloDTO2 = $this->cadastrarProcessoFixture(self::$processoTeste2); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste2, self::$objProtocoloDTO2->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO2->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + + // Geração dos dados para o processo e documento de teste 3 recusa + self::$processoTeste3 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste3 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + + $objTipoProcedimentoDTO = $this->cadastrarTipoProcedimentoFixture([ + 'NOME' => 'Recusa: Teste Funcional', + ]); + self::$processoTeste3['ID_TIPO_PROCESSO'] = $objTipoProcedimentoDTO->getNumIdTipoProcedimento(); + + // Cadastro do processo e documento 3 recusa + self::$objProtocoloDTO3 = $this->cadastrarProcessoFixture(self::$processoTeste3); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste3, self::$objProtocoloDTO3->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO3->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + } + + public static function tearDownAfterClass(): void + { + putenv("DATABASE_HOST=org2-database"); + parent::tearDownAfterClass(); + $objTipoProcessoPadraoFixture = new \TipoProcessoPadraoFixture(); + $objTipoProcessoPadraoFixture->carregar([ + 'Nome' => 'PEN_TIPO_PROCESSO_EXTERNO', + 'Valor' => '100000256' + ]); + putenv("DATABASE_HOST=org1-database"); + } +} diff --git a/tests_sei41/funcional/src/fixtures/TipoProcessoPadraoFixture.php b/tests_sei41/funcional/src/fixtures/TipoProcessoPadraoFixture.php new file mode 100644 index 00000000..dad75f16 --- /dev/null +++ b/tests_sei41/funcional/src/fixtures/TipoProcessoPadraoFixture.php @@ -0,0 +1,30 @@ +objPenParametroDTO = new \PenParametroDTO(); + } + + protected function inicializarObjInfraIBanco() + { + return \BancoSEI::getInstance(); + } + + public function cadastrar($dados = []) + { + $objPenParametroDTO = new \PenParametroDTO(); + $objPenParametroDTO->setStrNome($dados['Nome']); + + $objPenParametroBD = new \PenParametroBD($this->inicializarObjInfraIBanco()); + if($objPenParametroBD->contar($objPenParametroDTO) > 0) { + $objPenParametroDTO->setStrValor($dados['Valor']); + $objPenParametroBD->alterar($objPenParametroDTO); + } + } +} diff --git a/tests_sei41/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php b/tests_sei41/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php index e775890f..dd07a649 100644 --- a/tests_sei41/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php +++ b/tests_sei41/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php @@ -116,6 +116,12 @@ public function buscarMensagemAlerta() return !empty($alerta->text()) ? $alerta->text() : ""; } + public function buscarQuantidadeProcessosRecusados() + { + $linhasDaTabelaRecusadas = $this->test->elements($this->test->using('xpath')->value("//img[@title='Recusado']")); + return count($linhasDaTabelaRecusadas); + } + public function tramitarProcessoExternamente($repositorio, $unidadeDestino, $unidadeDestinoHierarquia, $urgente = false, $callbackEnvio = null, $timeout = PEN_WAIT_TIMEOUT) { // Preencher parâmetros do trâmite diff --git a/tests_sei41/funcional/src/paginas/PaginaTramiteEmBloco.php b/tests_sei41/funcional/src/paginas/PaginaTramiteEmBloco.php index 8c2e6a83..b18a8472 100644 --- a/tests_sei41/funcional/src/paginas/PaginaTramiteEmBloco.php +++ b/tests_sei41/funcional/src/paginas/PaginaTramiteEmBloco.php @@ -44,6 +44,37 @@ public function selecionarTramiteEmBloco() $btnTramiteEmBloco->click(); } + /** + * Seleciona um processo específico com base no número do protocolo formatado. + * + * Este método busca o rótulo que contém o número do protocolo + * fornecido e simula um clique sobre ele para selecionar o processo. + * + * @param string $numProtocoloFormatado O número do protocolo formatado a ser selecionado. + * @return void + */ + public function selecionarProcesso($numProtocoloFormatado) + { + $btnTramiteEmBloco = $this->test->byXPath('//label[@title="' . $numProtocoloFormatado . '"]'); + $btnTramiteEmBloco->click(); + } + + /** + * Verifica o título da página atual. + * + * Este método busca e retorna o texto do título da página + * atual, comparando-o com o título fornecido. Ele é útil para + * garantir que a navegação ocorreu corretamente. + * + * @param string $titulo O título esperado da página. + * @return string O título da página atual. + */ + public function verificarTituloDaPagina($titulo) + { + $tituloDaPagina = $this->test->byXPath('//div[text()="' . $titulo . '"]'); + return $tituloDaPagina->text(); + } + /** * Selecionar bloco * @param string $selAndamento diff --git a/tests_sei41/funcional/tests/FixtureCenarioBaseTestCase.php b/tests_sei41/funcional/tests/FixtureCenarioBaseTestCase.php index fa608e45..09a51cd6 100755 --- a/tests_sei41/funcional/tests/FixtureCenarioBaseTestCase.php +++ b/tests_sei41/funcional/tests/FixtureCenarioBaseTestCase.php @@ -5,7 +5,7 @@ use Tests\Funcional\Sei\Fixtures\{ProtocoloFixture,ProcedimentoFixture,AtividadeFixture,ContatoFixture}; use Tests\Funcional\Sei\Fixtures\{ParticipanteFixture,RelProtocoloAssuntoFixture,AtributoAndamentoFixture}; use Tests\Funcional\Sei\Fixtures\{DocumentoFixture,AssinaturaFixture,AnexoFixture,AnexoProcessoFixture}; -use Tests\Funcional\Sei\Fixtures\{HipoteseLegalFixture}; +use Tests\Funcional\Sei\Fixtures\{HipoteseLegalFixture,TipoProcedimentoFixture}; use function PHPSTORM_META\map; /** @@ -15,7 +15,6 @@ class FixtureCenarioBaseTestCase extends CenarioBaseTestCase { protected function cadastrarProcessoFixture(&$dadosProcesso) { - if (!is_null($dadosProcesso['HIPOTESE_LEGAL'])){ $param = [ 'Nome' => trim(explode('(',$dadosProcesso['HIPOTESE_LEGAL'])[0]), @@ -36,9 +35,13 @@ protected function cadastrarProcessoFixture(&$dadosProcesso) $objProtocoloDTO = $objProtocoloFixture->carregar($parametros); $objProcedimentoFixture = new ProcedimentoFixture(); - $objProcedimentoDTO = $objProcedimentoFixture->carregar([ - 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() - ]); + $parametrosProcedimento = [ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]; + if (!is_null($dadosProcesso['ID_TIPO_PROCESSO'])) { + $parametrosProcedimento['IdTipoProcedimento'] = $dadosProcesso['ID_TIPO_PROCESSO']; + } + $objProcedimentoDTO = $objProcedimentoFixture->carregar($parametrosProcedimento); $objAtividadeFixture = new AtividadeFixture(); $objAtividadeDTO = $objAtividadeFixture->carregar([ @@ -248,4 +251,14 @@ protected function buscarIdSerieDoDocumento($tipoDocumento) return $objBD->consultar($serieDTO); } + protected function cadastrarTipoProcedimentoFixture($dados = []) + { + $objTipoProcedimentoFixture = new TipoProcedimentoFixture(); + $objTipoProcedimentoDTO = $objTipoProcedimentoFixture->carregar([ + 'Nome' => $dados['NOME'] + ]); + + return $objTipoProcedimentoDTO; + } + } diff --git a/tests_sei41/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php b/tests_sei41/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php new file mode 100644 index 00000000..db4516b0 --- /dev/null +++ b/tests_sei41/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php @@ -0,0 +1,234 @@ +carregar([ + 'Nome' => 'PEN_TIPO_PROCESSO_EXTERNO', + 'Valor' => null + ]); + putenv("DATABASE_HOST=org1-database"); + } + + public function teste_tramite_bloco_externo_com_processo_nao_mapeado() + { + // Configuração do dados para teste do cenário + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + $this->prepararCenariosFixtures(); + + // Acesso ao sistema + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $this->paginaCadastrarProcessoEmBloco->bntTramitarBloco(); + $this->paginaCadastrarProcessoEmBloco->tramitarProcessoExternamente( + self::$destinatario['REP_ESTRUTURAS'], + self::$destinatario['NOME_UNIDADE'], + self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], + false, + function ($testCase) { + try { + $testCase->frame('ifrEnvioProcesso'); + $mensagemSucesso = mb_convert_encoding('Processo(s) aguardando envio. Favor acompanhar a tramitação por meio do bloco, na funcionalidade \'Blocos de Trâmite Externo\'', 'UTF-8', 'ISO-8859-1'); + $testCase->assertStringContainsString($mensagemSucesso, $testCase->byCssSelector('body')->text()); + $btnFechar = $testCase->byXPath("//input[@id='btnFechar']"); + $btnFechar->click(); + } finally { + try { + $testCase->frame(null); + $testCase->frame("ifrVisualizacao"); + } catch (Exception $e) { + } + } + + return true; + } + ); + + // Saída do sistema + $this->sairSistema(); + } + + public function test_verificar_envio_processo() + { + $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $this->paginaCadastrarProcessoEmBloco->bntVisualizarProcessos(); + + $this->waitUntil(function ($testCase) { + sleep(5); + $testCase->refresh(); + $linhasDaTabela = $testCase->elements($testCase->using('xpath')->value('//table[@id="tblBlocos"]/tbody/tr')); + + $totalConcluidos = 0; + foreach ($linhasDaTabela as $linha) { + $statusTd = $linha->byXPath('./td[7]'); + $statusTd->byXPath(mb_convert_encoding("(//img[@title='Concluído'])", 'UTF-8', 'ISO-8859-1')); + $totalConcluidos++; + } + $this->assertEquals($totalConcluidos, 3); + return true; + }, PEN_WAIT_TIMEOUT); + + sleep(5); + } + + public function test_verificar_envio_tramite_em_bloco() + { + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $novoStatus = $this->paginaCadastrarProcessoEmBloco->retornarTextoColunaDaTabelaDeBlocos(); + $this->assertEquals(mb_convert_encoding("Concluído", 'UTF-8', 'ISO-8859-1'), $novoStatus); + + $this->paginaCadastrarProcessoEmBloco->bntVisualizarProcessos(); + + $quantidadeLinhasRecusadas = $this->paginaCadastrarProcessoEmBloco->buscarQuantidadeProcessosRecusados(); + + $this->assertEquals($quantidadeLinhasRecusadas, 1); + + // Saída do sistema + $this->sairSistema(); + } + + public function test_incluir_processo_recusado_em_novo_bloco() + { + // Carregar dados do bloco de trâmite + $objBlocoDeTramiteFixture = new \BlocoDeTramiteFixture(); + self::$objBlocoDeTramiteDTO2 = $objBlocoDeTramiteFixture->carregar(); + + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaBase->navegarParaControleProcesso(); + + // Seleção do processo e do bloco de trâmite + $protocoloFormatado = self::$objProtocoloDTO3->getStrProtocoloFormatado(); + $this->paginaTramiteEmBloco->selecionarProcesso($protocoloFormatado); + $this->paginaTramiteEmBloco->selecionarTramiteEmBloco(); + + // Verificação do título da página + $titulo = mb_convert_encoding("Incluir Processo(s) no Bloco de Trâmite", 'UTF-8', 'ISO-8859-1'); + $tituloRetorno = $this->paginaTramiteEmBloco->verificarTituloDaPagina($titulo); + $this->assertEquals($titulo, $tituloRetorno); + + // Inclusão do processo no bloco de trâmite + $this->paginaTramiteEmBloco->selecionarBloco(self::$objBlocoDeTramiteDTO2->getNumId()); + $this->paginaTramiteEmBloco->clicarSalvar(); + + // Espera para a mensagem de sucesso aparecer + sleep(2); + $mensagem = $this->paginaTramiteEmBloco->buscarMensagemAlerta(); + $this->assertStringContainsString( + mb_convert_encoding('Processo(s) incluído(s) com sucesso no bloco ' . self::$objBlocoDeTramiteDTO2->getNumOrdem(), 'UTF-8', 'ISO-8859-1'), + $mensagem + ); + + // Saída do sistema + $this->sairSistema(); + } + + private function prepararCenariosFixtures() + { + // Carregar dados do bloco de trâmite + $objBlocoDeTramiteProtocoloFixture = new \BlocoDeTramiteProtocoloFixture(); + $objBlocoDeTramiteFixture = new \BlocoDeTramiteFixture(); + self::$objBlocoDeTramiteDTO1 = $objBlocoDeTramiteFixture->carregar(); + + // Geração dos dados para o processo e documento de teste 1 + self::$processoTeste1 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste1 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + // Cadastro do processo e documento 1 + self::$objProtocoloDTO1 = $this->cadastrarProcessoFixture(self::$processoTeste1); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste1, self::$objProtocoloDTO1->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO1->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + + // Geração dos dados para o processo e documento de teste 2 + self::$processoTeste2 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste2 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + + // Cadastro do processo e documento 2 + self::$objProtocoloDTO2 = $this->cadastrarProcessoFixture(self::$processoTeste2); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste2, self::$objProtocoloDTO2->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO2->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + + // Geração dos dados para o processo e documento de teste 3 recusa + self::$processoTeste3 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste3 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + + $objTipoProcedimentoDTO = $this->cadastrarTipoProcedimentoFixture([ + 'NOME' => 'Recusa: Teste Funcional', + ]); + self::$processoTeste3['ID_TIPO_PROCESSO'] = $objTipoProcedimentoDTO->getNumIdTipoProcedimento(); + + // Cadastro do processo e documento 3 recusa + self::$objProtocoloDTO3 = $this->cadastrarProcessoFixture(self::$processoTeste3); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste3, self::$objProtocoloDTO3->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO3->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + } + + public static function tearDownAfterClass(): void + { + putenv("DATABASE_HOST=org2-database"); + parent::tearDownAfterClass(); + $objTipoProcessoPadraoFixture = new \TipoProcessoPadraoFixture(); + $objTipoProcessoPadraoFixture->carregar([ + 'Nome' => 'PEN_TIPO_PROCESSO_EXTERNO', + 'Valor' => '100000256' + ]); + putenv("DATABASE_HOST=org1-database"); + } +} diff --git a/tests_super/funcional/src/fixtures/TipoProcessoPadraoFixture.php b/tests_super/funcional/src/fixtures/TipoProcessoPadraoFixture.php new file mode 100644 index 00000000..dad75f16 --- /dev/null +++ b/tests_super/funcional/src/fixtures/TipoProcessoPadraoFixture.php @@ -0,0 +1,30 @@ +objPenParametroDTO = new \PenParametroDTO(); + } + + protected function inicializarObjInfraIBanco() + { + return \BancoSEI::getInstance(); + } + + public function cadastrar($dados = []) + { + $objPenParametroDTO = new \PenParametroDTO(); + $objPenParametroDTO->setStrNome($dados['Nome']); + + $objPenParametroBD = new \PenParametroBD($this->inicializarObjInfraIBanco()); + if($objPenParametroBD->contar($objPenParametroDTO) > 0) { + $objPenParametroDTO->setStrValor($dados['Valor']); + $objPenParametroBD->alterar($objPenParametroDTO); + } + } +} diff --git a/tests_super/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php b/tests_super/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php index e775890f..dd07a649 100644 --- a/tests_super/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php +++ b/tests_super/funcional/src/paginas/PaginaCadastrarProcessoEmBloco.php @@ -116,6 +116,12 @@ public function buscarMensagemAlerta() return !empty($alerta->text()) ? $alerta->text() : ""; } + public function buscarQuantidadeProcessosRecusados() + { + $linhasDaTabelaRecusadas = $this->test->elements($this->test->using('xpath')->value("//img[@title='Recusado']")); + return count($linhasDaTabelaRecusadas); + } + public function tramitarProcessoExternamente($repositorio, $unidadeDestino, $unidadeDestinoHierarquia, $urgente = false, $callbackEnvio = null, $timeout = PEN_WAIT_TIMEOUT) { // Preencher parâmetros do trâmite diff --git a/tests_super/funcional/src/paginas/PaginaTramiteEmBloco.php b/tests_super/funcional/src/paginas/PaginaTramiteEmBloco.php index 8c2e6a83..57eabe04 100644 --- a/tests_super/funcional/src/paginas/PaginaTramiteEmBloco.php +++ b/tests_super/funcional/src/paginas/PaginaTramiteEmBloco.php @@ -44,6 +44,37 @@ public function selecionarTramiteEmBloco() $btnTramiteEmBloco->click(); } + /** + * Seleciona um processo específico com base no número do protocolo formatado. + * + * Este método busca o rótulo que contém o número do protocolo + * fornecido e simula um clique sobre ele para selecionar o processo. + * + * @param string $numProtocoloFormatado O número do protocolo formatado a ser selecionado. + * @return void + */ + public function selecionarProcesso($numProtocoloFormatado) + { + $btnTramiteEmBloco = $this->test->byXPath('//label[@title="' . $numProtocoloFormatado . '"]'); + $btnTramiteEmBloco->click(); + } + + /** + * Verifica o título da página atual. + * + * Este método busca e retorna o texto do título da página + * atual, comparando-o com o título fornecido. Ele é útil para + * garantir que a navegação ocorreu corretamente. + * + * @param string $titulo O título esperado da página. + * @return string O título da página atual. + */ + public function verificarTituloDaPagina($titulo) + { + $tituloDaPagina = $this->test->byXPath('//div[text()="' . $titulo . '"]'); + return $tituloDaPagina->text(); + } + /** * Selecionar bloco * @param string $selAndamento diff --git a/tests_super/funcional/tests/FixtureCenarioBaseTestCase.php b/tests_super/funcional/tests/FixtureCenarioBaseTestCase.php index fa608e45..09a51cd6 100755 --- a/tests_super/funcional/tests/FixtureCenarioBaseTestCase.php +++ b/tests_super/funcional/tests/FixtureCenarioBaseTestCase.php @@ -5,7 +5,7 @@ use Tests\Funcional\Sei\Fixtures\{ProtocoloFixture,ProcedimentoFixture,AtividadeFixture,ContatoFixture}; use Tests\Funcional\Sei\Fixtures\{ParticipanteFixture,RelProtocoloAssuntoFixture,AtributoAndamentoFixture}; use Tests\Funcional\Sei\Fixtures\{DocumentoFixture,AssinaturaFixture,AnexoFixture,AnexoProcessoFixture}; -use Tests\Funcional\Sei\Fixtures\{HipoteseLegalFixture}; +use Tests\Funcional\Sei\Fixtures\{HipoteseLegalFixture,TipoProcedimentoFixture}; use function PHPSTORM_META\map; /** @@ -15,7 +15,6 @@ class FixtureCenarioBaseTestCase extends CenarioBaseTestCase { protected function cadastrarProcessoFixture(&$dadosProcesso) { - if (!is_null($dadosProcesso['HIPOTESE_LEGAL'])){ $param = [ 'Nome' => trim(explode('(',$dadosProcesso['HIPOTESE_LEGAL'])[0]), @@ -36,9 +35,13 @@ protected function cadastrarProcessoFixture(&$dadosProcesso) $objProtocoloDTO = $objProtocoloFixture->carregar($parametros); $objProcedimentoFixture = new ProcedimentoFixture(); - $objProcedimentoDTO = $objProcedimentoFixture->carregar([ - 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() - ]); + $parametrosProcedimento = [ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]; + if (!is_null($dadosProcesso['ID_TIPO_PROCESSO'])) { + $parametrosProcedimento['IdTipoProcedimento'] = $dadosProcesso['ID_TIPO_PROCESSO']; + } + $objProcedimentoDTO = $objProcedimentoFixture->carregar($parametrosProcedimento); $objAtividadeFixture = new AtividadeFixture(); $objAtividadeDTO = $objAtividadeFixture->carregar([ @@ -248,4 +251,14 @@ protected function buscarIdSerieDoDocumento($tipoDocumento) return $objBD->consultar($serieDTO); } + protected function cadastrarTipoProcedimentoFixture($dados = []) + { + $objTipoProcedimentoFixture = new TipoProcedimentoFixture(); + $objTipoProcedimentoDTO = $objTipoProcedimentoFixture->carregar([ + 'Nome' => $dados['NOME'] + ]); + + return $objTipoProcedimentoDTO; + } + } diff --git a/tests_super/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php b/tests_super/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php new file mode 100644 index 00000000..db4516b0 --- /dev/null +++ b/tests_super/funcional/tests/TramiteBlocoExternoComProcessoNaoMapeadoRecusaTest.php @@ -0,0 +1,234 @@ +carregar([ + 'Nome' => 'PEN_TIPO_PROCESSO_EXTERNO', + 'Valor' => null + ]); + putenv("DATABASE_HOST=org1-database"); + } + + public function teste_tramite_bloco_externo_com_processo_nao_mapeado() + { + // Configuração do dados para teste do cenário + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + $this->prepararCenariosFixtures(); + + // Acesso ao sistema + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $this->paginaCadastrarProcessoEmBloco->bntTramitarBloco(); + $this->paginaCadastrarProcessoEmBloco->tramitarProcessoExternamente( + self::$destinatario['REP_ESTRUTURAS'], + self::$destinatario['NOME_UNIDADE'], + self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], + false, + function ($testCase) { + try { + $testCase->frame('ifrEnvioProcesso'); + $mensagemSucesso = mb_convert_encoding('Processo(s) aguardando envio. Favor acompanhar a tramitação por meio do bloco, na funcionalidade \'Blocos de Trâmite Externo\'', 'UTF-8', 'ISO-8859-1'); + $testCase->assertStringContainsString($mensagemSucesso, $testCase->byCssSelector('body')->text()); + $btnFechar = $testCase->byXPath("//input[@id='btnFechar']"); + $btnFechar->click(); + } finally { + try { + $testCase->frame(null); + $testCase->frame("ifrVisualizacao"); + } catch (Exception $e) { + } + } + + return true; + } + ); + + // Saída do sistema + $this->sairSistema(); + } + + public function test_verificar_envio_processo() + { + $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $this->paginaCadastrarProcessoEmBloco->bntVisualizarProcessos(); + + $this->waitUntil(function ($testCase) { + sleep(5); + $testCase->refresh(); + $linhasDaTabela = $testCase->elements($testCase->using('xpath')->value('//table[@id="tblBlocos"]/tbody/tr')); + + $totalConcluidos = 0; + foreach ($linhasDaTabela as $linha) { + $statusTd = $linha->byXPath('./td[7]'); + $statusTd->byXPath(mb_convert_encoding("(//img[@title='Concluído'])", 'UTF-8', 'ISO-8859-1')); + $totalConcluidos++; + } + $this->assertEquals($totalConcluidos, 3); + return true; + }, PEN_WAIT_TIMEOUT); + + sleep(5); + } + + public function test_verificar_envio_tramite_em_bloco() + { + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaCadastrarProcessoEmBloco->navegarListagemBlocoDeTramite(); + $novoStatus = $this->paginaCadastrarProcessoEmBloco->retornarTextoColunaDaTabelaDeBlocos(); + $this->assertEquals(mb_convert_encoding("Concluído", 'UTF-8', 'ISO-8859-1'), $novoStatus); + + $this->paginaCadastrarProcessoEmBloco->bntVisualizarProcessos(); + + $quantidadeLinhasRecusadas = $this->paginaCadastrarProcessoEmBloco->buscarQuantidadeProcessosRecusados(); + + $this->assertEquals($quantidadeLinhasRecusadas, 1); + + // Saída do sistema + $this->sairSistema(); + } + + public function test_incluir_processo_recusado_em_novo_bloco() + { + // Carregar dados do bloco de trâmite + $objBlocoDeTramiteFixture = new \BlocoDeTramiteFixture(); + self::$objBlocoDeTramiteDTO2 = $objBlocoDeTramiteFixture->carregar(); + + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->paginaBase->navegarParaControleProcesso(); + + // Seleção do processo e do bloco de trâmite + $protocoloFormatado = self::$objProtocoloDTO3->getStrProtocoloFormatado(); + $this->paginaTramiteEmBloco->selecionarProcesso($protocoloFormatado); + $this->paginaTramiteEmBloco->selecionarTramiteEmBloco(); + + // Verificação do título da página + $titulo = mb_convert_encoding("Incluir Processo(s) no Bloco de Trâmite", 'UTF-8', 'ISO-8859-1'); + $tituloRetorno = $this->paginaTramiteEmBloco->verificarTituloDaPagina($titulo); + $this->assertEquals($titulo, $tituloRetorno); + + // Inclusão do processo no bloco de trâmite + $this->paginaTramiteEmBloco->selecionarBloco(self::$objBlocoDeTramiteDTO2->getNumId()); + $this->paginaTramiteEmBloco->clicarSalvar(); + + // Espera para a mensagem de sucesso aparecer + sleep(2); + $mensagem = $this->paginaTramiteEmBloco->buscarMensagemAlerta(); + $this->assertStringContainsString( + mb_convert_encoding('Processo(s) incluído(s) com sucesso no bloco ' . self::$objBlocoDeTramiteDTO2->getNumOrdem(), 'UTF-8', 'ISO-8859-1'), + $mensagem + ); + + // Saída do sistema + $this->sairSistema(); + } + + private function prepararCenariosFixtures() + { + // Carregar dados do bloco de trâmite + $objBlocoDeTramiteProtocoloFixture = new \BlocoDeTramiteProtocoloFixture(); + $objBlocoDeTramiteFixture = new \BlocoDeTramiteFixture(); + self::$objBlocoDeTramiteDTO1 = $objBlocoDeTramiteFixture->carregar(); + + // Geração dos dados para o processo e documento de teste 1 + self::$processoTeste1 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste1 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + // Cadastro do processo e documento 1 + self::$objProtocoloDTO1 = $this->cadastrarProcessoFixture(self::$processoTeste1); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste1, self::$objProtocoloDTO1->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO1->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + + // Geração dos dados para o processo e documento de teste 2 + self::$processoTeste2 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste2 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + + // Cadastro do processo e documento 2 + self::$objProtocoloDTO2 = $this->cadastrarProcessoFixture(self::$processoTeste2); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste2, self::$objProtocoloDTO2->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO2->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + + // Geração dos dados para o processo e documento de teste 3 recusa + self::$processoTeste3 = $this->gerarDadosProcessoTeste(self::$remetente); + self::$documentoTeste3 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + + $objTipoProcedimentoDTO = $this->cadastrarTipoProcedimentoFixture([ + 'NOME' => 'Recusa: Teste Funcional', + ]); + self::$processoTeste3['ID_TIPO_PROCESSO'] = $objTipoProcedimentoDTO->getNumIdTipoProcedimento(); + + // Cadastro do processo e documento 3 recusa + self::$objProtocoloDTO3 = $this->cadastrarProcessoFixture(self::$processoTeste3); + $this->cadastrarDocumentoInternoFixture(self::$documentoTeste3, self::$objProtocoloDTO3->getDblIdProtocolo()); + $objBlocoDeTramiteProtocoloFixture->carregar([ + 'IdProtocolo' => self::$objProtocoloDTO3->getDblIdProtocolo(), + 'IdBloco' => self::$objBlocoDeTramiteDTO1->getNumId() + ]); + } + + public static function tearDownAfterClass(): void + { + putenv("DATABASE_HOST=org2-database"); + parent::tearDownAfterClass(); + $objTipoProcessoPadraoFixture = new \TipoProcessoPadraoFixture(); + $objTipoProcessoPadraoFixture->carregar([ + 'Nome' => 'PEN_TIPO_PROCESSO_EXTERNO', + 'Valor' => '100000256' + ]); + putenv("DATABASE_HOST=org1-database"); + } +}