expects('deleteCreatedTerms')->andThrow(new RuntimeException('term 15 bleibt')); Functions\when('wp_delete_post')->alias(static function (): never { throw new RuntimeException('delete_post hook kaputt'); }); $log = FakeChangeLog::partialsOnly(); $draft = new NewDraft($writer, $log, 'lit/content-create', 'page'); try { $draft->discard(42, new RuntimeException('layout kaputt'), 'Grund für den Client.'); self::fail('WriteFailed expected'); } catch (WriteFailed $e) { self::assertFalse($e->rolledBack); self::assertSame(42, $e->postId); self::assertSame('Grund für den Client.', $e->reason); self::assertSame( 'Writing new post 42 failed after the insert: layout kaputt; rollback: term 15 bleibt; ' . 'draft 42 could not be deleted: delete_post hook kaputt [rollback incomplete]', $e->getMessage() ); } $log->assertPartials([ 'ability' => 'lit/content-create', 'object_type' => 'page', 'object_id' => '42', 'summary' => 'Entwurf 42: Anlegen nur teilweise zurückgenommen', ]); } public function testACleanDiscardIsRolledBackWithTheGivenReason(): void { $writer = Mockery::mock(PostWriter::class); $writer->expects('deleteCreatedTerms'); Functions\expect('wp_delete_post')->once()->with(42, true)->andReturn(true); $log = FakeChangeLog::forbidden(); $draft = new NewDraft($writer, $log, 'lit/content-create', 'page'); try { $draft->discard(42, new RuntimeException('meta kaputt'), NewDraft::REASON_EXTRAS); self::fail('WriteFailed expected'); } catch (WriteFailed $e) { self::assertTrue($e->rolledBack); self::assertSame(NewDraft::REASON_EXTRAS, $e->reason); } } /** lit/library-save reuses the transaction without a PostWriter and names its entry (ruling P6). */ public function testWithoutAWriterOnlyTheEntryIsDeletedAndPartialsNameTheEntry(): void { Functions\when('wp_delete_post')->justReturn(false); $log = FakeChangeLog::partialsOnly(); $draft = new NewDraft(null, $log, 'lit/library-save', 'et_pb_layout', 'Bibliothekseintrag'); try { $draft->discard(2001, new RuntimeException('layout kaputt'), 'Grund.'); self::fail('WriteFailed expected'); } catch (WriteFailed $e) { self::assertFalse($e->rolledBack); self::assertSame(2001, $e->postId); } $log->assertPartials([ 'ability' => 'lit/library-save', 'object_type' => 'et_pb_layout', 'object_id' => '2001', 'summary' => 'Bibliothekseintrag 2001: Anlegen nur teilweise zurückgenommen', ]); } }