conflictResolver = new ConflictResolver(); $this->conflictResolver->init(); global $wp_filter; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps $this->wpFilter = $wp_filter; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps } public function testItResolvesRouterUrlQueryParametersConflict() { expect(!empty($this->wpFilter['mailpoet_conflict_resolver_router_url_query_parameters']))->true(); // it should unset action & endpoint GET variables $_GET['endpoint'] = $_GET['action'] = $_GET['test'] = 'test'; do_action('mailpoet_conflict_resolver_router_url_query_parameters'); expect(empty($_GET['endpoint']))->true(); expect(empty($_GET['action']))->true(); expect(empty($_GET['test']))->false(); } public function testItUnloadsAllStylesFromLocationsNotOnPermittedList() { expect(!empty($this->wpFilter['mailpoet_conflict_resolver_styles']))->true(); // grab a random permitted style location $permittedAssetLocation = $this->conflictResolver->permittedAssetsLocations['styles'][array_rand($this->conflictResolver->permittedAssetsLocations['styles'], 1)]; // enqueue styles wp_enqueue_style('select2', '/wp-content/some/offending/plugin/select2.css'); wp_enqueue_style('permitted_style', trim($permittedAssetLocation, '^')); $this->conflictResolver->resolveStylesConflict(); do_action('wp_print_styles'); do_action('admin_print_styles'); do_action('admin_print_footer_scripts'); do_action('admin_footer'); global $wp_styles; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps // it should dequeue all styles except those found on the list of permitted locations expect(in_array('select2', $wp_styles->queue))->false(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps expect(in_array('permitted_style', $wp_styles->queue))->true(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps } public function testItWhitelistsStyles() { wp_enqueue_style('select2', '/wp-content/some/offending/plugin/select2.css'); $wp = new WPFunctions; $wp->addFilter( 'mailpoet_conflict_resolver_whitelist_style', function($whitelistedStyles) { $whitelistedStyles[] = '^/wp-content/some/offending/plugin'; return $whitelistedStyles; } ); $this->conflictResolver->resolveStylesConflict(); do_action('wp_print_styles'); do_action('admin_print_styles'); do_action('admin_print_footer_scripts'); do_action('admin_footer'); global $wp_styles; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps // it should not dequeue select2 style expect(in_array('select2', $wp_styles->queue))->true(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps } public function testItUnloadsAllScriptsFromLocationsNotOnPermittedList() { expect(!empty($this->wpFilter['mailpoet_conflict_resolver_scripts']))->true(); // grab a random permitted script location $permittedAssetLocation = $this->conflictResolver->permittedAssetsLocations['scripts'][array_rand($this->conflictResolver->permittedAssetsLocations['scripts'], 1)]; // enqueue scripts wp_enqueue_script('select2', '/wp-content/some/offending/plugin/select2.js'); wp_enqueue_script('some_random_script', 'http://example.com/some_script.js', [], null, $inFooter = true); // test inside footer wp_enqueue_script('permitted_script', trim($permittedAssetLocation, '^')); $this->conflictResolver->resolveScriptsConflict(); do_action('wp_print_scripts'); do_action('admin_print_footer_scripts'); global $wp_scripts; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps // it should dequeue all scripts except those found on the list of permitted locations expect(in_array('select2', $wp_scripts->queue))->false(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps expect(in_array('some_random_script', $wp_scripts->queue))->false(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps expect(in_array('permitted_script', $wp_scripts->queue))->true(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps } public function testItWhitelistsScripts() { wp_enqueue_script('select2', '/wp-content/some/offending/plugin/select2.js'); $wp = new WPFunctions; $wp->addFilter( 'mailpoet_conflict_resolver_whitelist_script', function($whitelistedScripts) { $whitelistedScripts[] = '^/wp-content/some/offending/plugin'; return $whitelistedScripts; } ); $this->conflictResolver->resolveStylesConflict(); do_action('wp_print_scripts'); do_action('admin_print_footer_scripts'); global $wp_scripts; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps // it should not dequeue select2 script expect(in_array('select2', $wp_scripts->queue))->true(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps } public function _after() { } }