File manager - Edit - /var/www/html/portal/tests/Support/Importacoes/ImportacaoProdataTestHelpers.php
Back
<?php namespace Tests\Support\Importacoes; use App\Models\Permissao; use App\Models\Structure; use App\Models\User; /** * Helpers compartilhados pelos testes da importacao Prodata - Conta Angra. * * Os helpers geram CPFs validos com checksum oficial a partir de um prefixo * fixo `999` (reservado para testes) + sufixo numerico fornecido, evitando * colisao com CPFs reais do banco em ambientes nao isolados. */ trait ImportacaoProdataTestHelpers { protected string $cpfTestePrefixo = '999'; /** * Gera um CPF de 11 digitos com checksum valido, usando o prefixo * reservado para testes (`999`) seguido do sufixo informado, zero-padded * em 6 caracteres para totalizar exatamente 9 digitos antes dos dois * verificadores oficiais. */ protected function gerarCpfTeste(int|string $sufixo): string { $padLen = 9 - strlen($this->cpfTestePrefixo); $base = $this->cpfTestePrefixo . str_pad((string) $sufixo, $padLen, '0', STR_PAD_LEFT); $base = substr($base, 0, 9); $digitos = $base . $this->calcularDigitosCpf($base); if (preg_match('/^(\d)\1{10}$/', $digitos)) { return $this->gerarCpfTeste(((int) $sufixo) + 1); } return $digitos; } protected function calcularDigitosCpf(string $base): string { $cpf = $base; for ($t = 9; $t < 11; $t++) { $soma = 0; for ($i = 0; $i < $t; $i++) { $soma += (int) $cpf[$i] * (($t + 1) - $i); } $resto = ($soma * 10) % 11; if ($resto === 10) { $resto = 0; } $cpf .= $resto; } return substr($cpf, 9, 2); } /** * Retorna um structure_id valido para uso em testes. Usa STRUCTURE_DEFAULT_ID * do .env e, em fallback, busca o primeiro Structure ativo no banco. */ protected function getStructureIdTeste(): string { $id = env('STRUCTURE_DEFAULT_ID'); if (is_string($id) && $id !== '') { return $id; } $primeira = Structure::query()->where('status', 'ATIVADO')->value('id'); if (!$primeira) { $this->fail('Nenhuma Structure ATIVADO encontrada para uso nos testes.'); } return (string) $primeira; } /** * Retorna 2 structures distintas para testes que precisam validar mudanca * de unidade. Em caso de existir apenas 1, retorna a mesma duas vezes. * * @return array{0:string,1:string} */ protected function getDuasStructuresTeste(): array { $ids = Structure::query()->where('status', 'ATIVADO')->orderBy('id')->pluck('id')->all(); if (count($ids) === 0) { $this->fail('Nenhuma Structure ATIVADO disponivel.'); } if (count($ids) === 1) { return [(string) $ids[0], (string) $ids[0]]; } return [(string) $ids[0], (string) $ids[1]]; } /** * Remove qualquer user de teste pendente (CPFs iniciando com o prefixo de * teste) e suas permissoes. */ protected function limparUsuariosTeste(): void { $ids = User::query() ->where('cpf', 'like', $this->cpfTestePrefixo . '%') ->pluck('id') ->all(); if ($ids === []) { return; } Permissao::query()->whereIn('user_id', $ids)->delete(); User::query()->whereIn('id', $ids)->delete(); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings