CaiWuXiTong/tests/Unit/EcommerceFinance/UpstreamOdbcConnectionTest.php

75 lines
2.4 KiB
PHP

<?php
namespace Tests\Unit\EcommerceFinance;
use Modules\EcommerceFinance\Services\UpstreamOdbcConnection;
use PDO;
use ReflectionMethod;
use Tests\TestCase;
class UpstreamOdbcConnectionTest extends TestCase
{
public function test_operations_replica_dblib_dsn_uses_only_endpoint_and_database_metadata(): void
{
$method = new ReflectionMethod(UpstreamOdbcConnection::class, 'pdoDblibDsn');
$dsn = $method->invoke(null, '127.0.0.1', 15433, 'reporting', '7.4');
$this->assertSame(
'dblib:host=127.0.0.1:15433;dbname=reporting;version=7.4;charset=UTF-8',
$dsn,
);
$this->assertStringNotContainsString('PWD=', $dsn);
$this->assertStringNotContainsString('UID=', $dsn);
}
public function test_production_dblib_transport_is_only_opted_in_for_the_marked_source(): void
{
$method = new ReflectionMethod(UpstreamOdbcConnection::class, 'shouldUsePdoDblib');
config()->set('upstreams.sources.operations_replica.use_pdo_dblib', true);
config()->set('upstreams.sources.jiansun.use_pdo_dblib', false);
$operations = $method->invoke(null, 'operations_replica', 'FreeTDS', 'request');
$jiansun = $method->invoke(null, 'jiansun', 'FreeTDS', 'request');
if (PHP_OS_FAMILY !== 'Windows' && extension_loaded('pdo_dblib')) {
$this->assertTrue($operations);
} else {
$this->assertFalse($operations);
}
$this->assertFalse($jiansun);
$this->assertFalse($method->invoke(null, 'operations_replica', 'FreeTDS', 'strict'));
}
public function test_sql_server_connection_enables_required_ansi_session_options(): void
{
$pdo = new class extends PDO
{
/** @var array<int,string> */
public array $statements = [];
public function __construct()
{
}
public function exec(string $statement): int|false
{
$this->statements[] = $statement;
return 0;
}
};
$method = new ReflectionMethod(UpstreamOdbcConnection::class, 'initializeSqlServerSession');
$result = $method->invoke(null, $pdo);
$this->assertSame($pdo, $result);
$this->assertSame([
'SET ANSI_NULLS ON',
'SET ANSI_WARNINGS ON',
], $pdo->statements);
}
}