"""app\rbac\MethodRule chama call_user_func([classe, metodo]) com o NOME da classe: no PHP 8 o metodo precisa ser static."""
import subprocess
import unittest
from pathlib import Path

RAIZ = Path(__file__).resolve().parents[3]
SQL = "select distinct cast(data as char) from auth_item where rule_name='MethodRule';"


class RbacTest(unittest.TestCase):
    def test_metodos_das_regras_sao_static(self):
        dados = subprocess.run(
            ["docker", "exec", "-i", "mysql57_php83", "sh", "-c",
             'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -N -B psec_vialgpd_php83 2>/dev/null'],
            input=SQL, capture_output=True, text=True, encoding="utf8").stdout
        (RAIZ / ".superpowers" / "regras.txt").write_text(dados, encoding="utf8")
        saida = subprocess.run(
            ["docker", "exec", "php83_apache", "php", "-d", "display_errors=stderr",
             "/var/www/html/accia-php83/tools/migracao-php83/php/regras_rbac.php", "/var/www/html/accia-php83",
             "/var/www/html/accia-php83/.superpowers/regras.txt"], capture_output=True, text=True, encoding="utf8").stdout
        linhas = saida.splitlines()
        self.assertEqual(len(linhas), 29, saida[-500:])
        self.assertEqual([l for l in linhas if l.startswith("NAO-STATIC")], [])


if __name__ == "__main__":
    unittest.main()
