Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: adicionar estrutura e testes unitários iniciais #762

Merged
merged 26 commits into from
Jan 6, 2025
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0fa8048
feat: modificar a estrutura atual para funcionamento de bibliotecas e…
Nov 13, 2024
584280e
feat: alterar url_base API para versões sei4, sei41, sei_super e Remo…
Nov 13, 2024
edf17c7
feat: alterar o métodos da classe expedirProcedimento para funcioname…
Nov 13, 2024
70e61dc
feat: alterar o métodos da classe PENAgendamento para funcionamento c…
Nov 13, 2024
5444eb6
feat: alterar estrutura da classe ProcessoEletronicoINT para funciona…
Nov 13, 2024
8b1c7af
refactor: substituir todas as rotas SOAP para REST
Nov 14, 2024
279bb27
refactor: métodos de integração para recebimento de arquivos e geraçã…
Nov 14, 2024
0ecaa43
fix: mudar estrutura para se adaptar a mudança na API
Nov 21, 2024
8697578
chore: correções phpcs
Nov 21, 2024
0e90426
fix: alterar estutura removendo parametro em obsoleto --dev
Nov 25, 2024
d25d772
fix: alterar WSDL para REST no verificador de instalação e corrigir e…
Nov 26, 2024
82a5761
fix:: corrigir atualização no banco para proceessos recebidos
Dec 6, 2024
9b5ff65
chore: adicionar camiinho absoluto para chamada do vendor dentro da c…
Dec 6, 2024
5bf5784
feat: alterar tipagem de variável em todos os métodos que consome a API
Dec 9, 2024
8f0ba83
fix: alterar nome historico no recebimento para teste funcional
Dec 10, 2024
72e9262
fix: correções testes automatizados
Dec 13, 2024
8ab6cee
fix: Adicionar correção documento cancelado, versões SEI: 4.1.1 e 4.1.2
Dec 18, 2024
96895f5
chore: aumentar timeout e remover número mágico
Dec 20, 2024
6c2fed9
fix: correção para campo de unidade em restrição de envio (#704)
Mauro1706 Nov 7, 2024
244a17a
inclusão do schema - tbls (#520)
PauloNehme Nov 7, 2024
7cd97da
chore: usa versão 10.0 das imagens
caduvieira Nov 11, 2024
916c773
fix: script instalacao 3.7.0 para postgresql (#706)
marvdias Nov 12, 2024
f3d62bb
chore: versão compatível com 4.1.3 e 4.1.4
caduvieira Nov 12, 2024
17d766d
feat: adicionar estrutrura para testes unitários e testes iniciais
Jan 2, 2025
e638380
feat: merge com testes automatizados e correção phpcs
Jan 6, 2025
e7fedc1
chore: correção automática do phpcs
Jan 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
@@ -9,6 +9,7 @@ src/config/supervisor.ini

.vscode

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

6 changes: 3 additions & 3 deletions src/pen_map_unidade_cadastrar.php
Original file line number Diff line number Diff line change
@@ -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 = '';
107 changes: 57 additions & 50 deletions src/rn/ProcessoEletronicoRN.php
Original file line number Diff line number Diff line change
@@ -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);
}


/**
6 changes: 3 additions & 3 deletions src/rn/ReceberComponenteDigitalRN.php
Original file line number Diff line number Diff line change
@@ -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;
24 changes: 12 additions & 12 deletions src/rn/ReceberProcedimentoRN.php
Original file line number Diff line number Diff line change
@@ -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;
2 changes: 1 addition & 1 deletion tests_sei4/funcional/phpunit.xml
Original file line number Diff line number Diff line change
@@ -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" />
Loading