Skip to content

Commit

Permalink
feat: adicionar estrutura e testes unitários iniciais (#762)
Browse files Browse the repository at this point in the history
* feat: modificar a estrutura atual para funcionamento de bibliotecas externas do PHP no projeto

* feat: alterar url_base API para versões sei4, sei41, sei_super e Remover arquivo de ConfiguracaoModPEN.exemplo

* feat: alterar o métodos da classe expedirProcedimento para funcionamento correto com REST

* feat: alterar o métodos da classe PENAgendamento para funcionamento correto com REST

* feat: alterar estrutura da classe ProcessoEletronicoINT para funcionamento correto com REST

* refactor: substituir todas as rotas SOAP para REST

* refactor: métodos de integração para recebimento de arquivos e geração de recibos

* fix: mudar estrutura para se adaptar a mudança na API

* chore: correções phpcs

* fix: alterar estutura removendo parametro em obsoleto --dev

* fix: alterar WSDL para REST no verificador de instalação e corrigir erro de merge

* fix:: corrigir atualização no banco para proceessos recebidos

* chore: adicionar camiinho absoluto para chamada do vendor dentro da class

* feat: alterar tipagem de variável em todos os métodos  que consome a API

* fix: alterar nome historico no recebimento para teste funcional

* fix: correções testes automatizados

* fix: Adicionar correção documento cancelado, versões SEI: 4.1.1 e 4.1.2

* chore: aumentar timeout e remover número mágico

* fix: correção para campo de unidade em restrição de envio (#704)

Campo de id da unidade do Tramita deve receber null quando o mapeamento for apenas para estruturas

* inclusão do schema - tbls (#520)

Co-authored-by: PauloNehme <[email protected]>

* chore: usa versão 10.0 das imagens

* fix: script instalacao 3.7.0 para postgresql (#706)

* chore: versão compatível com 4.1.3 e 4.1.4

* feat: adicionar estrutrura para testes unitários e testes iniciais

* feat: merge com testes automatizados e correção phpcs

---------

Co-authored-by: Glaydson Rodrigues <[email protected]>
Co-authored-by: Mauro Costa <[email protected]>
Co-authored-by: PauloNehme <[email protected]>
Co-authored-by: PauloNehme <[email protected]>
Co-authored-by: Carlos Vieira <[email protected]>
Co-authored-by: Marcus Dias <[email protected]>
  • Loading branch information
7 people authored Jan 6, 2025
1 parent d0c1c92 commit 2df37af
Show file tree
Hide file tree
Showing 88 changed files with 7,384 additions and 982 deletions.
42 changes: 42 additions & 0 deletions .github/workflows/coveralls.yml
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ src/config/supervisor.ini

.vscode

cobertura.xml
.env
*.pem
*.cache
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 3 additions & 3 deletions src/pen_map_unidade_cadastrar.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '';
Expand Down
107 changes: 57 additions & 50 deletions src/rn/ProcessoEletronicoRN.php
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificac
}
}

return self::converterArrayParaObjeto($arrResultado);
return $this->converterArrayParaObjeto($arrResultado);
}

$objEstruturaDTO = new EstruturaDTO();
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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');
}
}

Expand Down Expand Up @@ -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');
}
}

Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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 = '';

Expand Down Expand Up @@ -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));
Expand All @@ -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());
Expand Down Expand Up @@ -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;
}
Expand All @@ -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
Expand Down Expand Up @@ -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;
}


Expand Down Expand Up @@ -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);
}


/**
Expand Down
6 changes: 3 additions & 3 deletions src/rn/ReceberComponenteDigitalRN.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
24 changes: 12 additions & 12 deletions src/rn/ReceberProcedimentoRN.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion tests_sei4/funcional/phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<const name="PHPUNIT_BROWSER" value="chrome" />
<const name="PHPUNIT_TESTS_URL" value="http://localhost/sei" />
<const name="PEN_ENDERECO_WEBSERVICE"
value="https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/?wsdl" />
value="https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/" />

<!-- Chaves de configurações gerais do teste do Barramento de Serviços do PEN -->
<const name="PEN_WAIT_TIMEOUT" value="360000" />
Expand Down
Loading

0 comments on commit 2df37af

Please sign in to comment.