justReturn(['primary-menu' => 'Hauptmenü']); Functions\expect('wp_create_nav_menu')->never(); $ability = new MenuCreateAbility(FakeChangeLog::forbidden()); $result = $ability->execute(['name' => 'Neu', 'location' => 'nope']); self::assertToolError($result, 'validation_failed'); self::assertStringContainsString('primary-menu', $result->get_error_message()); } public function testExistingNameIsAValidationError(): void { Functions\when('wp_create_nav_menu')->justReturn( new WP_Error('menu_exists', 'Der Menüname existiert bereits.') ); $result = (new MenuCreateAbility(FakeChangeLog::forbidden()))->execute(['name' => 'Hauptmenü']); self::assertToolError($result, 'validation_failed'); } public function testCreatesAndAssignsTheLocation(): void { Functions\when('get_registered_nav_menus')->justReturn(['primary-menu' => 'Hauptmenü']); Functions\expect('wp_create_nav_menu')->once()->with('Neu')->andReturn(8); Functions\when('get_nav_menu_locations')->justReturn(['footer-menu' => 2]); Functions\expect('set_theme_mod')->once()->with( 'nav_menu_locations', ['footer-menu' => 2, 'primary-menu' => 8] ); Functions\expect('wp_get_nav_menu_items')->once()->with(8)->andReturn([]); $log = new FakeChangeLog(5); $result = (new MenuCreateAbility($log))->execute(['name' => 'Neu', 'location' => 'primary-menu']); self::assertSame(8, $result['menu_id']); // Trial: the first lit/menu-set-items needs no lit/menu-get just for the lock. self::assertSame(\LIT\MCP\Abilities\Rev::ofMenu([]), $result['menu_rev']); self::assertContains('menu_rev', (new MenuCreateAbility($log))->outputSchema()['required']); self::assertSame('created', $result['changed'][0]['action']); self::assertSame(5, $result['log_id']); $log->assertRecorded([ 'ability' => 'lit/menu-create', 'object_type' => 'nav_menu', 'object_id' => '8', 'summary' => 'Menü "Neu" angelegt (Position primary-menu)', ]); } public function testPermissionNeedsThemeOptionRights(): void { Functions\when('current_user_can')->justReturn(false); $ability = new MenuCreateAbility(FakeChangeLog::forbidden()); self::assertToolError($ability->permission(['name' => 'Neu']), 'forbidden'); } }