fix: log partial menu writes; describe that the link gate covers new items only

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
This commit is contained in:
2026-09-26 01:26:40 +02:00
co-authored by Claude Opus 5.5
parent ff0da9f406
commit b3c9109e47
2 changed files with 33 additions and 3 deletions
@@ -204,7 +204,22 @@ final class MenuSetItemsAbilityTest extends TestCase
$writer = Mockery::mock(MenuWriter::class);
$writer->allows('plan')->andReturn(['errors' => [], 'removals' => [], 'warnings' => []]);
$writer->expects('apply')->andThrow(new WriteFailed('Menü nicht gespeichert.', true));
$ability = new MenuSetItemsAbility($writer, new MenuOperations(), Mockery::mock(ChangeLog::class));
$log = Mockery::mock(ChangeLog::class);
$log->shouldNotReceive('recordPartial');
$ability = new MenuSetItemsAbility($writer, new MenuOperations(), $log);
$this->expectException(WriteFailed::class);
$ability->execute(['menu_id' => 3, 'items' => [['id' => 10]]]);
}
public function testAPartialWriteIsLoggedAsPartial(): void
{
$writer = Mockery::mock(MenuWriter::class);
$writer->allows('plan')->andReturn(['errors' => [], 'removals' => [], 'warnings' => []]);
$writer->expects('apply')->andThrow(new WriteFailed('Menü nicht gespeichert.', false));
$log = Mockery::mock(ChangeLog::class);
$log->expects('recordPartial')->with('lit/menu-set-items', 'nav_menu', '3', Mockery::type('string'));
$ability = new MenuSetItemsAbility($writer, new MenuOperations(), $log);
$this->expectException(WriteFailed::class);
$ability->execute(['menu_id' => 3, 'items' => [['id' => 10]]]);
@@ -249,5 +264,6 @@ final class MenuSetItemsAbilityTest extends TestCase
self::assertStringContainsString('confirm: true', $ability->description());
self::assertStringContainsString('nur nötig', $ability->description());
self::assertStringContainsString('CSS-Klassen', $ability->description());
self::assertStringContainsString('nur für neu verlinkte Einträge', $ability->description());
}
}