#!/usr/bin/env python3
"""Configuration par l'environnement du processus : la base, l'utilisateur et le secret peuvent être imposés sans fichier .env (isolement des sessions de test)."""
import os, subprocess, sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from lib import ROOT, ok, summary
def php(code, env):
    e = {k: v for k, v in os.environ.items() if not k.startswith(('DB_', 'JWT_'))}; e.update(env)
    return subprocess.run(['php', '-d', 'display_errors=0', '-r', '$_SERVER["REQUEST_METHOD"]="GET"; $_SERVER["HTTP_HOST"]="dev-api.uluana.art"; ob_start(); require "api/_core.php"; ob_end_clean(); ' + code], capture_output=True, text=True, cwd=ROOT, env=e).stdout.strip()
print('\n■ Environnement du processus')
ok(php('echo DB_NAME;', {'DB_NAME': 'base_imposee_test', 'DB_USER': 'u', 'DB_PASS': 'p'}) == 'base_imposee_test', 'DB_NAME de l\'environnement l\'emporte (la base de cette session)')
ok(php('echo DB_USER . "|" . DB_PASS . "|" . DB_HOST;', {'DB_NAME': 'x_test', 'DB_USER': 'alice', 'DB_PASS': 'secret', 'DB_HOST': 'h.test'}) == 'alice|secret|h.test', 'utilisateur, mot de passe et hôte aussi')
ok(php('echo $GLOBALS["_ENV_VARS"]["JWT_SECRET"] ?? "absent";', {'JWT_SECRET': 'secret-de-session'}) == 'secret-de-session', 'JWT_SECRET de l\'environnement : les jetons de cette session sont signés avec SON secret')
a = php('echo jwt_issue(["id" => "u1"]);', {'JWT_SECRET': 'secret-A'}); b = php('echo jwt_issue(["id" => "u1"]);', {'JWT_SECRET': 'secret-B'})
ok(a and b and a != b and a.count('.') == 2, 'deux secrets différents donnent deux jetons différents (une session ne peut pas utiliser le serveur de l\'autre)')
ok(php('echo $GLOBALS["_ENV_VARS"]["DB_NAME"] ?? "absent";', {'DB_NAME': ''}) != '', 'une variable VIDE n\'écrase rien (ni la base ni les valeurs par défaut)')
summary()
