<?php use \WPDesk\Notice\AjaxHandler; use \WPDesk\Notice\PermanentDismissibleNotice; class TestAjaxHandler extends WP_UnitTestCase { const ASSETS_URL = 'http://test.com/test/assetes/'; const NOTICE_NAME = 'test_notice_name'; const WP_DEFAULT_PRIORITY = 10; public function testHooksWithAssetsURL() { $ajaxHandler = new AjaxHandler(self::ASSETS_URL); $ajaxHandler->hooks(); $this->assertEquals( self::WP_DEFAULT_PRIORITY, has_action('admin_enqueue_scripts', [$ajaxHandler, 'enqueueAdminScripts']) ); $this->assertEquals( self::WP_DEFAULT_PRIORITY, has_action('wp_ajax_wpdesk_notice_dismiss', [$ajaxHandler, 'processAjaxNoticeDismiss']) ); } public function testHooksWithoutAssetsURL() { $ajaxHandler = new AjaxHandler(); $ajaxHandler->hooks(); $this->assertEquals( self::WP_DEFAULT_PRIORITY, has_action('admin_head', [$ajaxHandler, 'addScriptToAdminHead']) ); $this->assertEquals( self::WP_DEFAULT_PRIORITY, has_action('wp_ajax_wpdesk_notice_dismiss', [$ajaxHandler, 'processAjaxNoticeDismiss']) ); } public function testEnqueueAdminScripts() { $ajaxHandler = new AjaxHandler(self::ASSETS_URL); $ajaxHandler->hooks(); do_action('admin_enqueue_scripts'); $registeredScripts = wp_scripts()->registered; $this->assertArrayHasKey('wpdesk_notice', $registeredScripts, 'Script not registered!'); $this->assertEquals( self::ASSETS_URL . 'js/notice.js', $registeredScripts['wpdesk_notice']->src, 'Script src is invalid!' ); } public function testAddScriptToAdminHead() { $ajaxHandler = new AjaxHandler(); $ajaxHandler->hooks(); $this->expectOutputString('<script type="text/javascript"> jQuery(document).on("click",".notice-dismiss",function(){var a=jQuery(this).closest("div.notice").data("notice-name");var b=jQuery(this).closest("div.notice").data("source");if(""!==a){jQuery.ajax({url:ajaxurl,type:"post",data:{action:"wpdesk_notice_dismiss",notice_name:a,source:b},success:function(c){}})}});jQuery(document).on("click",".notice-dismiss-link",function(){jQuery(this).closest("div.notice").data("source",jQuery(this).data("source"));jQuery(this).closest("div.notice").find(".notice-dismiss").click()});</script> ' ); $ajaxHandler->addScriptToAdminHead(); } public function testProcessAjaxNoticeDismiss() { $_POST[AjaxHandler::POST_FIELD_NOTICE_NAME] = self::NOTICE_NAME; $ajaxHandler = new AjaxHandler(self::ASSETS_URL); $ajaxHandler->processAjaxNoticeDismiss(); $this->assertEquals( PermanentDismissibleNotice::OPTION_VALUE_DISMISSED, get_option(PermanentDismissibleNotice::OPTION_NAME_PREFIX . self::NOTICE_NAME) ); } }