diff --git a/README.txt b/README.txt index ec14e63..0d242ca 100644 --- a/README.txt +++ b/README.txt @@ -4,7 +4,7 @@ Tags: woocommerce, discount, email, shipping, coupon Requires at least: 5.8 Tested up to: 7.1 Requires PHP: 7.4 -Stable tag: 1.4.6 +Stable tag: 1.5.0 WC requires at least: 6.0 WC tested up to: 11.1.0 License: GPLv2 or later diff --git a/tests/smoke.php b/tests/smoke.php index 0ad08be..8acd4a1 100644 --- a/tests/smoke.php +++ b/tests/smoke.php @@ -238,6 +238,55 @@ wc_edm_is( apply_filters( 'wpmgr_menu_title', 'Manager' ) ); +// The filter above proves this plugin CLAIMS the label. It does not prove the +// page is registered under that parent, and those are different failures: the +// menu said Nolimit while this plugin was still absent from it. +// +// Loaded and invoked by hand because the admin menu is only built in an admin +// request and these run under WP-CLI, where is_admin() is false and +// class-admin.php is therefore never included. That makes this a reduced +// repro, so it asserts the loading half separately below rather than trusting +// that the by-hand path matches the real one. +require_once ABSPATH . 'wp-admin/includes/plugin.php'; +require_once WC_EDM_PLUGIN_DIR . 'includes/shared-menu.php'; +require_once WC_EDM_PLUGIN_DIR . 'includes/class-admin.php'; + +wp_set_current_user( 1 ); +global $menu, $submenu, $admin_page_hooks; +$menu = array(); +$submenu = array(); +$admin_page_hooks = array(); + +$wc_edm_admin = new WC_EDM_Admin(); +$wc_edm_admin->register_menu(); + +wc_edm_ok( + 'the parent Nolimit menu exists', + isset( $admin_page_hooks[ WPMGR_MENU_SLUG ] ), + 'wpmgr_ensure_menu() did not register it' +); + +$wc_edm_pages = isset( $submenu[ WPMGR_MENU_SLUG ] ) + ? wp_list_pluck( $submenu[ WPMGR_MENU_SLUG ], 2 ) + : array(); +wc_edm_ok( + 'and this plugin has a page under it', + in_array( WC_EDM_Admin::PAGE_SLUG, $wc_edm_pages, true ), + 'pages found: ' . ( $wc_edm_pages ? implode( ', ', $wc_edm_pages ) : 'none' ) +); + +// The other half: the by-hand require above would pass even if the plugin +// never loaded the file in a real admin request. This is the assertion that +// covers that, and it is the half a reduced repro always omits. +wc_edm_ok( + 'and the plugin itself loads the shared menu file in admin', + false !== strpos( + file_get_contents( WC_EDM_PLUGIN_FILE ), + "'includes/shared-menu.php'," + ), + 'it is not in the is_admin() branch of includes(), so nothing would define wpmgr_ensure_menu()' +); + // includes/shared-menu.php is byte-identical in all five plugins, and which // copy a site loads is decided by activation order. Editing it here would make // a site with three of five updated show one label or another depending on who diff --git a/woocommerce-email-discount-manager.php b/woocommerce-email-discount-manager.php index 4663e76..e65dbb5 100644 --- a/woocommerce-email-discount-manager.php +++ b/woocommerce-email-discount-manager.php @@ -4,7 +4,7 @@ * Plugin URI: https://gitea.nolimit.dk/kw/woo-discount-manager * Update URI: https://gitea.nolimit.dk/kw/nolimit-discounts-dist * Description: Apply discounts and show/hide shipping methods based on the customer's email address (full address, domain or partial match). - * Version: 1.4.6 + * Version: 1.5.0 * Author: Kristian Wind * Author URI: https://gitea.nolimit.dk/kw * License: GPL-2.0-or-later @@ -28,7 +28,7 @@ if ( ! defined( 'ABSPATH' ) ) { exit; } -define( 'WC_EDM_VERSION', '1.4.6' ); +define( 'WC_EDM_VERSION', '1.5.0' ); define( 'WC_EDM_PLUGIN_FILE', __FILE__ ); define( 'WC_EDM_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'WC_EDM_PLUGIN_URL', plugin_dir_url( __FILE__ ) );