tmpDir = sys_get_temp_dir().'/snipeit-restore-picker-'.uniqid(); mkdir($this->tmpDir, 0755, true); } protected function tearDown(): void { array_map('unlink', glob($this->tmpDir.'/*') ?: []); rmdir($this->tmpDir); parent::tearDown(); } private function makeBinary(string $name): void { touch($this->tmpDir.\DIRECTORY_SEPARATOR.$name.(\DIRECTORY_SEPARATOR === '\\' ? '.exe' : '')); } public function test_mariadb_driver_prefers_mariadb_binary(): void { $this->makeBinary('mysql'); $this->makeBinary('mariadb'); $picked = RestoreFromBackup::pickDbClientBinary('mariadb', $this->tmpDir); $this->assertSame($this->tmpDir.\DIRECTORY_SEPARATOR.'mariadb'.(\DIRECTORY_SEPARATOR === '\\' ? '.exe' : ''), $picked); } public function test_mysql_driver_prefers_mysql_binary(): void { $this->makeBinary('mysql'); $this->makeBinary('mariadb'); $picked = RestoreFromBackup::pickDbClientBinary('mysql', $this->tmpDir); $this->assertSame($this->tmpDir.\DIRECTORY_SEPARATOR.'mysql'.(\DIRECTORY_SEPARATOR === '\\' ? '.exe' : ''), $picked); } public function test_mariadb_driver_falls_back_to_mysql_binary_when_mariadb_missing(): void { $this->makeBinary('mysql'); $picked = RestoreFromBackup::pickDbClientBinary('mariadb', $this->tmpDir); $this->assertSame($this->tmpDir.\DIRECTORY_SEPARATOR.'mysql'.(\DIRECTORY_SEPARATOR === '\\' ? '.exe' : ''), $picked); } public function test_mysql_driver_falls_back_to_mariadb_binary_when_mysql_missing(): void { $this->makeBinary('mariadb'); $picked = RestoreFromBackup::pickDbClientBinary('mysql', $this->tmpDir); $this->assertSame($this->tmpDir.\DIRECTORY_SEPARATOR.'mariadb'.(\DIRECTORY_SEPARATOR === '\\' ? '.exe' : ''), $picked); } public function test_returns_null_when_no_binary_exists(): void { $picked = RestoreFromBackup::pickDbClientBinary('mysql', $this->tmpDir); $this->assertNull($picked); } public function test_trailing_separator_on_path_does_not_double(): void { $this->makeBinary('mariadb'); $picked = RestoreFromBackup::pickDbClientBinary('mariadb', $this->tmpDir.\DIRECTORY_SEPARATOR); $this->assertSame($this->tmpDir.\DIRECTORY_SEPARATOR.'mariadb'.(\DIRECTORY_SEPARATOR === '\\' ? '.exe' : ''), $picked); } public function test_config_exposes_mariadb_connection_with_correct_driver(): void { $this->assertSame('mariadb', config('database.connections.mariadb.driver')); } public function test_skip_ssl_is_absent_from_dump_config_by_default(): void { // Regression: spatie's processExtraDumpParameters iterates the dump // config and treats a `false` value as "call the setter with no args", // which for setSkipSsl(bool $x = true) silently sets skipSsl to TRUE. // The key must be absent from the array (not set to false) when opted // out, matching the old add_extra_option gating shape. $this->assertArrayNotHasKey('skip_ssl', config('database.connections.mysql.dump')); $this->assertArrayNotHasKey('skip_ssl', config('database.connections.mariadb.dump')); $this->assertArrayNotHasKey('add_extra_option', config('database.connections.mysql.dump')); $this->assertArrayNotHasKey('add_extra_option', config('database.connections.mariadb.dump')); } }