diff --git a/.github/workflows/coveralls.yml b/.github/workflows/coveralls.yml new file mode 100644 index 000000000..4d2654c84 --- /dev/null +++ b/.github/workflows/coveralls.yml @@ -0,0 +1,42 @@ +on: + push: + paths: + - "**.php" + - "phpunit.xml" + - ".github/workflows/coveralls.yml" + pull_request: + paths: + - "**.php" + - "phpunit.xml" + - ".github/workflows/coveralls.yml" + +name: Test Coveralls +env: + github-token: ${{ secrets.GITHUB_TOKEN }} + +jobs: + + build: + name: Build + runs-on: ubuntu-latest + steps: + + - name: Fetch Pull Request branch + uses: actions/checkout@v4 + with: + repository: pengovbr/sei + token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT + path: sei + - name: Checkout + uses: actions/checkout@v4 + with: + path: sei/src/sei/web/modulos/mod-sei-pen + + - name: make test-unit + run: | + cd sei/src/sei/web/modulos/mod-sei-pen + make test-unit + - name: Coveralls + uses: coverallsapp/github-action@v2 + with: + file: sei/src/sei/web/modulos/mod-sei-pen/tests_super/unitario/cobertura.xml \ No newline at end of file diff --git a/.gitignore b/.gitignore index 64a8a8b8f..bddcffd98 100755 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ src/config/supervisor.ini .vscode +cobertura.xml .env *.pem *.cache diff --git a/Makefile b/Makefile index 50032fe69..dd967eb88 100755 --- a/Makefile +++ b/Makefile @@ -203,8 +203,8 @@ test-parallel-otimizado: .env $(FILE_VENDOR_FUNCIONAL) up make -j2 test-functional-parallel tramitar-pendencias-silent -test-unit: $(FILE_VENDOR_UNITARIO) - $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml run --rm -w /tests php-test-unit bash -c 'vendor/bin/phpunit rn/$(addsuffix .php,$(teste))' +test-unit: .env $(FILE_VENDOR_UNITARIO) + $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml run --rm -w /tests php-test-unit bash -c 'XDEBUG_MODE=coverage vendor/bin/phpunit --testdox --coverage-html html rn/$(addsuffix .php,$(teste))' test: test-unit test-functional diff --git a/src/pen_map_unidade_cadastrar.php b/src/pen_map_unidade_cadastrar.php index ce03d4f84..fab222867 100755 --- a/src/pen_map_unidade_cadastrar.php +++ b/src/pen_map_unidade_cadastrar.php @@ -183,9 +183,9 @@ $objUnidadeDTO->retStrDescricao(); $arrMapIdUnidade = array(); $objPenUnidadeRN = new PenUnidadeRN(); - foreach ($objPenUnidadeRN->listar($objUnidadeDTO) as $dados) { - $arrMapIdUnidade[$dados->getNumIdUnidade()] = $dados->getStrSigla() . ' - ' . $dados->getStrDescricao(); - } + foreach ($objPenUnidadeRN->listar($objUnidadeDTO) as $dados) { + $arrMapIdUnidade[$dados->getNumIdUnidade()] = $dados->getStrSigla() . ' - ' . $dados->getStrDescricao(); + } //Verifica se o numero da unidade esta vazio, senão estiver busca o nome da unidade para exibição $strNomeUnidadeSelecionada = ''; diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index b709b3397..6952731ac 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -271,7 +271,7 @@ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificac } } - return self::converterArrayParaObjeto($arrResultado); + return $this->converterArrayParaObjeto($arrResultado); } $objEstruturaDTO = new EstruturaDTO(); @@ -476,7 +476,7 @@ public function buscarEstrutura( * @param $idRepositorioEstrutura * @return array|null */ - private function validarRestricaoUnidadesCadastradas($idRepositorioEstrutura) + protected function validarRestricaoUnidadesCadastradas($idRepositorioEstrutura) { //Verificar limitação de repositórios/unidades mapeadas $arrEstruturasCadastradas = null; @@ -542,7 +542,7 @@ private function validarRestricaoUnidadesCadastradas($idRepositorioEstrutura) * @param null|string $numeroDeIdentificacaoDaEstrutura * @return array */ - private function buscarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null) + protected function buscarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null) { $parametros = new stdClass(); $parametros->filtroDeEstruturasPorEstruturaPai = new stdClass(); @@ -754,10 +754,10 @@ public function consultarMotivosUrgencia() $arrResultado = $this->get($endpoint, $parametros); $arrMotivosUrgencia = []; if (isset($arrResultado)) { - $count = count($arrResultado['motivosUrgencia']); - + $count = count($arrResultado['motivosUrgencia']); for ($i = 0; $i < $count; $i++) { - $arrMotivosUrgencia[] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); + $codigo = $i + 1; + $arrMotivosUrgencia[$codigo] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); } } @@ -787,9 +787,9 @@ public function consultarEspeciesDocumentais() $arrEspecies = []; if (isset($arrResultado)) { $count = count($arrResultado['especies']); - for ($i = 0; $i < $count; $i++) { - $arrEspecies[] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); + $codigo = $i + 1; + $arrEspecies[$codigo] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); } } @@ -1231,6 +1231,13 @@ public function solicitarMetadados($parNumIdentificacaoTramite) $objResultado->IDT = $parNumIdentificacaoTramite; $objResultado->NRE = $arrResultado['nre']; + // verificar se é um documento avulso + if (!array_key_exists('processo', $arrResultado) || $arrResultado['processo'] == null) { + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); + + return $objResultado; + } + $multivalorado = false; if (count($arrResultado['processo']['documentos']) <= 1) { $arrResultado['processo']['documentos'] = (object) $arrResultado['processo']['documentos'][0]; @@ -1487,9 +1494,9 @@ protected function cadastrarTramiteDeProcessoInternoControlado(ProcessoEletronic */ public static function getHashFromMetaDados($objMeta) { - if (is_array($objMeta)) { - $objMeta = (object) $objMeta; - } + if (is_array($objMeta)) { + $objMeta = (object) $objMeta; + } $strHashConteudo = ''; @@ -2242,24 +2249,23 @@ public function isDisponivelCancelarTramite($strProtocolo = '') } } - public function consultarHipotesesLegais($ativos = true) + public function consultarHipotesesLegais($ativos = true) { $endpoint = "hipoteses"; - + $parametros = [ 'ativos' => $ativos ]; - + try { $arrResultado = $this->get($endpoint, $parametros); - return $arrResultado; - - if (empty($hipoteses)) { + + if (empty($arrResultado)) { return []; } - - return $hipoteses; - + + return $arrResultado; + } catch(Exception $e){ $mensagem = "Falha na obtenção de hipóteses legais"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); @@ -2279,7 +2285,8 @@ protected function contarConectado(ProcessoEletronicoDTO $objProcessoEletronicoD } } - private function tentarNovamenteSobErroHTTP($callback, $numTentativa = 1) + + protected function tentarNovamenteSobErroHTTP($callback, $numTentativa = 1) { try { return $callback($this->getObjPenWs()); @@ -2367,12 +2374,12 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; - foreach ($arrObjDocumentoPadronizados as $documento) { - if (is_array($documento) && $documento['componentesDigitais']) { - $documento = (object) $documento; - } - $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + foreach ($arrObjDocumentoPadronizados as $documento) { + if (is_array($documento) && $documento['componentesDigitais']) { + $documento = (object) $documento; } + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + } return $arrObjDocumentoPadronizados; } @@ -2385,10 +2392,10 @@ public static function obterComponentesDocumentos($parObjDocumento) if (isset($parObjDocumento->componentesDigitais)) { $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); - } + } return $arrObjComponenteDigital; - } + } /** * Retorna a referência para o processo ou documento avulso @@ -2440,14 +2447,14 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) * @param $parObjDocumento * @return array */ - public static function obterComponentesDigitaisDocumento($parObjDocumento) + public static function obterComponentesDigitaisDocumento($parObjDocumento) { - $arrObjComponenteDigital = array(); + $arrObjComponenteDigital = array(); if(isset($parObjDocumento->componentesDigitais)){ $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); } - return $arrObjComponenteDigital; + return $arrObjComponenteDigital; } @@ -2733,29 +2740,29 @@ public function listarAssociacoesDocumentos($idProcedimento) /** * Converter arrays associativo para objetos */ - public static function converterArrayParaObjeto($array) - { - if (is_array($array)) { - // Verificar se o array é associativo - if (self::verificarSeArrayAssociativo($array)) { - $object = new stdClass(); - foreach ($array as $key => $value) { - $object->$key = self::converterArrayParaObjeto($value); - } - return $object; - } else { - // Para arrays indexados, manter como está - return array_map([self::class, 'converterArrayParaObjeto'], $array); - } + public function converterArrayParaObjeto($array) + { + if (is_array($array)) { + // Verificar se o array é associativo + if (self::verificarSeArrayAssociativo($array)) { + $object = new stdClass(); + foreach ($array as $key => $value) { + $object->$key = $this->converterArrayParaObjeto($value); } - - return $array; + return $object; + } else { + // Para arrays indexados, manter como está + return array_map([self::class, 'converterArrayParaObjeto'], $array); + } } - private static function verificarSeArrayAssociativo(array $array): bool + return $array; + } + + private static function verificarSeArrayAssociativo(array $array) { - return array_keys($array) !== range(0, count($array) - 1); - } + return array_keys($array) !== range(0, count($array) - 1); + } /** diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index 82077f3e2..b7695f636 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -260,9 +260,9 @@ public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, throw new InfraException("Componente Digital não informado"); } - if (is_array($parObjComponenteDigital)) { - $parObjComponenteDigital = (object) $parObjComponenteDigital; - } + if (is_array($parObjComponenteDigital)) { + $parObjComponenteDigital = (object) $parObjComponenteDigital; + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 74a3d57ad..6412d3b1d 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -681,9 +681,9 @@ private function listarMetaDadosComponentesDigitais($parObjProtocolo) $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); foreach($arrObjDocumento as $key => $objDocumento){ - if (is_array($objDocumento->componentesDigitais[$key])) { - $objDocumento->componentesDigitais[$key] = (object) $objDocumento->componentesDigitais[$key]; - } + if (is_array($objDocumento->componentesDigitais[$key])) { + $objDocumento->componentesDigitais[$key] = (object) $objDocumento->componentesDigitais[$key]; + } $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componentesDigitais[$key]->hash); $objMapDTO = new PenRelTipoDocMapRecebidoDTO(true); $objMapDTO->setNumMaxRegistrosRetorno(1); @@ -761,9 +761,9 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac private function validaTamanhoComponenteDigital($objComponenteDigital) { - if (is_array($objComponenteDigital)) { - $objComponenteDigital = (object) $objComponenteDigital; - } + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); @@ -1941,9 +1941,9 @@ private function atribuirComponentesJaExistentesNoProcesso($objDocumentoDTO, $ob $arrObjAnexosDTO = array(); $arrObjAnexoDTO = array(); foreach ($objComponentesDigitais as $objComponenteDigital) { - if (is_array($objComponenteDigital)) { - $objComponenteDigital = (object) $objComponenteDigital; - } + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } $strHashComponenteDigital = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); $bolComponenteDigitalBaixado = in_array($strHashComponenteDigital, $arrHashComponenteBaixados); @@ -2757,9 +2757,9 @@ private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) } foreach ($arrDocumento->componentesDigitais as $objComponente) { - if (is_array($objComponente)) { - $objComponente = (object) $objComponente; - } + if (is_array($objComponente)) { + $objComponente = (object) $objComponente; + } $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente->hash); $resultado[$strHash] = $objComponente; diff --git a/tests_sei4/funcional/phpunit.xml b/tests_sei4/funcional/phpunit.xml index 20f52b05f..2dd86c6fc 100755 --- a/tests_sei4/funcional/phpunit.xml +++ b/tests_sei4/funcional/phpunit.xml @@ -15,7 +15,7 @@ + value="https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/" /> diff --git a/tests_sei4/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php b/tests_sei4/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php index 84424de88..b9138d7cc 100755 --- a/tests_sei4/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php +++ b/tests_sei4/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php @@ -12,7 +12,7 @@ class RecebimentoRecusaJustificativaGrandeTest extends FixtureCenarioBaseTestCas protected $destinatarioWs; protected $servicoPEN; public static $remetente; - public static $destinatario; + public static $destinatario; public static $processoTeste; public static $documentoTeste; public static $protocoloTeste; @@ -58,7 +58,9 @@ public function test_tramitar_processo_da_origem() }else{ $id_tramite=$id_tramite[0]["ID_TRAMITE"]; } - $this->recusarTramite($this->servicoPEN, $id_tramite); + + sleep(5); + $this->recusarTramite($id_tramite); } /** @@ -90,39 +92,58 @@ public function test_verificar_destino_processo_para_devolucao() } - private function recusarTramite($servicoPEN, $id_tramite) + private function recusarTramite($id_tramite) { $justificativa = "An exception occurred while executing 'INSERT INTO juntadas (numeracao_sequencial, movimento, ativo, vinculada, criado_em, atualizado_em, id, uuid, documentos_juntado_id, volumes_id, atividades_id, tarefas_id, comunicacoes_id, origem_dados_id, criado_por, atualizado_por) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [1, 'DOCUMENTO RECEBIDO VIA INTEGRA\u00c7\u00c3O COM O BARRAMENTO', 1, 0, '2021-12-02 14:21:48', '2021-12-02 14:21:48', 1317074776, '06ba31e8-75ad-4111-82dc-6f451f51825e', 1333864526, null, null, null, null, 3534979787, null, null]: ORA-00001: restrição exclusiva (SAPIENS.UNIQ_867686DHDKJ97876) violada"; $parametros = new stdClass(); $parametros->recusaDeTramite = new stdClass(); $parametros->recusaDeTramite->IDT = $id_tramite; - $parametros->recusaDeTramite->justificativa = mb_convert_encoding($justificativa, 'UTF-8', 'ISO-8859-1'); + $parametros->recusaDeTramite->justificativa = utf8_encode($justificativa); $parametros->recusaDeTramite->motivo = "99"; - return $servicoPEN->recusarTramite($parametros); + + return $this->recusarTramiteAPI($parametros); + } + + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + // TODO: lembrar de pegar url dinamicamente quando SOAP for removido + $strBaseUri = PEN_ENDERECO_WEBSERVICE; + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + public function recusarTramiteAPI($parametros) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $idt = $parametros->recusaDeTramite->IDT; + $justificativa = $parametros->recusaDeTramite->justificativa; + $motivo = $parametros->recusaDeTramite->motivo; + + $endpoint = "tramites/{$idt}/recusa"; + + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $parametros = [ + 'justificativa' => mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000), 'UTF-8', 'ISO-8859-1'), + 'motivo' => $motivo + ]; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + return $response; } } diff --git a/tests_sei4/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php b/tests_sei4/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php index 99d2c2473..37b1ee11b 100755 --- a/tests_sei4/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php +++ b/tests_sei4/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php @@ -16,6 +16,7 @@ class TramiteRecebimentoDocumentoAvulsoTest extends FixtureCenarioBaseTestCase const CONTEUDO_DOCUMENTO_C = "arquivo_pequeno_C.pdf"; protected $servicoPEN; + protected $servicoPEN2; public static $remetente; public static $destinatario; public static $processoTeste; @@ -39,12 +40,7 @@ public function setUp(): void // Carregar contexto de testes e dados sobre certificado digital self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - putenv("DATABASE_HOST=org2-database"); - - // Instanciar objeto de teste utilizando o BeSimpleSoap - $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; - $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; - $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + } /** @@ -52,16 +48,21 @@ public function setUp(): void * * @return void */ - public function test_recebimento_documento_avulso() + public function test_recebimento_metadados_documento_avulso() { + + $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; + $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; + + $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + // Simular um trâmite chamando a API do Barramento diretamente self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente, array(self::CONTEUDO_DOCUMENTO_A)); $metadadosDocumentoTeste = $this->construirMetadadosDocumentoTeste(self::$documentoTeste1); - $novoTramite = $this->enviarMetadadosDocumento($this->servicoPEN, self::$remetente, self::$destinatario, $metadadosDocumentoTeste); - $this->enviarComponentesDigitaisDoTramite($this->servicoPEN, $novoTramite, $metadadosDocumentoTeste); - $reciboTramite = $this->receberReciboEnvio($this->servicoPEN, $novoTramite); - + $novoTramite = $this->enviarMetadadosDocumento(self::$remetente, self::$destinatario, $metadadosDocumentoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $metadadosDocumentoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); @@ -75,7 +76,6 @@ public function test_recebimento_documento_avulso() * @group envio * @large * - * @depends test_recebimento_documento_avulso * * @return void */ @@ -149,76 +149,51 @@ public function test_verificar_recebimento_processo_destino_documento_avulso() $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, $documentos, self::$destinatario); } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->tramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } - private function enviarMetadadosDocumento($servicoPEN, $remetente, $destinatario, $documentoTeste) + private function receberReciboEnvio($novoTramite) { - $parametros = new stdClass(); - $parametros->novoTramiteDeDocumento = new stdClass(); - $parametros->novoTramiteDeDocumento->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeDocumento->documento = $documentoTeste; - return $servicoPEN->enviarDocumento($parametros); + $dadosTramite = $novoTramite['tramites']; + $idt = $dadosTramite[0]['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $documentoTeste) + private function enviarMetadadosDocumento($remetente, $destinatario, $documentoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $documentoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); - } + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['documento'] = $documentoTeste['documentoEnvio']; + + return $this->enviarDocumentoAPI($parametros); } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function enviarComponentesDigitaisDoTramite($novoTramite, $documentoTeste) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $parametros = []; + $dadosDoComponenteDigital['protocolo'] = $documentoTeste['documentoEnvio']['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $documentoTeste['componenteEnvio']['hashDocumento']; + $dadosDoComponenteDigital['conteudoDoComponenteDigital'] = $documentoTeste['componenteEnvio']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + + $this->enviarComponenteDigitalAPI($parametros); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatarios' => [ + [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + ] + ]; + return $cabecalho; } @@ -247,42 +222,145 @@ private function construirMetadadosDocumentoTeste($documentoTeste) $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + "mimeType" => "application/pdf", 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordem + 1, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); } finally { fclose($fp); } } - return array( - 'protocolo' => '13990.000181/2020-00', + $documentoEnvio = array( + 'protocolo' => '13990.000185/2024-00', 'nivelDeSigilo' => 1, 'descricao' => $documentoTeste['DESCRICAO'], 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', - 'produtor' => array( - 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + "nome" => "Nome ABC", + "tipo" => "orgaopublico" ), - 'especie' => array( 'codigo' => 42, - 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') + 'nomeNoProdutor' => 'Despacho', ), - - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo + ); + + return array( + 'documentoEnvio' => $documentoEnvio, + 'componenteEnvio' => $componenteEnvio ); } + + public function enviarDocumentoAPI($parametros) + { + try { + $endpoint = "tramites/documento"; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de documento avulso"; + } + } + + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + $conteudo = $arrParametros['conteudoDoComponenteDigital']; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = $this->servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = $this->servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } + } + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; + } } diff --git a/tests_sei4/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php b/tests_sei4/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php index 768308bb9..b612f426f 100755 --- a/tests_sei4/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php +++ b/tests_sei4/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php @@ -19,6 +19,8 @@ class TramiteRecebimentoInteressadosDuplicadosTest extends FixtureCenarioBaseTes public static $servicoPEN; public static $documentoTeste1; + public static $conteudoCompoonenteDigital; + /** * Teste de envio de metadados do processo contendo interessados duplicados * @@ -50,9 +52,9 @@ public function test_envio_processo_com_documento_anexado() // Inicia o envio do processo $arrDocumentosPrimeiroEnvio = array(self::$documentoTeste1); $processoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, $arrDocumentosPrimeiroEnvio); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, self::$remetente, self::$destinatario, $processoTeste); - $this->enviarComponentesDigitaisDoTramite(self::$servicoPEN, $novoTramite, $processoTeste); - $reciboTramite = $this->receberReciboEnvio(self::$servicoPEN, $novoTramite); + $novoTramite = $this->enviarMetadadosProcesso(self::$remetente, self::$destinatario, $processoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verifica recebimento de novo processo administrativo contendo documento avulso enviado @@ -65,86 +67,71 @@ public function test_envio_processo_com_documento_anexado() } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; + + return $this->enviarProcessoAPI($parametros); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } - } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); } - private function receberReciboTramite($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + return $cabecalho; } @@ -169,7 +156,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } $arrInteressados = array_map(function($item) { @@ -186,9 +174,10 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => $arrInteressados, - 'documento' => $metadadosDocumentos, + 'interessados' => $arrInteressados, + 'documentos' => $metadadosDocumentos, ); } @@ -207,16 +196,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital = [$hashDocumento => $conteudo]; } finally { fclose($fp); } @@ -229,10 +219,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -240,17 +229,102 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + } + } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } } } diff --git a/tests_sei4/unitario/bootstrap.php b/tests_sei4/unitario/bootstrap.php index 69fdb7ba6..383369434 100755 --- a/tests_sei4/unitario/bootstrap.php +++ b/tests_sei4/unitario/bootstrap.php @@ -1,9 +1,5 @@ + + + /opt/sei/web/modulos/pen/vendor + /opt/sei/web/modulos/pen/config + + + /opt/sei/web/modulos/pen + + diff --git a/tests_sei4/unitario/rn/CompararVersoesTest.php b/tests_sei4/unitario/rn/CompararVersoesTest.php new file mode 100644 index 000000000..949f944c3 --- /dev/null +++ b/tests_sei4/unitario/rn/CompararVersoesTest.php @@ -0,0 +1,17 @@ +assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); + $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); + $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php new file mode 100644 index 000000000..715e414cb --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php @@ -0,0 +1,140 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'buscarEstruturaRest']) + ->getMock(); + } + + /** + * Testa o comportamento do método buscarEstrutura em caso de sucesso. + * + * Simula uma resposta válida para o método `buscarEstruturaRest` e verifica + * se o retorno do método testado é uma instância válida da classe EstruturaDTO. + * + * @return void + */ + public function testBuscarEstruturaSucesso() + { + // Mock do retorno esperado da API + $estruturaMock = [ + 'numeroDeIdentificacaoDaEstrutura' => '12345', + 'nome' => 'Estrutura Teste', + 'sigla' => 'ET', + 'ativo' => true, + 'aptoParaReceber' => true, + 'codigoNoOrgaoEntidade' => 'CNOE123', + 'hierarquia' => [ + ['sigla' => 'Nivel1'], + ['sigla' => 'Nivel2'] + ] + ]; + + // Mock do método buscarEstruturaRest + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn($estruturaMock); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + /** + * Testa o comportamento do método buscarEstrutura com um repositório inválido. + * + * Verifica se o método lança a exceção correta ao receber um ID de repositório inválido. + * + * @return void + */ + public function testBuscarEstruturaComRepositorioInvalido() + { + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->buscarEstrutura(0); // Passando um ID inválido + } + + /** + * Testa o comportamento do método buscarEstrutura quando a estrutura não é encontrada. + * + * Simula o retorno `null` do método `buscarEstruturaRest` e verifica se o + * método principal retorna `null` como esperado. + * + * @return void + */ + public function testBuscarEstruturaNaoEncontrada() + { + // Mock para retorno nulo da API + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn(null); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + // Asserção de retorno nulo + $this->assertNull($resultado); + } + + /** + * Testa o comportamento do método buscarEstrutura quando ocorre uma exceção. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é lançada + * pelo método testado. + * + * @return void + */ + public function testBuscarEstruturaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception()); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..6d72134e3 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,136 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'tentarNovamenteSobErroHTTP']) + ->getMock(); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` com parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna o número correto de estruturas. + * - As estruturas têm os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiComIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = [ + (object) ['id' => 1, 'nome' => 'Estrutura 1'], + (object) ['id' => 2, 'nome' => 'Estrutura 2'] + ]; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + $numeroDeIdentificacaoDaEstrutura = 'ABC123'; + + $resultado = $metodoPrivado->invokeArgs( + $this->mockService, + [$idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura] + ); + + // Validações + $this->assertIsArray($resultado, 'Deve retornar um array'); + $this->assertCount(2, $resultado, 'Deve retornar duas estruturas'); + $this->assertEquals('Estrutura 1', $resultado[0]->nome, 'Deve retornar a estrutura 1'); + $this->assertEquals('Estrutura 2', $resultado[1]->nome, 'Deve retornar a estrutura 2'); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` sem parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna uma estrutura única com os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiSemIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = (object) ['id' => 1, 'nome' => 'Estrutura Única']; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + + $resultado = $metodoPrivado->invokeArgs($this->mockService, [$idRepositorioEstrutura]); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(1, $resultado); + $this->assertEquals('Estrutura Única', $resultado[0]->nome); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php new file mode 100644 index 000000000..4c85d7dfd --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php @@ -0,0 +1,87 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['delete']) + ->getMock(); + } + + /** + * Teste do método cancelarTramite em caso de sucesso. + * + * Este teste simula a execução do método cancelarTramite quando o método 'delete' do mock + * retorna uma resposta bem-sucedida (null). O teste verifica se o retorno do método é + * o esperado (null), indicando que o trâmite foi cancelado com sucesso. + * + * @return void + */ + public function testCancelarTramiteSucesso() + { + $mockResponse = null; + + // Configura o mock para retornar a resposta esperada (null) + $this->mockService->expects($this->once()) + ->method('delete') + ->willReturn($mockResponse); + + // Executa o método cancelarTramite + $resultado = $this->mockService->cancelarTramite(999); + + // Verifica se o retorno é nulo (indicando sucesso no cancelamento) + $this->assertNull($mockResponse, "O objeto é nulo"); + } + + /** + * Teste do método cancelarTramite quando ocorre uma exceção. + * + * Este teste simula a falha no método cancelarTramite, quando o método 'delete' do mock + * lança uma exceção. O teste verifica se a exceção esperada (InfraException) é lançada e + * se a mensagem associada à exceção está correta. + * + * @return void + * @throws \InfraException Quando ocorre uma falha no cancelamento do trâmite + */ + public function testCancelarTramiteLancaExcecao() + { + // Configura o mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('delete') + ->willThrowException(new Exception('Erro na requisição')); + + // Espera que a exceção InfraException seja lançada com a mensagem esperada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no cancelamento de trâmite de processo'); + + // Executa o método cancelarTramite e verifica se a exceção é lançada + $this->mockService->cancelarTramite(999); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php new file mode 100644 index 000000000..f436fbd3f --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php @@ -0,0 +1,96 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `cienciaRecusa` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as chaves `status` e `mensagem`. + * - Contém os valores esperados no retorno. + */ + public function testCienciaRecusaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'status' => 'sucesso', + 'mensagem' => 'Ciência registrada com sucesso.' + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('tramites/123/ciencia', ['IDT' => 123]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->cienciaRecusa(123); + + // Validações + $this->assertIsArray($resultado); + $this->assertArrayHasKey('status', $resultado); + $this->assertEquals('sucesso', $resultado['status']); + $this->assertEquals('Ciência registrada com sucesso.', $resultado['mensagem']); + } + + /** + * Testa o método `cienciaRecusa` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testCienciaRecusaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no registro de ciência da recusa de trâmite'); + + // Chamada do método (deve lançar exceção) + $this->mockService->cienciaRecusa(123); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php new file mode 100644 index 000000000..2b22a1acc --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php @@ -0,0 +1,131 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarEspeciesDocumentais` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as espécies documentais. + * - Converte corretamente as strings para o formato esperado (`ISO-8859-1`). + */ + public function testConsultarEspeciesDocumentaisComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [ + ['nomeNoProdutor' => 'Espécie 1'], + ['nomeNoProdutor' => 'Espécie 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals( + mb_convert_encoding('Espécie 1', 'ISO-8859-1', 'UTF-8'), + $resultado[0] + ); + $this->assertEquals( + mb_convert_encoding('Espécie 2', 'ISO-8859-1', 'UTF-8'), + $resultado[1] + ); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarEspeciesDocumentaisSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarEspeciesDocumentaisComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Não foi encontrado nenhuma espécie documental.'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarEspeciesDocumentais(); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php new file mode 100644 index 000000000..2152b5bb9 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php @@ -0,0 +1,108 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, false); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaBolRetornoRawTrueSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, true); + + $this->assertInstanceOf(stdClass::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..519b47b0f --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,122 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'validarRestricaoUnidadesCadastradas', 'buscarEstruturasPorEstruturaPai']) + ->getMock(); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para um caso de sucesso. + * + * Verifica se a lista de estruturas é retornada e ordenada corretamente com base nos nomes. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiRetornaEstruturasOrdenadas() + { + $idRepositorioEstrutura = 1; + $mockEstruturas = [ + (object)['nome' => 'Unidade B', 'codigo' => '002'], + (object)['nome' => 'Unidade A', 'codigo' => '001'], + (object)['nome' => 'Unidade C', 'codigo' => '003'], + ]; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->with($idRepositorioEstrutura) + ->willReturn(null); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, null) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + + $this->assertCount(3, $resultado); + $this->assertEquals('Unidade A', $resultado[0]->nome); + $this->assertEquals('Unidade B', $resultado[1]->nome); + $this->assertEquals('Unidade C', $resultado[2]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para uma unidade pai específica. + * + * Verifica se a busca por estrutura pai é realizada corretamente ao fornecer + * um número de identificação específico. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiComUnidadePaiEspecifica() + { + $idRepositorioEstrutura = 1; + $numeroDeIdentificacaoDaEstrutura = '001'; + $mockEstruturas = [ + (object)['nome' => 'Unidade D', 'codigo' => '004'], + ]; + + $this->mockService->expects($this->never()) + ->method('validarRestricaoUnidadesCadastradas'); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura); + + $this->assertCount(1, $resultado); + $this->assertEquals('Unidade D', $resultado[0]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai quando ocorre um erro. + * + * Verifica se uma exceção InfraException é lançada corretamente ao ocorrer + * um erro no método validarRestricaoUnidadesCadastradas. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->willThrowException(new Exception('Erro no serviço')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php new file mode 100644 index 000000000..7acd9b36d --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php @@ -0,0 +1,82 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "estruturas" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ] + ], + "totalDeRegistros" => 1 + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstruturas(159098, []); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturas(159098, []); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php new file mode 100644 index 000000000..9c13025b7 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php @@ -0,0 +1,111 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o sucesso da consulta de hipóteses legais. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array de hipoteses + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = [ + 'hipoteseslegais' => [ + ] + ]; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertArrayHasKey('hipoteseslegais', $resultado); + } + + /** + * Testa o sucesso da consulta de hipóteses legais com retorno vazio. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array vazio + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisRetornoVazioSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = []; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertEquals(0, count($resultado)); + } + + /** + * Testa o lançamento de exceção ao tentar consultar as hipóteses legais. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre um erro + * ao tentar realizar a consulta (simulando a exceção gerada pelo método 'get'). + * + * @return void + * @throws InfraException Se a exceção de infra-estrutura for gerada. + */ + public function testConsultarHipotesesLegaisLancaExcecao() + { + // Configura o mock para lançar uma exceção quando o método 'get' for chamado + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + // Define a expectativa de que a exceção InfraException será lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de hipóteses legais'); + + // Chama o método que deve lançar a exceção + $this->mockService->consultarHipotesesLegais(true); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php new file mode 100644 index 000000000..ed8532f0b --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php @@ -0,0 +1,126 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'get']) + ->getMock(); + } + + /** + * Testa o método `consultarMotivosUrgencia` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array. + * - Contém os motivos de urgência esperados. + */ + public function testConsultarMotivosUrgenciaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [ + ['descricao' => 'Motivo 1'], + ['descricao' => 'Motivo 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals('Motivo 1', $resultado[0]); + $this->assertEquals('Motivo 2', $resultado[1]); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarMotivosUrgenciaSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarMotivosUrgenciaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarMotivosUrgencia(); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php new file mode 100644 index 000000000..34788d48b --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php @@ -0,0 +1,125 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna uma instância de `RepositorioDTO`. + * - Preenche os atributos da instância com os valores corretos. + */ + public function testConsultarRepositoriosDeEstruturasComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + [ + 'id' => 5, + 'nome' => 'Repositório 1', + 'ativo' => true + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(5); + + // Validações + $this->assertInstanceOf(RepositorioDTO::class, $resultado); + $this->assertEquals(5, $resultado->getNumId()); + $this->assertEquals( + mb_convert_encoding('Repositório 1', 'ISO-8859-1', 'UTF-8'), + $resultado->getStrNome() + ); + $this->assertTrue($resultado->getBolAtivo()); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando não há resultados. + * + * Verifica se o método: + * - Retorna `null` quando não há repositórios disponíveis. + */ + public function testConsultarRepositoriosDeEstruturasSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = []; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(123); + + // Validações + $this->assertNull($resultado); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarRepositoriosDeEstruturasComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarRepositoriosDeEstruturas(123); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php new file mode 100644 index 000000000..be505824f --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php @@ -0,0 +1,130 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasAutoCompletar com parâmetros válidos. + * + * Verifica se o retorno do método é formatado corretamente, incluindo: + * - Propriedades convertidas para UTF-8. + * - Hierarquia de siglas mapeada. + * - Quantidade correta de itens no resultado. + */ + public function testListarEstruturasAutoCompletarRetornaEstruturasFormatadas() + { + // Simulação de parâmetros e retorno esperado + $idRepositorioEstrutura = 1; + $nome = 'Teste Unidade'; + $mockResultado = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 101, + 'nome' => 'Unidade A', + 'sigla' => 'UA', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '123', + 'hierarquia' => [ + ['sigla' => 'ORG'] + ] + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => 102, + 'nome' => 'Unidade B', + 'sigla' => 'UB', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '456', + 'hierarquia' => [] + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->callback(function ($parametros) use ($nome) { + return $parametros['nome'] === $nome && $parametros['apenasAtivas'] === true; + })) + ->willReturn($mockResultado); + + $resultado = $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura, $nome); + + // Asserções sobre o retorno + $this->assertIsArray($resultado); + $this->assertArrayHasKey('diferencaDeRegistros', $resultado); + $this->assertArrayHasKey('itens', $resultado); + $this->assertCount(2, $resultado['itens']); + } + + /** + * Testa o método listarEstruturasAutoCompletar quando ocorre um erro. + * + * Simula um erro no método consultarEstruturas e verifica se uma exceção + * InfraException é lançada corretamente com a mensagem esperada. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro interno')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasAutoCompletar com repositório inválido. + * + * Verifica se uma exceção InfraException é lançada quando o ID do + * repositório de estruturas fornecido é inválido. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php new file mode 100644 index 000000000..a23711182 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php @@ -0,0 +1,124 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um caso de sucesso. + * + * Simula uma resposta válida do método 'consultarEstruturas' e verifica + * se o retorno é uma lista de objetos EstruturaDTO com os dados corretos. + * + * @return void + */ + public function testListarEstruturasBuscaTextualRetornaEstruturas() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Raiz'; + $mockResponse = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => '123', + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [['sigla' => 'H1'], ['sigla' => 'H2']], + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => '456', + 'nome' => 'Estrutura 2', + 'sigla' => 'E2', + 'ativo' => false, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '002', + 'hierarquia' => [['sigla' => 'H3']], + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->arrayHasKey('identificacaoDoRepositorioDeEstruturas')) + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura, $nome); + + $this->assertCount(2, $resultado); + $this->assertInstanceOf(EstruturaDTO::class, $resultado[0]); + $this->assertEquals('123', $resultado[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $resultado[0]->getStrNome()); + $this->assertEquals(['H1', 'H2'], $resultado[0]->getArrHierarquia()); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um repositório inválido. + * + * Verifica se uma exceção InfraException é lançada ao fornecer um ID de repositório inválido. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasBuscaTextual para falhas no web service. + * + * Simula um erro no método 'consultarEstruturas' e verifica se a exceção + * InfraException é lançada com a mensagem correta. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaErroWebService() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php new file mode 100644 index 000000000..f8d69ea83 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php @@ -0,0 +1,67 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testListarPendenciasSucesso() + { + $mockResponse = [ + [ + 'status' => 2, + 'IDT' => 999 + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarPendencias(true); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(PendenciaDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + public function testListarPendenciasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na listagem de pendências de trâmite de processos'); + + $this->mockService->listarPendencias(true); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php new file mode 100644 index 000000000..dbd027c18 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php @@ -0,0 +1,97 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele + * retorna uma lista de repositórios de estruturas com sucesso. + * + * Cenário testado: + * - O método 'get' retorna uma lista simulada de repositórios. + * - O retorno do método deve ser um array contendo objetos do tipo RepositorioDTO. + * + * Asserções: + * - O retorno deve ser um array. + * - A quantidade de itens no retorno deve ser igual à quantidade simulada. + * - O primeiro item do retorno deve ser uma instância de RepositorioDTO. + * + * @return void + */ + public function testListarRepositoriosDeEstruturasRetornaListaSucesso() + { + $mockResponse = [ + ["id" => 49, "nome" => "Acre - AC", "ativo" => true], + ["id" => 2, "nome" => "Advocacia-Geral da União", "ativo" => true], + ["id" => 7, "nome" => "Alagoas( Estado)", "ativo" => true], + ["id" => 20, "nome" => "Banco Central do Brasil 2", "ativo" => true], + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarRepositoriosDeEstruturas(); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(RepositorioDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele lança + * uma exceção quando a requisição falha. + * + * Cenário testado: + * - O método 'get' lança uma exceção simulada. + * - O método listarRepositoriosDeEstruturas deve capturar a exceção e + * relançar uma InfraException com a mensagem apropriada. + * + * Asserções: + * - Uma exceção do tipo InfraException deve ser lançada. + * - A mensagem da exceção deve ser "Falha na obtenção dos Repositórios de Estruturas Organizacionais". + * + * @return void + */ + public function testListarRepositoriosDeEstruturasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + $this->mockService->listarRepositoriosDeEstruturas(); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php new file mode 100644 index 000000000..45a8d2edb --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php @@ -0,0 +1,120 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa a listagem de estruturas com sucesso. + * + * Este teste verifica se o método listarEstruturas retorna corretamente + * as estruturas esperadas quando os dados são fornecidos corretamente. + */ + public function testListarEstruturasComSucesso() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Teste'; + $mockRetornoConsulta = [ + 'totalDeRegistros' => 1, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 123, + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [ + ['sigla' => 'H1'], + ['sigla' => 'H2'], + ], + ], + ], + ]; + + // Define a expectativa para o mock do método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willReturn($mockRetornoConsulta); + + // Executa o método sob teste + $result = $this->mockService->listarEstruturas($idRepositorioEstrutura, $nome); + + // Validações dos resultados + $this->assertCount(1, $result); + $this->assertInstanceOf(EstruturaDTO::class, $result[0]); + $this->assertEquals(123, $result[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $result[0]->getStrNome()); + $this->assertEquals('E1', $result[0]->getStrSigla()); + $this->assertEquals(['H1', 'H2'], $result[0]->getArrHierarquia()); + } + + /** + * Testa a listagem de estruturas com repositório inválido. + * + * Este teste verifica se uma exceção é lançada quando o ID do repositório + * de estruturas é inválido (null). + */ + public function testListarEstruturasComRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } + + /** + * Testa a listagem de estruturas com erro na consulta. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre + * um erro durante a consulta de estruturas. + */ + public function testListarEstruturasComErroNaConsulta() + { + $idRepositorioEstrutura = 1; + + // Configura o mock para lançar uma exceção no método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro na consulta')); + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php new file mode 100644 index 000000000..1fb0da91f --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php @@ -0,0 +1,103 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o recebimento de recibo de trâmite com sucesso. + * + * Simula a execução do método `get` e o retorno de um objeto + * convertido a partir de um array, verificando se o resultado + * final corresponde ao esperado. + * + * @return void + */ + public function testReceberReciboDeTramiteComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'recibo' => [ + 'hashesDosComponentesDigitais' => ['hash123'], + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($resultadoMock); + + // Substituir o método estático converterArrayParaObjeto + $resultadoObjetoMock = (object)[ + 'recibo' => (object)[ + 'hashDoComponenteDigital' => 'hash123', + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($resultadoObjetoMock); + + // Chamada do método + $resultado = $this->mockService->receberReciboDeTramite(123); + + // Asserções + $this->assertIsObject($resultado); + $this->assertEquals('hash123', $resultado->recibo->hashDoComponenteDigital); + $this->assertEquals('valor', $resultado->recibo->outroDado); + } + + /** + * Testa o cenário em que ocorre um erro ao receber o recibo de trâmite. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é + * lançada pelo método testado. + * + * @return void + */ + public function testReceberReciboDeTramiteComErro() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Verifica se a exceção esperada é lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no recebimento de recibo de trâmite.'); + + $this->mockService->receberReciboDeTramite(123); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php new file mode 100644 index 000000000..6c915341b --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php @@ -0,0 +1,117 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o método solicitarMetadados para um caso de sucesso. + * + * Este teste verifica se o método retorna um objeto stdClass corretamente + * configurado quando os dados retornados pelo método get são válidos. + * + * @return void + */ + public function testSolicitarMetadadosRetornaObjetoCorreto() + { + $parNumIdentificacaoTramite = 123; + + // Simular a resposta do método get + $mockResponse = [ + 'propriedadesAdicionais' => ['algum_valor'], + 'processo' => [ + 'documentos' => [ + [ + 'componentesDigitais' => [ + [ + 'assinaturasDigitais' => [ + ['alguma_assinatura'] + ] + ] + ] + ] + ] + ] + ]; + + $mockConvertedObject = (object) [ + 'NRE' => '123456', + 'processo' => (object) [ + 'documentos' => [(object) ['algum_valor']], + 'interessados' => [(object) ['algum_interessado']] + ] + ]; + + // Configura o mock para o método get + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Configura o mock para o método converterArrayParaObjeto + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($mockConvertedObject); + + // Chama o método a ser testado + $resultado = $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + + // Verifica o retorno + $this->assertInstanceOf(stdClass::class, $resultado); + $this->assertEquals($parNumIdentificacaoTramite, $resultado->IDT); + $this->assertEquals('123456', $resultado->metadados->NRE); + } + + /** + * Testa o método solicitarMetadados para um caso de falha. + * + * Este teste verifica se uma exceção InfraException é lançada corretamente + * quando o método get falha ao buscar os dados necessários. + * + * @return void + */ + public function testSolicitarMetadadosLancaExcecao() + { + $parNumIdentificacaoTramite = 123; + + // Configura o mock para o método get para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na solicitação de metadados do processo'); + + // Chama o método e espera uma exceção + $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRNTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRNTest.php deleted file mode 100755 index dedc8dbe7..000000000 --- a/tests_sei4/unitario/rn/ProcessoEletronicoRNTest.php +++ /dev/null @@ -1,96 +0,0 @@ -objProcessoEletronicoRN = new ProcessoEletronicoRN(); - } - - /** - * Testes do método privado reduzirCampoTexto - * - * @return void - */ - public function testReduzirCampoTexto() - { - $numTamanhoMaximo = 53; - // Teste considerando uma palavra pequena ao final do texto - $strTexto = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii"; - $strResultadoEsperado = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas uma palavra - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com uma palavra grande ao final - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando texto longo e palavro curta ao finals - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto curto abaixo do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa a"; - $strResultadoEsperado = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - // Teste considerando um texto nulo - $strTexto = null; - $strResultadoEsperado = null; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com ultima palavra menor que a reticencias - $strTexto = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniamr quis"; - $strResultadoEsperado = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniam ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - } - - public function testCompararVersoes(){ - $this->assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); - $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); - $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); - } -} diff --git a/tests_sei41/funcional/phpunit.xml b/tests_sei41/funcional/phpunit.xml index 20f52b05f..2dd86c6fc 100755 --- a/tests_sei41/funcional/phpunit.xml +++ b/tests_sei41/funcional/phpunit.xml @@ -15,7 +15,7 @@ + value="https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/" /> diff --git a/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php b/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php index ba6aafd51..b9138d7cc 100755 --- a/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php +++ b/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php @@ -58,7 +58,9 @@ public function test_tramitar_processo_da_origem() }else{ $id_tramite=$id_tramite[0]["ID_TRAMITE"]; } - $this->recusarTramite($this->servicoPEN, $id_tramite); + + sleep(5); + $this->recusarTramite($id_tramite); } /** @@ -90,39 +92,58 @@ public function test_verificar_destino_processo_para_devolucao() } - private function recusarTramite($servicoPEN, $id_tramite) + private function recusarTramite($id_tramite) { $justificativa = "An exception occurred while executing 'INSERT INTO juntadas (numeracao_sequencial, movimento, ativo, vinculada, criado_em, atualizado_em, id, uuid, documentos_juntado_id, volumes_id, atividades_id, tarefas_id, comunicacoes_id, origem_dados_id, criado_por, atualizado_por) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [1, 'DOCUMENTO RECEBIDO VIA INTEGRA\u00c7\u00c3O COM O BARRAMENTO', 1, 0, '2021-12-02 14:21:48', '2021-12-02 14:21:48', 1317074776, '06ba31e8-75ad-4111-82dc-6f451f51825e', 1333864526, null, null, null, null, 3534979787, null, null]: ORA-00001: restrição exclusiva (SAPIENS.UNIQ_867686DHDKJ97876) violada"; $parametros = new stdClass(); $parametros->recusaDeTramite = new stdClass(); $parametros->recusaDeTramite->IDT = $id_tramite; - $parametros->recusaDeTramite->justificativa = mb_convert_encoding($justificativa, 'UTF-8', 'ISO-8859-1'); + $parametros->recusaDeTramite->justificativa = utf8_encode($justificativa); $parametros->recusaDeTramite->motivo = "99"; - return $servicoPEN->recusarTramite($parametros); + + return $this->recusarTramiteAPI($parametros); + } + + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + // TODO: lembrar de pegar url dinamicamente quando SOAP for removido + $strBaseUri = PEN_ENDERECO_WEBSERVICE; + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + public function recusarTramiteAPI($parametros) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $idt = $parametros->recusaDeTramite->IDT; + $justificativa = $parametros->recusaDeTramite->justificativa; + $motivo = $parametros->recusaDeTramite->motivo; + + $endpoint = "tramites/{$idt}/recusa"; + + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $parametros = [ + 'justificativa' => mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000), 'UTF-8', 'ISO-8859-1'), + 'motivo' => $motivo + ]; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + return $response; } } diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php b/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php index 99d2c2473..37b1ee11b 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php @@ -16,6 +16,7 @@ class TramiteRecebimentoDocumentoAvulsoTest extends FixtureCenarioBaseTestCase const CONTEUDO_DOCUMENTO_C = "arquivo_pequeno_C.pdf"; protected $servicoPEN; + protected $servicoPEN2; public static $remetente; public static $destinatario; public static $processoTeste; @@ -39,12 +40,7 @@ public function setUp(): void // Carregar contexto de testes e dados sobre certificado digital self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - putenv("DATABASE_HOST=org2-database"); - - // Instanciar objeto de teste utilizando o BeSimpleSoap - $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; - $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; - $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + } /** @@ -52,16 +48,21 @@ public function setUp(): void * * @return void */ - public function test_recebimento_documento_avulso() + public function test_recebimento_metadados_documento_avulso() { + + $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; + $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; + + $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + // Simular um trâmite chamando a API do Barramento diretamente self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente, array(self::CONTEUDO_DOCUMENTO_A)); $metadadosDocumentoTeste = $this->construirMetadadosDocumentoTeste(self::$documentoTeste1); - $novoTramite = $this->enviarMetadadosDocumento($this->servicoPEN, self::$remetente, self::$destinatario, $metadadosDocumentoTeste); - $this->enviarComponentesDigitaisDoTramite($this->servicoPEN, $novoTramite, $metadadosDocumentoTeste); - $reciboTramite = $this->receberReciboEnvio($this->servicoPEN, $novoTramite); - + $novoTramite = $this->enviarMetadadosDocumento(self::$remetente, self::$destinatario, $metadadosDocumentoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $metadadosDocumentoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); @@ -75,7 +76,6 @@ public function test_recebimento_documento_avulso() * @group envio * @large * - * @depends test_recebimento_documento_avulso * * @return void */ @@ -149,76 +149,51 @@ public function test_verificar_recebimento_processo_destino_documento_avulso() $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, $documentos, self::$destinatario); } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->tramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } - private function enviarMetadadosDocumento($servicoPEN, $remetente, $destinatario, $documentoTeste) + private function receberReciboEnvio($novoTramite) { - $parametros = new stdClass(); - $parametros->novoTramiteDeDocumento = new stdClass(); - $parametros->novoTramiteDeDocumento->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeDocumento->documento = $documentoTeste; - return $servicoPEN->enviarDocumento($parametros); + $dadosTramite = $novoTramite['tramites']; + $idt = $dadosTramite[0]['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $documentoTeste) + private function enviarMetadadosDocumento($remetente, $destinatario, $documentoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $documentoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); - } + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['documento'] = $documentoTeste['documentoEnvio']; + + return $this->enviarDocumentoAPI($parametros); } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function enviarComponentesDigitaisDoTramite($novoTramite, $documentoTeste) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $parametros = []; + $dadosDoComponenteDigital['protocolo'] = $documentoTeste['documentoEnvio']['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $documentoTeste['componenteEnvio']['hashDocumento']; + $dadosDoComponenteDigital['conteudoDoComponenteDigital'] = $documentoTeste['componenteEnvio']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + + $this->enviarComponenteDigitalAPI($parametros); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatarios' => [ + [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + ] + ]; + return $cabecalho; } @@ -247,42 +222,145 @@ private function construirMetadadosDocumentoTeste($documentoTeste) $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + "mimeType" => "application/pdf", 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordem + 1, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); } finally { fclose($fp); } } - return array( - 'protocolo' => '13990.000181/2020-00', + $documentoEnvio = array( + 'protocolo' => '13990.000185/2024-00', 'nivelDeSigilo' => 1, 'descricao' => $documentoTeste['DESCRICAO'], 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', - 'produtor' => array( - 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + "nome" => "Nome ABC", + "tipo" => "orgaopublico" ), - 'especie' => array( 'codigo' => 42, - 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') + 'nomeNoProdutor' => 'Despacho', ), - - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo + ); + + return array( + 'documentoEnvio' => $documentoEnvio, + 'componenteEnvio' => $componenteEnvio ); } + + public function enviarDocumentoAPI($parametros) + { + try { + $endpoint = "tramites/documento"; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de documento avulso"; + } + } + + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + $conteudo = $arrParametros['conteudoDoComponenteDigital']; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = $this->servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = $this->servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } + } + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; + } } diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php b/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php index 8a86292cc..b612f426f 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php @@ -19,6 +19,8 @@ class TramiteRecebimentoInteressadosDuplicadosTest extends FixtureCenarioBaseTes public static $servicoPEN; public static $documentoTeste1; + public static $conteudoCompoonenteDigital; + /** * Teste de envio de metadados do processo contendo interessados duplicados * @@ -50,9 +52,9 @@ public function test_envio_processo_com_documento_anexado() // Inicia o envio do processo $arrDocumentosPrimeiroEnvio = array(self::$documentoTeste1); $processoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, $arrDocumentosPrimeiroEnvio); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, self::$remetente, self::$destinatario, $processoTeste); - $this->enviarComponentesDigitaisDoTramite(self::$servicoPEN, $novoTramite, $processoTeste); - $reciboTramite = $this->receberReciboEnvio(self::$servicoPEN, $novoTramite); + $novoTramite = $this->enviarMetadadosProcesso(self::$remetente, self::$destinatario, $processoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verifica recebimento de novo processo administrativo contendo documento avulso enviado @@ -65,88 +67,71 @@ public function test_envio_processo_com_documento_anexado() } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; + + return $this->enviarProcessoAPI($parametros); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } - } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); } - private function receberReciboTramite($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + return $cabecalho; } @@ -171,7 +156,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } $arrInteressados = array_map(function($item) { @@ -188,9 +174,10 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => $arrInteressados, - 'documento' => $metadadosDocumentos, + 'interessados' => $arrInteressados, + 'documentos' => $metadadosDocumentos, ); } @@ -209,16 +196,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital = [$hashDocumento => $conteudo]; } finally { fclose($fp); } @@ -231,10 +219,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -242,17 +229,102 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + } + } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } } } diff --git a/tests_sei41/unitario/bootstrap.php b/tests_sei41/unitario/bootstrap.php index 69fdb7ba6..383369434 100755 --- a/tests_sei41/unitario/bootstrap.php +++ b/tests_sei41/unitario/bootstrap.php @@ -1,9 +1,5 @@ + + + /opt/sei/web/modulos/pen/vendor + /opt/sei/web/modulos/pen/config + + + /opt/sei/web/modulos/pen + + diff --git a/tests_sei41/unitario/rn/CompararVersoesTest.php b/tests_sei41/unitario/rn/CompararVersoesTest.php new file mode 100644 index 000000000..949f944c3 --- /dev/null +++ b/tests_sei41/unitario/rn/CompararVersoesTest.php @@ -0,0 +1,17 @@ +assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); + $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); + $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php new file mode 100644 index 000000000..715e414cb --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php @@ -0,0 +1,140 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'buscarEstruturaRest']) + ->getMock(); + } + + /** + * Testa o comportamento do método buscarEstrutura em caso de sucesso. + * + * Simula uma resposta válida para o método `buscarEstruturaRest` e verifica + * se o retorno do método testado é uma instância válida da classe EstruturaDTO. + * + * @return void + */ + public function testBuscarEstruturaSucesso() + { + // Mock do retorno esperado da API + $estruturaMock = [ + 'numeroDeIdentificacaoDaEstrutura' => '12345', + 'nome' => 'Estrutura Teste', + 'sigla' => 'ET', + 'ativo' => true, + 'aptoParaReceber' => true, + 'codigoNoOrgaoEntidade' => 'CNOE123', + 'hierarquia' => [ + ['sigla' => 'Nivel1'], + ['sigla' => 'Nivel2'] + ] + ]; + + // Mock do método buscarEstruturaRest + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn($estruturaMock); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + /** + * Testa o comportamento do método buscarEstrutura com um repositório inválido. + * + * Verifica se o método lança a exceção correta ao receber um ID de repositório inválido. + * + * @return void + */ + public function testBuscarEstruturaComRepositorioInvalido() + { + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->buscarEstrutura(0); // Passando um ID inválido + } + + /** + * Testa o comportamento do método buscarEstrutura quando a estrutura não é encontrada. + * + * Simula o retorno `null` do método `buscarEstruturaRest` e verifica se o + * método principal retorna `null` como esperado. + * + * @return void + */ + public function testBuscarEstruturaNaoEncontrada() + { + // Mock para retorno nulo da API + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn(null); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + // Asserção de retorno nulo + $this->assertNull($resultado); + } + + /** + * Testa o comportamento do método buscarEstrutura quando ocorre uma exceção. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é lançada + * pelo método testado. + * + * @return void + */ + public function testBuscarEstruturaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception()); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..6d72134e3 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,136 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'tentarNovamenteSobErroHTTP']) + ->getMock(); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` com parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna o número correto de estruturas. + * - As estruturas têm os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiComIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = [ + (object) ['id' => 1, 'nome' => 'Estrutura 1'], + (object) ['id' => 2, 'nome' => 'Estrutura 2'] + ]; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + $numeroDeIdentificacaoDaEstrutura = 'ABC123'; + + $resultado = $metodoPrivado->invokeArgs( + $this->mockService, + [$idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura] + ); + + // Validações + $this->assertIsArray($resultado, 'Deve retornar um array'); + $this->assertCount(2, $resultado, 'Deve retornar duas estruturas'); + $this->assertEquals('Estrutura 1', $resultado[0]->nome, 'Deve retornar a estrutura 1'); + $this->assertEquals('Estrutura 2', $resultado[1]->nome, 'Deve retornar a estrutura 2'); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` sem parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna uma estrutura única com os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiSemIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = (object) ['id' => 1, 'nome' => 'Estrutura Única']; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + + $resultado = $metodoPrivado->invokeArgs($this->mockService, [$idRepositorioEstrutura]); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(1, $resultado); + $this->assertEquals('Estrutura Única', $resultado[0]->nome); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php new file mode 100644 index 000000000..4c85d7dfd --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php @@ -0,0 +1,87 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['delete']) + ->getMock(); + } + + /** + * Teste do método cancelarTramite em caso de sucesso. + * + * Este teste simula a execução do método cancelarTramite quando o método 'delete' do mock + * retorna uma resposta bem-sucedida (null). O teste verifica se o retorno do método é + * o esperado (null), indicando que o trâmite foi cancelado com sucesso. + * + * @return void + */ + public function testCancelarTramiteSucesso() + { + $mockResponse = null; + + // Configura o mock para retornar a resposta esperada (null) + $this->mockService->expects($this->once()) + ->method('delete') + ->willReturn($mockResponse); + + // Executa o método cancelarTramite + $resultado = $this->mockService->cancelarTramite(999); + + // Verifica se o retorno é nulo (indicando sucesso no cancelamento) + $this->assertNull($mockResponse, "O objeto é nulo"); + } + + /** + * Teste do método cancelarTramite quando ocorre uma exceção. + * + * Este teste simula a falha no método cancelarTramite, quando o método 'delete' do mock + * lança uma exceção. O teste verifica se a exceção esperada (InfraException) é lançada e + * se a mensagem associada à exceção está correta. + * + * @return void + * @throws \InfraException Quando ocorre uma falha no cancelamento do trâmite + */ + public function testCancelarTramiteLancaExcecao() + { + // Configura o mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('delete') + ->willThrowException(new Exception('Erro na requisição')); + + // Espera que a exceção InfraException seja lançada com a mensagem esperada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no cancelamento de trâmite de processo'); + + // Executa o método cancelarTramite e verifica se a exceção é lançada + $this->mockService->cancelarTramite(999); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php new file mode 100644 index 000000000..f436fbd3f --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php @@ -0,0 +1,96 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `cienciaRecusa` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as chaves `status` e `mensagem`. + * - Contém os valores esperados no retorno. + */ + public function testCienciaRecusaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'status' => 'sucesso', + 'mensagem' => 'Ciência registrada com sucesso.' + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('tramites/123/ciencia', ['IDT' => 123]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->cienciaRecusa(123); + + // Validações + $this->assertIsArray($resultado); + $this->assertArrayHasKey('status', $resultado); + $this->assertEquals('sucesso', $resultado['status']); + $this->assertEquals('Ciência registrada com sucesso.', $resultado['mensagem']); + } + + /** + * Testa o método `cienciaRecusa` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testCienciaRecusaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no registro de ciência da recusa de trâmite'); + + // Chamada do método (deve lançar exceção) + $this->mockService->cienciaRecusa(123); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php new file mode 100644 index 000000000..2b22a1acc --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php @@ -0,0 +1,131 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarEspeciesDocumentais` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as espécies documentais. + * - Converte corretamente as strings para o formato esperado (`ISO-8859-1`). + */ + public function testConsultarEspeciesDocumentaisComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [ + ['nomeNoProdutor' => 'Espécie 1'], + ['nomeNoProdutor' => 'Espécie 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals( + mb_convert_encoding('Espécie 1', 'ISO-8859-1', 'UTF-8'), + $resultado[0] + ); + $this->assertEquals( + mb_convert_encoding('Espécie 2', 'ISO-8859-1', 'UTF-8'), + $resultado[1] + ); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarEspeciesDocumentaisSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarEspeciesDocumentaisComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Não foi encontrado nenhuma espécie documental.'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarEspeciesDocumentais(); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php new file mode 100644 index 000000000..2152b5bb9 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php @@ -0,0 +1,108 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, false); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaBolRetornoRawTrueSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, true); + + $this->assertInstanceOf(stdClass::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..519b47b0f --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,122 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'validarRestricaoUnidadesCadastradas', 'buscarEstruturasPorEstruturaPai']) + ->getMock(); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para um caso de sucesso. + * + * Verifica se a lista de estruturas é retornada e ordenada corretamente com base nos nomes. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiRetornaEstruturasOrdenadas() + { + $idRepositorioEstrutura = 1; + $mockEstruturas = [ + (object)['nome' => 'Unidade B', 'codigo' => '002'], + (object)['nome' => 'Unidade A', 'codigo' => '001'], + (object)['nome' => 'Unidade C', 'codigo' => '003'], + ]; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->with($idRepositorioEstrutura) + ->willReturn(null); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, null) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + + $this->assertCount(3, $resultado); + $this->assertEquals('Unidade A', $resultado[0]->nome); + $this->assertEquals('Unidade B', $resultado[1]->nome); + $this->assertEquals('Unidade C', $resultado[2]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para uma unidade pai específica. + * + * Verifica se a busca por estrutura pai é realizada corretamente ao fornecer + * um número de identificação específico. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiComUnidadePaiEspecifica() + { + $idRepositorioEstrutura = 1; + $numeroDeIdentificacaoDaEstrutura = '001'; + $mockEstruturas = [ + (object)['nome' => 'Unidade D', 'codigo' => '004'], + ]; + + $this->mockService->expects($this->never()) + ->method('validarRestricaoUnidadesCadastradas'); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura); + + $this->assertCount(1, $resultado); + $this->assertEquals('Unidade D', $resultado[0]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai quando ocorre um erro. + * + * Verifica se uma exceção InfraException é lançada corretamente ao ocorrer + * um erro no método validarRestricaoUnidadesCadastradas. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->willThrowException(new Exception('Erro no serviço')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php new file mode 100644 index 000000000..7acd9b36d --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php @@ -0,0 +1,82 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "estruturas" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ] + ], + "totalDeRegistros" => 1 + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstruturas(159098, []); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturas(159098, []); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php new file mode 100644 index 000000000..9c13025b7 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php @@ -0,0 +1,111 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o sucesso da consulta de hipóteses legais. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array de hipoteses + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = [ + 'hipoteseslegais' => [ + ] + ]; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertArrayHasKey('hipoteseslegais', $resultado); + } + + /** + * Testa o sucesso da consulta de hipóteses legais com retorno vazio. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array vazio + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisRetornoVazioSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = []; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertEquals(0, count($resultado)); + } + + /** + * Testa o lançamento de exceção ao tentar consultar as hipóteses legais. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre um erro + * ao tentar realizar a consulta (simulando a exceção gerada pelo método 'get'). + * + * @return void + * @throws InfraException Se a exceção de infra-estrutura for gerada. + */ + public function testConsultarHipotesesLegaisLancaExcecao() + { + // Configura o mock para lançar uma exceção quando o método 'get' for chamado + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + // Define a expectativa de que a exceção InfraException será lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de hipóteses legais'); + + // Chama o método que deve lançar a exceção + $this->mockService->consultarHipotesesLegais(true); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php new file mode 100644 index 000000000..ed8532f0b --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php @@ -0,0 +1,126 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'get']) + ->getMock(); + } + + /** + * Testa o método `consultarMotivosUrgencia` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array. + * - Contém os motivos de urgência esperados. + */ + public function testConsultarMotivosUrgenciaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [ + ['descricao' => 'Motivo 1'], + ['descricao' => 'Motivo 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals('Motivo 1', $resultado[0]); + $this->assertEquals('Motivo 2', $resultado[1]); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarMotivosUrgenciaSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarMotivosUrgenciaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarMotivosUrgencia(); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php new file mode 100644 index 000000000..34788d48b --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php @@ -0,0 +1,125 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna uma instância de `RepositorioDTO`. + * - Preenche os atributos da instância com os valores corretos. + */ + public function testConsultarRepositoriosDeEstruturasComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + [ + 'id' => 5, + 'nome' => 'Repositório 1', + 'ativo' => true + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(5); + + // Validações + $this->assertInstanceOf(RepositorioDTO::class, $resultado); + $this->assertEquals(5, $resultado->getNumId()); + $this->assertEquals( + mb_convert_encoding('Repositório 1', 'ISO-8859-1', 'UTF-8'), + $resultado->getStrNome() + ); + $this->assertTrue($resultado->getBolAtivo()); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando não há resultados. + * + * Verifica se o método: + * - Retorna `null` quando não há repositórios disponíveis. + */ + public function testConsultarRepositoriosDeEstruturasSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = []; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(123); + + // Validações + $this->assertNull($resultado); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarRepositoriosDeEstruturasComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarRepositoriosDeEstruturas(123); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php new file mode 100644 index 000000000..be505824f --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php @@ -0,0 +1,130 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasAutoCompletar com parâmetros válidos. + * + * Verifica se o retorno do método é formatado corretamente, incluindo: + * - Propriedades convertidas para UTF-8. + * - Hierarquia de siglas mapeada. + * - Quantidade correta de itens no resultado. + */ + public function testListarEstruturasAutoCompletarRetornaEstruturasFormatadas() + { + // Simulação de parâmetros e retorno esperado + $idRepositorioEstrutura = 1; + $nome = 'Teste Unidade'; + $mockResultado = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 101, + 'nome' => 'Unidade A', + 'sigla' => 'UA', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '123', + 'hierarquia' => [ + ['sigla' => 'ORG'] + ] + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => 102, + 'nome' => 'Unidade B', + 'sigla' => 'UB', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '456', + 'hierarquia' => [] + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->callback(function ($parametros) use ($nome) { + return $parametros['nome'] === $nome && $parametros['apenasAtivas'] === true; + })) + ->willReturn($mockResultado); + + $resultado = $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura, $nome); + + // Asserções sobre o retorno + $this->assertIsArray($resultado); + $this->assertArrayHasKey('diferencaDeRegistros', $resultado); + $this->assertArrayHasKey('itens', $resultado); + $this->assertCount(2, $resultado['itens']); + } + + /** + * Testa o método listarEstruturasAutoCompletar quando ocorre um erro. + * + * Simula um erro no método consultarEstruturas e verifica se uma exceção + * InfraException é lançada corretamente com a mensagem esperada. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro interno')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasAutoCompletar com repositório inválido. + * + * Verifica se uma exceção InfraException é lançada quando o ID do + * repositório de estruturas fornecido é inválido. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php new file mode 100644 index 000000000..a23711182 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php @@ -0,0 +1,124 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um caso de sucesso. + * + * Simula uma resposta válida do método 'consultarEstruturas' e verifica + * se o retorno é uma lista de objetos EstruturaDTO com os dados corretos. + * + * @return void + */ + public function testListarEstruturasBuscaTextualRetornaEstruturas() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Raiz'; + $mockResponse = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => '123', + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [['sigla' => 'H1'], ['sigla' => 'H2']], + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => '456', + 'nome' => 'Estrutura 2', + 'sigla' => 'E2', + 'ativo' => false, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '002', + 'hierarquia' => [['sigla' => 'H3']], + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->arrayHasKey('identificacaoDoRepositorioDeEstruturas')) + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura, $nome); + + $this->assertCount(2, $resultado); + $this->assertInstanceOf(EstruturaDTO::class, $resultado[0]); + $this->assertEquals('123', $resultado[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $resultado[0]->getStrNome()); + $this->assertEquals(['H1', 'H2'], $resultado[0]->getArrHierarquia()); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um repositório inválido. + * + * Verifica se uma exceção InfraException é lançada ao fornecer um ID de repositório inválido. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasBuscaTextual para falhas no web service. + * + * Simula um erro no método 'consultarEstruturas' e verifica se a exceção + * InfraException é lançada com a mensagem correta. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaErroWebService() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php new file mode 100644 index 000000000..f8d69ea83 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php @@ -0,0 +1,67 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testListarPendenciasSucesso() + { + $mockResponse = [ + [ + 'status' => 2, + 'IDT' => 999 + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarPendencias(true); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(PendenciaDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + public function testListarPendenciasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na listagem de pendências de trâmite de processos'); + + $this->mockService->listarPendencias(true); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php new file mode 100644 index 000000000..dbd027c18 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php @@ -0,0 +1,97 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele + * retorna uma lista de repositórios de estruturas com sucesso. + * + * Cenário testado: + * - O método 'get' retorna uma lista simulada de repositórios. + * - O retorno do método deve ser um array contendo objetos do tipo RepositorioDTO. + * + * Asserções: + * - O retorno deve ser um array. + * - A quantidade de itens no retorno deve ser igual à quantidade simulada. + * - O primeiro item do retorno deve ser uma instância de RepositorioDTO. + * + * @return void + */ + public function testListarRepositoriosDeEstruturasRetornaListaSucesso() + { + $mockResponse = [ + ["id" => 49, "nome" => "Acre - AC", "ativo" => true], + ["id" => 2, "nome" => "Advocacia-Geral da União", "ativo" => true], + ["id" => 7, "nome" => "Alagoas( Estado)", "ativo" => true], + ["id" => 20, "nome" => "Banco Central do Brasil 2", "ativo" => true], + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarRepositoriosDeEstruturas(); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(RepositorioDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele lança + * uma exceção quando a requisição falha. + * + * Cenário testado: + * - O método 'get' lança uma exceção simulada. + * - O método listarRepositoriosDeEstruturas deve capturar a exceção e + * relançar uma InfraException com a mensagem apropriada. + * + * Asserções: + * - Uma exceção do tipo InfraException deve ser lançada. + * - A mensagem da exceção deve ser "Falha na obtenção dos Repositórios de Estruturas Organizacionais". + * + * @return void + */ + public function testListarRepositoriosDeEstruturasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + $this->mockService->listarRepositoriosDeEstruturas(); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php new file mode 100644 index 000000000..45a8d2edb --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php @@ -0,0 +1,120 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa a listagem de estruturas com sucesso. + * + * Este teste verifica se o método listarEstruturas retorna corretamente + * as estruturas esperadas quando os dados são fornecidos corretamente. + */ + public function testListarEstruturasComSucesso() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Teste'; + $mockRetornoConsulta = [ + 'totalDeRegistros' => 1, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 123, + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [ + ['sigla' => 'H1'], + ['sigla' => 'H2'], + ], + ], + ], + ]; + + // Define a expectativa para o mock do método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willReturn($mockRetornoConsulta); + + // Executa o método sob teste + $result = $this->mockService->listarEstruturas($idRepositorioEstrutura, $nome); + + // Validações dos resultados + $this->assertCount(1, $result); + $this->assertInstanceOf(EstruturaDTO::class, $result[0]); + $this->assertEquals(123, $result[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $result[0]->getStrNome()); + $this->assertEquals('E1', $result[0]->getStrSigla()); + $this->assertEquals(['H1', 'H2'], $result[0]->getArrHierarquia()); + } + + /** + * Testa a listagem de estruturas com repositório inválido. + * + * Este teste verifica se uma exceção é lançada quando o ID do repositório + * de estruturas é inválido (null). + */ + public function testListarEstruturasComRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } + + /** + * Testa a listagem de estruturas com erro na consulta. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre + * um erro durante a consulta de estruturas. + */ + public function testListarEstruturasComErroNaConsulta() + { + $idRepositorioEstrutura = 1; + + // Configura o mock para lançar uma exceção no método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro na consulta')); + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php new file mode 100644 index 000000000..1fb0da91f --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php @@ -0,0 +1,103 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o recebimento de recibo de trâmite com sucesso. + * + * Simula a execução do método `get` e o retorno de um objeto + * convertido a partir de um array, verificando se o resultado + * final corresponde ao esperado. + * + * @return void + */ + public function testReceberReciboDeTramiteComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'recibo' => [ + 'hashesDosComponentesDigitais' => ['hash123'], + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($resultadoMock); + + // Substituir o método estático converterArrayParaObjeto + $resultadoObjetoMock = (object)[ + 'recibo' => (object)[ + 'hashDoComponenteDigital' => 'hash123', + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($resultadoObjetoMock); + + // Chamada do método + $resultado = $this->mockService->receberReciboDeTramite(123); + + // Asserções + $this->assertIsObject($resultado); + $this->assertEquals('hash123', $resultado->recibo->hashDoComponenteDigital); + $this->assertEquals('valor', $resultado->recibo->outroDado); + } + + /** + * Testa o cenário em que ocorre um erro ao receber o recibo de trâmite. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é + * lançada pelo método testado. + * + * @return void + */ + public function testReceberReciboDeTramiteComErro() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Verifica se a exceção esperada é lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no recebimento de recibo de trâmite.'); + + $this->mockService->receberReciboDeTramite(123); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php new file mode 100644 index 000000000..6c915341b --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php @@ -0,0 +1,117 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o método solicitarMetadados para um caso de sucesso. + * + * Este teste verifica se o método retorna um objeto stdClass corretamente + * configurado quando os dados retornados pelo método get são válidos. + * + * @return void + */ + public function testSolicitarMetadadosRetornaObjetoCorreto() + { + $parNumIdentificacaoTramite = 123; + + // Simular a resposta do método get + $mockResponse = [ + 'propriedadesAdicionais' => ['algum_valor'], + 'processo' => [ + 'documentos' => [ + [ + 'componentesDigitais' => [ + [ + 'assinaturasDigitais' => [ + ['alguma_assinatura'] + ] + ] + ] + ] + ] + ] + ]; + + $mockConvertedObject = (object) [ + 'NRE' => '123456', + 'processo' => (object) [ + 'documentos' => [(object) ['algum_valor']], + 'interessados' => [(object) ['algum_interessado']] + ] + ]; + + // Configura o mock para o método get + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Configura o mock para o método converterArrayParaObjeto + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($mockConvertedObject); + + // Chama o método a ser testado + $resultado = $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + + // Verifica o retorno + $this->assertInstanceOf(stdClass::class, $resultado); + $this->assertEquals($parNumIdentificacaoTramite, $resultado->IDT); + $this->assertEquals('123456', $resultado->metadados->NRE); + } + + /** + * Testa o método solicitarMetadados para um caso de falha. + * + * Este teste verifica se uma exceção InfraException é lançada corretamente + * quando o método get falha ao buscar os dados necessários. + * + * @return void + */ + public function testSolicitarMetadadosLancaExcecao() + { + $parNumIdentificacaoTramite = 123; + + // Configura o mock para o método get para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na solicitação de metadados do processo'); + + // Chama o método e espera uma exceção + $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRNTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRNTest.php deleted file mode 100755 index dedc8dbe7..000000000 --- a/tests_sei41/unitario/rn/ProcessoEletronicoRNTest.php +++ /dev/null @@ -1,96 +0,0 @@ -objProcessoEletronicoRN = new ProcessoEletronicoRN(); - } - - /** - * Testes do método privado reduzirCampoTexto - * - * @return void - */ - public function testReduzirCampoTexto() - { - $numTamanhoMaximo = 53; - // Teste considerando uma palavra pequena ao final do texto - $strTexto = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii"; - $strResultadoEsperado = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas uma palavra - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com uma palavra grande ao final - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando texto longo e palavro curta ao finals - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto curto abaixo do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa a"; - $strResultadoEsperado = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - // Teste considerando um texto nulo - $strTexto = null; - $strResultadoEsperado = null; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com ultima palavra menor que a reticencias - $strTexto = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniamr quis"; - $strResultadoEsperado = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniam ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - } - - public function testCompararVersoes(){ - $this->assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); - $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); - $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); - } -} diff --git a/tests_super/funcional/phpunit.xml b/tests_super/funcional/phpunit.xml index 051816555..e97be2af7 100644 --- a/tests_super/funcional/phpunit.xml +++ b/tests_super/funcional/phpunit.xml @@ -1,5 +1,5 @@ - + - + value="https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/" /> + - + @@ -35,17 +35,17 @@ + value="152259" /> + value="ORG1" /> + value="Unidade de Teste Glaydson ORG1" /> + value="153846" /> + value="Glaydson ORG1 Filha" /> @@ -67,7 +67,7 @@ value="Situação Econômico-Financeira de Sujeito Passivo (Art. 198, caput, da Lei nº 5.172/1966 - CTN)" /> - + @@ -77,12 +77,12 @@ + value="152260" /> + value="ORG2" /> + value="Unidade de Teste Glaydson ORG2" /> @@ -107,8 +107,8 @@ - - + + @@ -136,7 +136,7 @@ - + tests diff --git a/tests_super/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php b/tests_super/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php index ba6aafd51..b9138d7cc 100755 --- a/tests_super/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php +++ b/tests_super/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php @@ -58,7 +58,9 @@ public function test_tramitar_processo_da_origem() }else{ $id_tramite=$id_tramite[0]["ID_TRAMITE"]; } - $this->recusarTramite($this->servicoPEN, $id_tramite); + + sleep(5); + $this->recusarTramite($id_tramite); } /** @@ -90,39 +92,58 @@ public function test_verificar_destino_processo_para_devolucao() } - private function recusarTramite($servicoPEN, $id_tramite) + private function recusarTramite($id_tramite) { $justificativa = "An exception occurred while executing 'INSERT INTO juntadas (numeracao_sequencial, movimento, ativo, vinculada, criado_em, atualizado_em, id, uuid, documentos_juntado_id, volumes_id, atividades_id, tarefas_id, comunicacoes_id, origem_dados_id, criado_por, atualizado_por) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [1, 'DOCUMENTO RECEBIDO VIA INTEGRA\u00c7\u00c3O COM O BARRAMENTO', 1, 0, '2021-12-02 14:21:48', '2021-12-02 14:21:48', 1317074776, '06ba31e8-75ad-4111-82dc-6f451f51825e', 1333864526, null, null, null, null, 3534979787, null, null]: ORA-00001: restrição exclusiva (SAPIENS.UNIQ_867686DHDKJ97876) violada"; $parametros = new stdClass(); $parametros->recusaDeTramite = new stdClass(); $parametros->recusaDeTramite->IDT = $id_tramite; - $parametros->recusaDeTramite->justificativa = mb_convert_encoding($justificativa, 'UTF-8', 'ISO-8859-1'); + $parametros->recusaDeTramite->justificativa = utf8_encode($justificativa); $parametros->recusaDeTramite->motivo = "99"; - return $servicoPEN->recusarTramite($parametros); + + return $this->recusarTramiteAPI($parametros); + } + + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + // TODO: lembrar de pegar url dinamicamente quando SOAP for removido + $strBaseUri = PEN_ENDERECO_WEBSERVICE; + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + public function recusarTramiteAPI($parametros) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $idt = $parametros->recusaDeTramite->IDT; + $justificativa = $parametros->recusaDeTramite->justificativa; + $motivo = $parametros->recusaDeTramite->motivo; + + $endpoint = "tramites/{$idt}/recusa"; + + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $parametros = [ + 'justificativa' => mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000), 'UTF-8', 'ISO-8859-1'), + 'motivo' => $motivo + ]; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + return $response; } } diff --git a/tests_super/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php b/tests_super/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php index 99d2c2473..37b1ee11b 100755 --- a/tests_super/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php +++ b/tests_super/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php @@ -16,6 +16,7 @@ class TramiteRecebimentoDocumentoAvulsoTest extends FixtureCenarioBaseTestCase const CONTEUDO_DOCUMENTO_C = "arquivo_pequeno_C.pdf"; protected $servicoPEN; + protected $servicoPEN2; public static $remetente; public static $destinatario; public static $processoTeste; @@ -39,12 +40,7 @@ public function setUp(): void // Carregar contexto de testes e dados sobre certificado digital self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - putenv("DATABASE_HOST=org2-database"); - - // Instanciar objeto de teste utilizando o BeSimpleSoap - $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; - $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; - $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + } /** @@ -52,16 +48,21 @@ public function setUp(): void * * @return void */ - public function test_recebimento_documento_avulso() + public function test_recebimento_metadados_documento_avulso() { + + $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; + $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; + + $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + // Simular um trâmite chamando a API do Barramento diretamente self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente, array(self::CONTEUDO_DOCUMENTO_A)); $metadadosDocumentoTeste = $this->construirMetadadosDocumentoTeste(self::$documentoTeste1); - $novoTramite = $this->enviarMetadadosDocumento($this->servicoPEN, self::$remetente, self::$destinatario, $metadadosDocumentoTeste); - $this->enviarComponentesDigitaisDoTramite($this->servicoPEN, $novoTramite, $metadadosDocumentoTeste); - $reciboTramite = $this->receberReciboEnvio($this->servicoPEN, $novoTramite); - + $novoTramite = $this->enviarMetadadosDocumento(self::$remetente, self::$destinatario, $metadadosDocumentoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $metadadosDocumentoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); @@ -75,7 +76,6 @@ public function test_recebimento_documento_avulso() * @group envio * @large * - * @depends test_recebimento_documento_avulso * * @return void */ @@ -149,76 +149,51 @@ public function test_verificar_recebimento_processo_destino_documento_avulso() $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, $documentos, self::$destinatario); } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->tramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } - private function enviarMetadadosDocumento($servicoPEN, $remetente, $destinatario, $documentoTeste) + private function receberReciboEnvio($novoTramite) { - $parametros = new stdClass(); - $parametros->novoTramiteDeDocumento = new stdClass(); - $parametros->novoTramiteDeDocumento->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeDocumento->documento = $documentoTeste; - return $servicoPEN->enviarDocumento($parametros); + $dadosTramite = $novoTramite['tramites']; + $idt = $dadosTramite[0]['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $documentoTeste) + private function enviarMetadadosDocumento($remetente, $destinatario, $documentoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $documentoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); - } + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['documento'] = $documentoTeste['documentoEnvio']; + + return $this->enviarDocumentoAPI($parametros); } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function enviarComponentesDigitaisDoTramite($novoTramite, $documentoTeste) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $parametros = []; + $dadosDoComponenteDigital['protocolo'] = $documentoTeste['documentoEnvio']['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $documentoTeste['componenteEnvio']['hashDocumento']; + $dadosDoComponenteDigital['conteudoDoComponenteDigital'] = $documentoTeste['componenteEnvio']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + + $this->enviarComponenteDigitalAPI($parametros); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatarios' => [ + [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + ] + ]; + return $cabecalho; } @@ -247,42 +222,145 @@ private function construirMetadadosDocumentoTeste($documentoTeste) $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + "mimeType" => "application/pdf", 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordem + 1, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); } finally { fclose($fp); } } - return array( - 'protocolo' => '13990.000181/2020-00', + $documentoEnvio = array( + 'protocolo' => '13990.000185/2024-00', 'nivelDeSigilo' => 1, 'descricao' => $documentoTeste['DESCRICAO'], 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', - 'produtor' => array( - 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + "nome" => "Nome ABC", + "tipo" => "orgaopublico" ), - 'especie' => array( 'codigo' => 42, - 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') + 'nomeNoProdutor' => 'Despacho', ), - - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo + ); + + return array( + 'documentoEnvio' => $documentoEnvio, + 'componenteEnvio' => $componenteEnvio ); } + + public function enviarDocumentoAPI($parametros) + { + try { + $endpoint = "tramites/documento"; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de documento avulso"; + } + } + + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + $conteudo = $arrParametros['conteudoDoComponenteDigital']; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = $this->servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = $this->servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } + } + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; + } } diff --git a/tests_super/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php b/tests_super/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php index 768308bb9..b612f426f 100755 --- a/tests_super/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php +++ b/tests_super/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php @@ -19,6 +19,8 @@ class TramiteRecebimentoInteressadosDuplicadosTest extends FixtureCenarioBaseTes public static $servicoPEN; public static $documentoTeste1; + public static $conteudoCompoonenteDigital; + /** * Teste de envio de metadados do processo contendo interessados duplicados * @@ -50,9 +52,9 @@ public function test_envio_processo_com_documento_anexado() // Inicia o envio do processo $arrDocumentosPrimeiroEnvio = array(self::$documentoTeste1); $processoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, $arrDocumentosPrimeiroEnvio); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, self::$remetente, self::$destinatario, $processoTeste); - $this->enviarComponentesDigitaisDoTramite(self::$servicoPEN, $novoTramite, $processoTeste); - $reciboTramite = $this->receberReciboEnvio(self::$servicoPEN, $novoTramite); + $novoTramite = $this->enviarMetadadosProcesso(self::$remetente, self::$destinatario, $processoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verifica recebimento de novo processo administrativo contendo documento avulso enviado @@ -65,86 +67,71 @@ public function test_envio_processo_com_documento_anexado() } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; + + return $this->enviarProcessoAPI($parametros); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } - } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); } - private function receberReciboTramite($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + return $cabecalho; } @@ -169,7 +156,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } $arrInteressados = array_map(function($item) { @@ -186,9 +174,10 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => $arrInteressados, - 'documento' => $metadadosDocumentos, + 'interessados' => $arrInteressados, + 'documentos' => $metadadosDocumentos, ); } @@ -207,16 +196,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital = [$hashDocumento => $conteudo]; } finally { fclose($fp); } @@ -229,10 +219,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -240,17 +229,102 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + } + } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } } } diff --git a/tests_super/unitario/bootstrap.php b/tests_super/unitario/bootstrap.php index 69fdb7ba6..383369434 100755 --- a/tests_super/unitario/bootstrap.php +++ b/tests_super/unitario/bootstrap.php @@ -1,9 +1,5 @@ + + + /opt/sei/web/modulos/pen/vendor + /opt/sei/web/modulos/pen/config + + + /opt/sei/web/modulos/pen + + diff --git a/tests_super/unitario/rn/CompararVersoesTest.php b/tests_super/unitario/rn/CompararVersoesTest.php new file mode 100644 index 000000000..949f944c3 --- /dev/null +++ b/tests_super/unitario/rn/CompararVersoesTest.php @@ -0,0 +1,17 @@ +assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); + $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); + $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php new file mode 100644 index 000000000..715e414cb --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php @@ -0,0 +1,140 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'buscarEstruturaRest']) + ->getMock(); + } + + /** + * Testa o comportamento do método buscarEstrutura em caso de sucesso. + * + * Simula uma resposta válida para o método `buscarEstruturaRest` e verifica + * se o retorno do método testado é uma instância válida da classe EstruturaDTO. + * + * @return void + */ + public function testBuscarEstruturaSucesso() + { + // Mock do retorno esperado da API + $estruturaMock = [ + 'numeroDeIdentificacaoDaEstrutura' => '12345', + 'nome' => 'Estrutura Teste', + 'sigla' => 'ET', + 'ativo' => true, + 'aptoParaReceber' => true, + 'codigoNoOrgaoEntidade' => 'CNOE123', + 'hierarquia' => [ + ['sigla' => 'Nivel1'], + ['sigla' => 'Nivel2'] + ] + ]; + + // Mock do método buscarEstruturaRest + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn($estruturaMock); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + /** + * Testa o comportamento do método buscarEstrutura com um repositório inválido. + * + * Verifica se o método lança a exceção correta ao receber um ID de repositório inválido. + * + * @return void + */ + public function testBuscarEstruturaComRepositorioInvalido() + { + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->buscarEstrutura(0); // Passando um ID inválido + } + + /** + * Testa o comportamento do método buscarEstrutura quando a estrutura não é encontrada. + * + * Simula o retorno `null` do método `buscarEstruturaRest` e verifica se o + * método principal retorna `null` como esperado. + * + * @return void + */ + public function testBuscarEstruturaNaoEncontrada() + { + // Mock para retorno nulo da API + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn(null); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + // Asserção de retorno nulo + $this->assertNull($resultado); + } + + /** + * Testa o comportamento do método buscarEstrutura quando ocorre uma exceção. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é lançada + * pelo método testado. + * + * @return void + */ + public function testBuscarEstruturaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception()); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..6d72134e3 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,136 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'tentarNovamenteSobErroHTTP']) + ->getMock(); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` com parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna o número correto de estruturas. + * - As estruturas têm os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiComIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = [ + (object) ['id' => 1, 'nome' => 'Estrutura 1'], + (object) ['id' => 2, 'nome' => 'Estrutura 2'] + ]; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + $numeroDeIdentificacaoDaEstrutura = 'ABC123'; + + $resultado = $metodoPrivado->invokeArgs( + $this->mockService, + [$idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura] + ); + + // Validações + $this->assertIsArray($resultado, 'Deve retornar um array'); + $this->assertCount(2, $resultado, 'Deve retornar duas estruturas'); + $this->assertEquals('Estrutura 1', $resultado[0]->nome, 'Deve retornar a estrutura 1'); + $this->assertEquals('Estrutura 2', $resultado[1]->nome, 'Deve retornar a estrutura 2'); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` sem parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna uma estrutura única com os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiSemIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = (object) ['id' => 1, 'nome' => 'Estrutura Única']; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + + $resultado = $metodoPrivado->invokeArgs($this->mockService, [$idRepositorioEstrutura]); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(1, $resultado); + $this->assertEquals('Estrutura Única', $resultado[0]->nome); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php new file mode 100644 index 000000000..4c85d7dfd --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php @@ -0,0 +1,87 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['delete']) + ->getMock(); + } + + /** + * Teste do método cancelarTramite em caso de sucesso. + * + * Este teste simula a execução do método cancelarTramite quando o método 'delete' do mock + * retorna uma resposta bem-sucedida (null). O teste verifica se o retorno do método é + * o esperado (null), indicando que o trâmite foi cancelado com sucesso. + * + * @return void + */ + public function testCancelarTramiteSucesso() + { + $mockResponse = null; + + // Configura o mock para retornar a resposta esperada (null) + $this->mockService->expects($this->once()) + ->method('delete') + ->willReturn($mockResponse); + + // Executa o método cancelarTramite + $resultado = $this->mockService->cancelarTramite(999); + + // Verifica se o retorno é nulo (indicando sucesso no cancelamento) + $this->assertNull($mockResponse, "O objeto é nulo"); + } + + /** + * Teste do método cancelarTramite quando ocorre uma exceção. + * + * Este teste simula a falha no método cancelarTramite, quando o método 'delete' do mock + * lança uma exceção. O teste verifica se a exceção esperada (InfraException) é lançada e + * se a mensagem associada à exceção está correta. + * + * @return void + * @throws \InfraException Quando ocorre uma falha no cancelamento do trâmite + */ + public function testCancelarTramiteLancaExcecao() + { + // Configura o mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('delete') + ->willThrowException(new Exception('Erro na requisição')); + + // Espera que a exceção InfraException seja lançada com a mensagem esperada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no cancelamento de trâmite de processo'); + + // Executa o método cancelarTramite e verifica se a exceção é lançada + $this->mockService->cancelarTramite(999); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php new file mode 100644 index 000000000..f436fbd3f --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php @@ -0,0 +1,96 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `cienciaRecusa` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as chaves `status` e `mensagem`. + * - Contém os valores esperados no retorno. + */ + public function testCienciaRecusaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'status' => 'sucesso', + 'mensagem' => 'Ciência registrada com sucesso.' + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('tramites/123/ciencia', ['IDT' => 123]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->cienciaRecusa(123); + + // Validações + $this->assertIsArray($resultado); + $this->assertArrayHasKey('status', $resultado); + $this->assertEquals('sucesso', $resultado['status']); + $this->assertEquals('Ciência registrada com sucesso.', $resultado['mensagem']); + } + + /** + * Testa o método `cienciaRecusa` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testCienciaRecusaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no registro de ciência da recusa de trâmite'); + + // Chamada do método (deve lançar exceção) + $this->mockService->cienciaRecusa(123); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php new file mode 100644 index 000000000..2b22a1acc --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php @@ -0,0 +1,131 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarEspeciesDocumentais` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as espécies documentais. + * - Converte corretamente as strings para o formato esperado (`ISO-8859-1`). + */ + public function testConsultarEspeciesDocumentaisComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [ + ['nomeNoProdutor' => 'Espécie 1'], + ['nomeNoProdutor' => 'Espécie 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals( + mb_convert_encoding('Espécie 1', 'ISO-8859-1', 'UTF-8'), + $resultado[0] + ); + $this->assertEquals( + mb_convert_encoding('Espécie 2', 'ISO-8859-1', 'UTF-8'), + $resultado[1] + ); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarEspeciesDocumentaisSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarEspeciesDocumentaisComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Não foi encontrado nenhuma espécie documental.'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarEspeciesDocumentais(); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php new file mode 100644 index 000000000..2152b5bb9 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php @@ -0,0 +1,108 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, false); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaBolRetornoRawTrueSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, true); + + $this->assertInstanceOf(stdClass::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..519b47b0f --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,122 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'validarRestricaoUnidadesCadastradas', 'buscarEstruturasPorEstruturaPai']) + ->getMock(); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para um caso de sucesso. + * + * Verifica se a lista de estruturas é retornada e ordenada corretamente com base nos nomes. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiRetornaEstruturasOrdenadas() + { + $idRepositorioEstrutura = 1; + $mockEstruturas = [ + (object)['nome' => 'Unidade B', 'codigo' => '002'], + (object)['nome' => 'Unidade A', 'codigo' => '001'], + (object)['nome' => 'Unidade C', 'codigo' => '003'], + ]; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->with($idRepositorioEstrutura) + ->willReturn(null); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, null) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + + $this->assertCount(3, $resultado); + $this->assertEquals('Unidade A', $resultado[0]->nome); + $this->assertEquals('Unidade B', $resultado[1]->nome); + $this->assertEquals('Unidade C', $resultado[2]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para uma unidade pai específica. + * + * Verifica se a busca por estrutura pai é realizada corretamente ao fornecer + * um número de identificação específico. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiComUnidadePaiEspecifica() + { + $idRepositorioEstrutura = 1; + $numeroDeIdentificacaoDaEstrutura = '001'; + $mockEstruturas = [ + (object)['nome' => 'Unidade D', 'codigo' => '004'], + ]; + + $this->mockService->expects($this->never()) + ->method('validarRestricaoUnidadesCadastradas'); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura); + + $this->assertCount(1, $resultado); + $this->assertEquals('Unidade D', $resultado[0]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai quando ocorre um erro. + * + * Verifica se uma exceção InfraException é lançada corretamente ao ocorrer + * um erro no método validarRestricaoUnidadesCadastradas. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->willThrowException(new Exception('Erro no serviço')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php new file mode 100644 index 000000000..7acd9b36d --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php @@ -0,0 +1,82 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "estruturas" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ] + ], + "totalDeRegistros" => 1 + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstruturas(159098, []); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturas(159098, []); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php new file mode 100644 index 000000000..9c13025b7 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php @@ -0,0 +1,111 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o sucesso da consulta de hipóteses legais. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array de hipoteses + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = [ + 'hipoteseslegais' => [ + ] + ]; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertArrayHasKey('hipoteseslegais', $resultado); + } + + /** + * Testa o sucesso da consulta de hipóteses legais com retorno vazio. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array vazio + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisRetornoVazioSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = []; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertEquals(0, count($resultado)); + } + + /** + * Testa o lançamento de exceção ao tentar consultar as hipóteses legais. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre um erro + * ao tentar realizar a consulta (simulando a exceção gerada pelo método 'get'). + * + * @return void + * @throws InfraException Se a exceção de infra-estrutura for gerada. + */ + public function testConsultarHipotesesLegaisLancaExcecao() + { + // Configura o mock para lançar uma exceção quando o método 'get' for chamado + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + // Define a expectativa de que a exceção InfraException será lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de hipóteses legais'); + + // Chama o método que deve lançar a exceção + $this->mockService->consultarHipotesesLegais(true); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php new file mode 100644 index 000000000..ed8532f0b --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php @@ -0,0 +1,126 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'get']) + ->getMock(); + } + + /** + * Testa o método `consultarMotivosUrgencia` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array. + * - Contém os motivos de urgência esperados. + */ + public function testConsultarMotivosUrgenciaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [ + ['descricao' => 'Motivo 1'], + ['descricao' => 'Motivo 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals('Motivo 1', $resultado[0]); + $this->assertEquals('Motivo 2', $resultado[1]); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarMotivosUrgenciaSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarMotivosUrgenciaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarMotivosUrgencia(); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php new file mode 100644 index 000000000..34788d48b --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php @@ -0,0 +1,125 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna uma instância de `RepositorioDTO`. + * - Preenche os atributos da instância com os valores corretos. + */ + public function testConsultarRepositoriosDeEstruturasComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + [ + 'id' => 5, + 'nome' => 'Repositório 1', + 'ativo' => true + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(5); + + // Validações + $this->assertInstanceOf(RepositorioDTO::class, $resultado); + $this->assertEquals(5, $resultado->getNumId()); + $this->assertEquals( + mb_convert_encoding('Repositório 1', 'ISO-8859-1', 'UTF-8'), + $resultado->getStrNome() + ); + $this->assertTrue($resultado->getBolAtivo()); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando não há resultados. + * + * Verifica se o método: + * - Retorna `null` quando não há repositórios disponíveis. + */ + public function testConsultarRepositoriosDeEstruturasSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = []; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(123); + + // Validações + $this->assertNull($resultado); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarRepositoriosDeEstruturasComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarRepositoriosDeEstruturas(123); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php new file mode 100644 index 000000000..be505824f --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php @@ -0,0 +1,130 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasAutoCompletar com parâmetros válidos. + * + * Verifica se o retorno do método é formatado corretamente, incluindo: + * - Propriedades convertidas para UTF-8. + * - Hierarquia de siglas mapeada. + * - Quantidade correta de itens no resultado. + */ + public function testListarEstruturasAutoCompletarRetornaEstruturasFormatadas() + { + // Simulação de parâmetros e retorno esperado + $idRepositorioEstrutura = 1; + $nome = 'Teste Unidade'; + $mockResultado = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 101, + 'nome' => 'Unidade A', + 'sigla' => 'UA', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '123', + 'hierarquia' => [ + ['sigla' => 'ORG'] + ] + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => 102, + 'nome' => 'Unidade B', + 'sigla' => 'UB', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '456', + 'hierarquia' => [] + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->callback(function ($parametros) use ($nome) { + return $parametros['nome'] === $nome && $parametros['apenasAtivas'] === true; + })) + ->willReturn($mockResultado); + + $resultado = $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura, $nome); + + // Asserções sobre o retorno + $this->assertIsArray($resultado); + $this->assertArrayHasKey('diferencaDeRegistros', $resultado); + $this->assertArrayHasKey('itens', $resultado); + $this->assertCount(2, $resultado['itens']); + } + + /** + * Testa o método listarEstruturasAutoCompletar quando ocorre um erro. + * + * Simula um erro no método consultarEstruturas e verifica se uma exceção + * InfraException é lançada corretamente com a mensagem esperada. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro interno')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasAutoCompletar com repositório inválido. + * + * Verifica se uma exceção InfraException é lançada quando o ID do + * repositório de estruturas fornecido é inválido. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php new file mode 100644 index 000000000..a23711182 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php @@ -0,0 +1,124 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um caso de sucesso. + * + * Simula uma resposta válida do método 'consultarEstruturas' e verifica + * se o retorno é uma lista de objetos EstruturaDTO com os dados corretos. + * + * @return void + */ + public function testListarEstruturasBuscaTextualRetornaEstruturas() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Raiz'; + $mockResponse = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => '123', + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [['sigla' => 'H1'], ['sigla' => 'H2']], + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => '456', + 'nome' => 'Estrutura 2', + 'sigla' => 'E2', + 'ativo' => false, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '002', + 'hierarquia' => [['sigla' => 'H3']], + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->arrayHasKey('identificacaoDoRepositorioDeEstruturas')) + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura, $nome); + + $this->assertCount(2, $resultado); + $this->assertInstanceOf(EstruturaDTO::class, $resultado[0]); + $this->assertEquals('123', $resultado[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $resultado[0]->getStrNome()); + $this->assertEquals(['H1', 'H2'], $resultado[0]->getArrHierarquia()); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um repositório inválido. + * + * Verifica se uma exceção InfraException é lançada ao fornecer um ID de repositório inválido. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasBuscaTextual para falhas no web service. + * + * Simula um erro no método 'consultarEstruturas' e verifica se a exceção + * InfraException é lançada com a mensagem correta. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaErroWebService() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php new file mode 100644 index 000000000..f8d69ea83 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php @@ -0,0 +1,67 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testListarPendenciasSucesso() + { + $mockResponse = [ + [ + 'status' => 2, + 'IDT' => 999 + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarPendencias(true); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(PendenciaDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + public function testListarPendenciasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na listagem de pendências de trâmite de processos'); + + $this->mockService->listarPendencias(true); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php new file mode 100644 index 000000000..dbd027c18 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php @@ -0,0 +1,97 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele + * retorna uma lista de repositórios de estruturas com sucesso. + * + * Cenário testado: + * - O método 'get' retorna uma lista simulada de repositórios. + * - O retorno do método deve ser um array contendo objetos do tipo RepositorioDTO. + * + * Asserções: + * - O retorno deve ser um array. + * - A quantidade de itens no retorno deve ser igual à quantidade simulada. + * - O primeiro item do retorno deve ser uma instância de RepositorioDTO. + * + * @return void + */ + public function testListarRepositoriosDeEstruturasRetornaListaSucesso() + { + $mockResponse = [ + ["id" => 49, "nome" => "Acre - AC", "ativo" => true], + ["id" => 2, "nome" => "Advocacia-Geral da União", "ativo" => true], + ["id" => 7, "nome" => "Alagoas( Estado)", "ativo" => true], + ["id" => 20, "nome" => "Banco Central do Brasil 2", "ativo" => true], + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarRepositoriosDeEstruturas(); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(RepositorioDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele lança + * uma exceção quando a requisição falha. + * + * Cenário testado: + * - O método 'get' lança uma exceção simulada. + * - O método listarRepositoriosDeEstruturas deve capturar a exceção e + * relançar uma InfraException com a mensagem apropriada. + * + * Asserções: + * - Uma exceção do tipo InfraException deve ser lançada. + * - A mensagem da exceção deve ser "Falha na obtenção dos Repositórios de Estruturas Organizacionais". + * + * @return void + */ + public function testListarRepositoriosDeEstruturasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + $this->mockService->listarRepositoriosDeEstruturas(); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php new file mode 100644 index 000000000..45a8d2edb --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php @@ -0,0 +1,120 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa a listagem de estruturas com sucesso. + * + * Este teste verifica se o método listarEstruturas retorna corretamente + * as estruturas esperadas quando os dados são fornecidos corretamente. + */ + public function testListarEstruturasComSucesso() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Teste'; + $mockRetornoConsulta = [ + 'totalDeRegistros' => 1, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 123, + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [ + ['sigla' => 'H1'], + ['sigla' => 'H2'], + ], + ], + ], + ]; + + // Define a expectativa para o mock do método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willReturn($mockRetornoConsulta); + + // Executa o método sob teste + $result = $this->mockService->listarEstruturas($idRepositorioEstrutura, $nome); + + // Validações dos resultados + $this->assertCount(1, $result); + $this->assertInstanceOf(EstruturaDTO::class, $result[0]); + $this->assertEquals(123, $result[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $result[0]->getStrNome()); + $this->assertEquals('E1', $result[0]->getStrSigla()); + $this->assertEquals(['H1', 'H2'], $result[0]->getArrHierarquia()); + } + + /** + * Testa a listagem de estruturas com repositório inválido. + * + * Este teste verifica se uma exceção é lançada quando o ID do repositório + * de estruturas é inválido (null). + */ + public function testListarEstruturasComRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } + + /** + * Testa a listagem de estruturas com erro na consulta. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre + * um erro durante a consulta de estruturas. + */ + public function testListarEstruturasComErroNaConsulta() + { + $idRepositorioEstrutura = 1; + + // Configura o mock para lançar uma exceção no método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro na consulta')); + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php new file mode 100644 index 000000000..1fb0da91f --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php @@ -0,0 +1,103 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o recebimento de recibo de trâmite com sucesso. + * + * Simula a execução do método `get` e o retorno de um objeto + * convertido a partir de um array, verificando se o resultado + * final corresponde ao esperado. + * + * @return void + */ + public function testReceberReciboDeTramiteComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'recibo' => [ + 'hashesDosComponentesDigitais' => ['hash123'], + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($resultadoMock); + + // Substituir o método estático converterArrayParaObjeto + $resultadoObjetoMock = (object)[ + 'recibo' => (object)[ + 'hashDoComponenteDigital' => 'hash123', + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($resultadoObjetoMock); + + // Chamada do método + $resultado = $this->mockService->receberReciboDeTramite(123); + + // Asserções + $this->assertIsObject($resultado); + $this->assertEquals('hash123', $resultado->recibo->hashDoComponenteDigital); + $this->assertEquals('valor', $resultado->recibo->outroDado); + } + + /** + * Testa o cenário em que ocorre um erro ao receber o recibo de trâmite. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é + * lançada pelo método testado. + * + * @return void + */ + public function testReceberReciboDeTramiteComErro() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Verifica se a exceção esperada é lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no recebimento de recibo de trâmite.'); + + $this->mockService->receberReciboDeTramite(123); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php new file mode 100644 index 000000000..6c915341b --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php @@ -0,0 +1,117 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o método solicitarMetadados para um caso de sucesso. + * + * Este teste verifica se o método retorna um objeto stdClass corretamente + * configurado quando os dados retornados pelo método get são válidos. + * + * @return void + */ + public function testSolicitarMetadadosRetornaObjetoCorreto() + { + $parNumIdentificacaoTramite = 123; + + // Simular a resposta do método get + $mockResponse = [ + 'propriedadesAdicionais' => ['algum_valor'], + 'processo' => [ + 'documentos' => [ + [ + 'componentesDigitais' => [ + [ + 'assinaturasDigitais' => [ + ['alguma_assinatura'] + ] + ] + ] + ] + ] + ] + ]; + + $mockConvertedObject = (object) [ + 'NRE' => '123456', + 'processo' => (object) [ + 'documentos' => [(object) ['algum_valor']], + 'interessados' => [(object) ['algum_interessado']] + ] + ]; + + // Configura o mock para o método get + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Configura o mock para o método converterArrayParaObjeto + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($mockConvertedObject); + + // Chama o método a ser testado + $resultado = $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + + // Verifica o retorno + $this->assertInstanceOf(stdClass::class, $resultado); + $this->assertEquals($parNumIdentificacaoTramite, $resultado->IDT); + $this->assertEquals('123456', $resultado->metadados->NRE); + } + + /** + * Testa o método solicitarMetadados para um caso de falha. + * + * Este teste verifica se uma exceção InfraException é lançada corretamente + * quando o método get falha ao buscar os dados necessários. + * + * @return void + */ + public function testSolicitarMetadadosLancaExcecao() + { + $parNumIdentificacaoTramite = 123; + + // Configura o mock para o método get para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na solicitação de metadados do processo'); + + // Chama o método e espera uma exceção + $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRNTest.php b/tests_super/unitario/rn/ProcessoEletronicoRNTest.php deleted file mode 100755 index 5123029c6..000000000 --- a/tests_super/unitario/rn/ProcessoEletronicoRNTest.php +++ /dev/null @@ -1,114 +0,0 @@ -objProcessoEletronicoRN = new ProcessoEletronicoRN(); - } - - /** - * Testes do método privado reduzirCampoTexto - * - * @return void - */ - public function testReduzirCampoTexto() - { - $numTamanhoMaximo = 53; - // Teste considerando uma palavra pequena ao final do texto - $strTexto = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii"; - $strResultadoEsperado = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas uma palavra - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com uma palavra grande ao final - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando texto longo e palavro curta ao finals - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto curto abaixo do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa a"; - $strResultadoEsperado = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - // Teste considerando um texto nulo - $strTexto = null; - $strResultadoEsperado = null; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com ultima palavra menor que a reticencias - $strTexto = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniamr quis"; - $strResultadoEsperado = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniam ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - $strTexto = "ããããã ããããã"; - $strResultadoEsperado = mb_convert_encoding("ããããã ...", 'UTF-8', 'ISO-8859-1'); - $strResultadoAtual = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 9), 'UTF-8', 'ISO-8859-1'); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen(mb_convert_encoding($strResultadoAtual, 'ISO-8859-1', 'UTF-8')) <= 9); - - $strTexto = "ããããã ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniamr quis"; - $strResultadoEsperado = mb_convert_encoding("ããããã ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniam ...", 'UTF-8', 'ISO-8859-1'); - $strResultadoAtual = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150), 'UTF-8', 'ISO-8859-1'); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(mb_strlen($strResultadoAtual) <= 150); - - $strTexto = "Assessoria de Comunicação do Gabinete do Diretor-Presidente da Autoridade Nacional dede Proteção de dados"; - $strResultadoEsperado = mb_convert_encoding("Assessoria de Comunicação do Gabinete do Diretor-Presidente da Autoridade Nacional dede Proteçã ...", 'UTF-8', 'ISO-8859-1'); - $strResultadoAtual = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 100), 'UTF-8', 'ISO-8859-1'); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen(mb_convert_encoding($strResultadoAtual, 'ISO-8859-1', 'UTF-8')) <= 100); - - } - - public function testCompararVersoes(){ - $this->assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); - $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); - $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); - } -}