rolledBack); self::assertSame($cause, $failure->getPrevious()); self::assertStringContainsString('meta kaputt', $failure->getMessage()); self::assertSame('lit_write_failed', $failure->toError()->get_error_code()); } public function testRolledBackHintReplacesTheDefaultHintOfWriteFailedOnly(): void { $clean = new WriteFailed('x', true, rolledBackHint: 'Erst neu lesen.'); $partial = new WriteFailed('x', false, rolledBackHint: 'Erst neu lesen.'); self::assertSame('Erst neu lesen.', $clean->toError()->get_error_data()['hint']); self::assertNotSame('Erst neu lesen.', $partial->toError()->get_error_data()['hint']); } public function testIncompleteRollbackMapsToPartialWriteWithTheIds(): void { $error = (new WriteFailed('Felder konnten nicht gespeichert werden.', false, 5, 811))->toError(); self::assertSame('lit_partial_write', $error->get_error_code()); self::assertSame(5, $error->get_error_data()['post_id']); self::assertSame(811, $error->get_error_data()['revision_id']); } public function testIncompleteRollbackCanDescribeItsOwnStateHintAndDetails(): void { $error = (new WriteFailed( 'Menü nicht gespeichert.', false, state: 'Das Menü ist teilweise geändert.', hint: 'Mit lit/menu-get prüfen.', details: ['menu_id' => 3] ))->toError(); self::assertSame('lit_partial_write', $error->get_error_code()); self::assertStringContainsString('Das Menü ist teilweise geändert.', $error->get_error_message()); self::assertStringNotContainsString('Entwurf', $error->get_error_message()); self::assertSame('Mit lit/menu-get prüfen.', $error->get_error_data()['hint']); self::assertSame(3, $error->get_error_data()['menu_id']); } public function testCleanRollbackKeepsItsDetails(): void { $error = (new WriteFailed('Nicht übernommen.', true, details: ['backup_id' => 88]))->toError(); self::assertSame('lit_write_failed', $error->get_error_code()); self::assertSame(88, $error->get_error_data()['backup_id']); self::assertStringContainsString('"backup_id":88', $error->get_error_message()); } }