From 7717186022ab6acdcc2cf76a734c8ba7551a506b Mon Sep 17 00:00:00 2001 From: peptiderepo Date: Thu, 16 Apr 2026 16:54:38 +0700 Subject: [PATCH] fix(admin): load delegate classes from orchestrator + add WP stubs for tests The admin refactor split introduced delegate classes that the orchestrator instantiates in its constructor. CI failed because tests require the orchestrator directly without going through the plugin loader. Fix: add require_once for all delegate files at the top of the orchestrator, and add missing WP function stubs to the test bootstrap. Co-Authored-By: Claude Opus 4.6 --- admin/class-peptide-news-admin.php | 10 ++++++ tests/bootstrap.php | 49 ++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/admin/class-peptide-news-admin.php b/admin/class-peptide-news-admin.php index 20ad3e0..135576c 100755 --- a/admin/class-peptide-news-admin.php +++ b/admin/class-peptide-news-admin.php @@ -17,6 +17,16 @@ declare( strict_types=1 ); * @see Peptide_News_Admin_Settings_Page — Settings page + log viewer * @see Peptide_News_Admin_Dashboard_Pages — Dashboard/articles/costs pages */ + +// Load delegate classes that this orchestrator depends on. +require_once __DIR__ . '/class-pn-admin-assets.php'; +require_once __DIR__ . '/class-pn-admin-menu.php'; +require_once __DIR__ . '/class-pn-admin-field-renderers.php'; +require_once __DIR__ . '/class-pn-admin-settings.php'; +require_once __DIR__ . '/class-pn-admin-log-viewer.php'; +require_once __DIR__ . '/class-pn-admin-settings-page.php'; +require_once __DIR__ . '/class-pn-admin-dashboard-pages.php'; + class Peptide_News_Admin { /** @var string Plugin name/slug */ diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 17bcda3..aab0338 100755 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -300,6 +300,55 @@ if ( ! function_exists( 'selected' ) ) { return $result; } } +if ( ! function_exists( 'checked' ) ) { + function checked( $checked, $current = true, $echo = true ) { + $result = (string) $checked === (string) $current ? ' checked="checked"' : ''; + if ( $echo ) { + echo $result; + } + return $result; + } +} +if ( ! function_exists( 'wp_enqueue_style' ) ) { + function wp_enqueue_style( $handle, $src = '', $deps = array(), $ver = false, $media = 'all' ) { + return true; + } +} +if ( ! function_exists( 'wp_enqueue_script' ) ) { + function wp_enqueue_script( $handle, $src = '', $deps = array(), $ver = false, $args = array() ) { + return true; + } +} +if ( ! function_exists( 'wp_localize_script' ) ) { + function wp_localize_script( $handle, $object_name, $l10n ) { + return true; + } +} +if ( ! function_exists( 'add_menu_page' ) ) { + function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $callback = '', $icon_url = '', $position = null ) { + return $menu_slug; + } +} +if ( ! function_exists( 'add_submenu_page' ) ) { + function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $callback = '', $position = null ) { + return $menu_slug; + } +} +if ( ! function_exists( 'register_setting' ) ) { + function register_setting( $option_group, $option_name, $args = array() ) { + return true; + } +} +if ( ! function_exists( 'add_settings_section' ) ) { + function add_settings_section( $id, $title, $callback, $page, $args = array() ) { + return true; + } +} +if ( ! function_exists( 'add_settings_field' ) ) { + function add_settings_field( $id, $title, $callback, $page, $section = 'default', $args = array() ) { + return true; + } +} // Cost tracker provides calculate_cost(), budget checks used by tests. require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-cost-tracker.php';