feat: configure audio providers and add local sample acceptance
This commit is contained in:
@@ -12,15 +12,29 @@ namespace app\common\service\followupaudio {
|
||||
}
|
||||
namespace {
|
||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
$app = new \think\App(dirname(__DIR__) . '/'); $app->initialize();
|
||||
require dirname(__DIR__) . '/vendor/topthink/framework/src/helper.php';
|
||||
// Explicit disposable local database only; no application initialization or .env loading.
|
||||
$port = (int) getenv('FOLLOWUP_AUDIO_TEST_MYSQL_PORT');
|
||||
if ($port <= 0 || getenv('FOLLOWUP_AUDIO_TEST_ALLOW_DISPOSABLE') !== '1') {
|
||||
throw new \RuntimeException('Explicit local disposable MySQL port and FOLLOWUP_AUDIO_TEST_ALLOW_DISPOSABLE=1 required');
|
||||
}
|
||||
$password = (string) getenv('FOLLOWUP_AUDIO_TEST_MYSQL_PASSWORD');
|
||||
$database = 'fa_access_' . bin2hex(random_bytes(6));
|
||||
$control = new \PDO("mysql:host=127.0.0.1;port={$port};charset=utf8mb4", 'root', $password,
|
||||
[\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]);
|
||||
$control->exec("CREATE DATABASE `{$database}` CHARACTER SET utf8mb4");
|
||||
new \think\App();
|
||||
set_exception_handler(static function (\Throwable $e): void {
|
||||
fwrite(STDERR, $e->getMessage() . PHP_EOL . $e->getTraceAsString() . PHP_EOL); exit(1);
|
||||
});
|
||||
$app->config->set(['default' => 'mysql', 'connections' => ['mysql' => [
|
||||
'type' => 'mysql', 'hostname' => '127.0.0.1', 'hostport' => 23316,
|
||||
'database' => 'followup_audio_test', 'username' => 'root', 'password' => 'followup_audio_isolated_test',
|
||||
$manager = new \think\DbManager();
|
||||
$manager->setConfig(['default' => 'mysql', 'connections' => ['mysql' => [
|
||||
'type' => 'mysql', 'hostname' => '127.0.0.1', 'hostport' => $port,
|
||||
'database' => $database, 'username' => 'root', 'password' => $password,
|
||||
'charset' => 'utf8mb4', 'prefix' => 'faa_', 'debug' => false,
|
||||
]]], 'database');
|
||||
]]]);
|
||||
\think\Container::getInstance()->instance('think\DbManager', $manager);
|
||||
\think\Container::getInstance()->instance('config', new \think\Config());
|
||||
$db = \think\facade\Db::class;
|
||||
$tables = [
|
||||
'admin' => 'id BIGINT PRIMARY KEY, name VARCHAR(30), root INT, disable INT, delete_time BIGINT NULL',
|
||||
@@ -52,7 +66,7 @@ namespace {
|
||||
$deny = function (callable $f, string $label) use ($ok): void {
|
||||
try { $f(); } catch (\DomainException $e) { $ok(true, $label); return; } $ok(false, $label);
|
||||
};
|
||||
$other = new \PDO('mysql:host=127.0.0.1;port=23316;dbname=followup_audio_test;charset=utf8mb4', 'root', 'followup_audio_isolated_test', [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]);
|
||||
$other = new \PDO("mysql:host=127.0.0.1;port={$port};dbname={$database};charset=utf8mb4", 'root', $password, [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]);
|
||||
try {
|
||||
$ok((int) $a::diagnosis(91, 8, ['root' => 1])['id'] === 91, 'own patient');
|
||||
$deny(fn () => $a::diagnosis(92, 8, ['root' => 1]), 'forged cached root must fail');
|
||||
@@ -80,6 +94,7 @@ namespace {
|
||||
echo "Followup audio real authorization: {$checks} checks passed (isolated MySQL; current-read revocation/reassignment)\n";
|
||||
} finally {
|
||||
try { $db::rollback(); } catch (\Throwable $e) {}
|
||||
foreach (array_keys($tables) as $name) { $db::execute("DROP TABLE IF EXISTS faa_{$name}"); }
|
||||
$manager->connect()->close();
|
||||
$control->exec("DROP DATABASE IF EXISTS `{$database}`");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user