40 lines
1.5 KiB
PHP
40 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Steuerkram\Models\Beleg;
|
|
|
|
class BelegDeleteUnlinkFailTest extends TestCase
|
|
{
|
|
protected string $testName = 'Test 49: Beleg-Löschung trotz Datei-Permission-Fehler';
|
|
|
|
public function run(): void
|
|
{
|
|
$dir = $this->makeTempDir(\Steuerkram\Config::get('upload_dir') . '/test_49_unlink_fail');
|
|
$file = $dir . '/original.pdf';
|
|
|
|
file_put_contents($file, 'dummy');
|
|
// Schreibschutz auf das Verzeichnis: unlink() der Datei schlägt fehl (Permission denied),
|
|
// genau wie im gemeldeten Fehler auf dem Produktiv-Server.
|
|
chmod($dir, 0500);
|
|
|
|
try {
|
|
$id = Beleg::create([
|
|
'beleg_nr' => 'BLG-TEST-49',
|
|
'filename' => 'original.pdf',
|
|
'storage_path' => 'test_49_unlink_fail/original.pdf',
|
|
'mime_type' => 'application/pdf',
|
|
'file_hash' => 'testhash49',
|
|
'beleg_datum' => '2026-01-01',
|
|
]);
|
|
$this->assertGreaterThan(0, $id, 'Beleg angelegt');
|
|
|
|
$result = Beleg::delete($id);
|
|
$this->assert($result === true, 'delete() liefert true, obwohl unlink() fehlschlägt');
|
|
$this->assert(Beleg::find($id) === false, 'Beleg-Datensatz wurde trotz Datei-Fehler aus der DB gelöscht');
|
|
} finally {
|
|
// Der Schreibschutz muss weg, bevor tearDown() das Verzeichnis abräumt
|
|
chmod($dir, 0755);
|
|
}
|
|
}
|
|
}
|