Files
XC_VM/tests/Unit/QueryHelperTest.php
T
Divarion-D 42db4be509 chore(psr4): phase 3 (Core hubs) — namespace Core/Database
Move Core/Database into XcVm\Core\Database (DatabaseHandler, Database,
MigrationRunner, QueryHelper). First of the Core hub sub-layers.

- Namespace the 4 classes; DatabaseHandler extends Database (same namespace);
  built-ins/ioncube qualified (\PDO, \PDOException, \Exception, \Throwable,
  \XC_VM); Database keeps its 'use XcVm\Core\Logging\FileLogger;'.
- Add 'use XcVm\Core\Database\...;' to referencing files (DatabaseHandler 51,
  Database 64, QueryHelper 29, MigrationRunner 3) + 2 test files (PHPStan does not
  analyse tests/, so PHPUnit is the gate there).
- Rewrite pre-existing leading-backslash global refs (\DatabaseHandler etc., e.g.
  in @param docblocks of ResellerApiDispatcher/ResellerTableRenderer) to the full
  FQCN \XcVm\Core\Database\... — a 'use' import does not cover a leading-\
  reference. Done with a lookbehind so FQCN continuations and use-lines are intact.
- phpstan-baseline.neon regenerated (292→292; pre-existing Database/migration_logic
  findings re-anchored after class names in messages gained the namespace).

Verified: php -l clean; PHPStan no errors; PHPUnit 295/295.
2026-06-24 21:15:06 +03:00

43 lines
1.4 KiB
PHP

<?php
use XcVm\Core\Database\Database;
use XcVm\Core\Database\QueryHelper;
use PHPUnit\Framework\TestCase;
/**
* @covers QueryHelper
*/
final class QueryHelperTest extends TestCase {
public function testPrepareColumnSanitizesToSafeIdentifier() {
$this->assertSame('foobar23', QueryHelper::prepareColumn('Foo Bar!23'));
$this->assertSame('user_id', QueryHelper::prepareColumn('user_id'));
$this->assertSame('droptable', QueryHelper::prepareColumn('drop;table'));
}
public function testPrepareArrayBuildsColumnsPlaceholdersAndData() {
$result = QueryHelper::prepareArray(array('name' => 'x', 'age' => 5));
$this->assertSame('`name`,`age`', $result['columns']);
$this->assertSame('?,?', $result['placeholder']);
$this->assertSame(array('x', 5), $result['data']);
$this->assertSame('`name` = ?,`age` = ?', $result['update']);
}
public function testPrepareArrayJsonEncodesArrayValues() {
$result = QueryHelper::prepareArray(array('tags' => array(1, 2, 3)));
$this->assertSame('[1,2,3]', $result['data'][0]);
}
public function testPrepareArrayNormalizesNullValues() {
$result = QueryHelper::prepareArray(array('a' => null, 'b' => 'null'));
$this->assertNull($result['data'][0]);
$this->assertNull($result['data'][1]);
}
public function testPrepareArraySanitizesColumnNames() {
$result = QueryHelper::prepareArray(array('na me!' => 'v'));
$this->assertSame('`name`', $result['columns']);
}
}