core = \Mockery::mock( '\WPALLSTARS\PluginStarterTemplate\Core' ); // Add expectation for get_plugin_version BEFORE Admin is instantiated. $this->core->shouldReceive( 'get_plugin_version' )->andReturn( TEST_VERSION ); // Expect the action hook to be added BEFORE Admin is instantiated. \WP_Mock::expectActionAdded( 'admin_enqueue_scripts', array( \Mockery::any(), 'enqueue_admin_assets' ) ); // Instantiate the Admin class (this triggers the constructor and add_hooks). $this->admin = new Admin( $this->core ); } /** * Tear down test environment. * * @return void */ public function tearDown(): void { WP_Mock::tearDown(); parent::tearDown(); } /** * Test constructor. * * @return void */ public function test_constructor() { // Verify that the constructor initializes hooks. $this->assertInstanceOf( Admin::class, $this->admin ); } /** * Test the enqueue_admin_assets method. * * @return void */ public function test_enqueue_admin_assets(): void { // Define the PHPUNIT_RUNNING constant if ( ! defined( 'PHPUNIT_RUNNING' ) ) { define( 'PHPUNIT_RUNNING', true ); } // Set up the superglobal for the test $_GET['page'] = 'wp_plugin_starter_template_settings'; // Mock wp_unslash function WP_Mock::userFunction('wp_unslash', [ 'args' => ['wp_plugin_starter_template_settings'], 'return' => 'wp_plugin_starter_template_settings', ]); // Mock wp_enqueue_style WP_Mock::userFunction('wp_enqueue_style', [ 'times' => 1, 'args' => [ 'wpst-admin-styles', 'http://example.org/wp-content/plugins/wp-plugin-starter-template/admin/css/admin-styles.css', [], '1.0.0', ], ]); // Mock wp_enqueue_script WP_Mock::userFunction('wp_enqueue_script', [ 'times' => 1, 'args' => [ 'wpst-admin-script', 'http://example.org/wp-content/plugins/wp-plugin-starter-template/admin/js/admin-scripts.js', ['jquery'], '1.0.0', true, ], ]); // Mock admin_url WP_Mock::userFunction('admin_url', [ 'args' => ['admin-ajax.php'], 'return' => 'http://example.com/wp-admin/admin-ajax.php', ]); // Mock wp_create_nonce WP_Mock::userFunction('wp_create_nonce', [ 'args' => ['wpst_admin_nonce'], 'return' => 'test_nonce_123', ]); // Mock wp_localize_script WP_Mock::userFunction('wp_localize_script', [ 'times' => 1, 'args' => [ 'wpst-admin-script', 'wpst_admin_data', [ 'ajax_url' => 'http://example.com/wp-admin/admin-ajax.php', 'nonce' => 'test_nonce_123', ], ], ]); // Call the method $this->admin->enqueue_admin_assets(); // If we get here without exceptions, the test passes $this->assertTrue(true); } }