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));
- }
-}