Completed
Push — kraftbj-patch-2 ( f1a4bb...ba1272 )
by
unknown
25:04 queued 15:38
created

Test_Jetpack_Admin_Menu::test_add_posts_menu()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 7
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 7
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Tests for Jetpack_Admin_Menu class.
4
 *
5
 * @package automattic/jetpack
6
 */
7
8
use Automattic\Jetpack\Dashboard_Customizations\Jetpack_Admin_Menu;
9
use Automattic\Jetpack\Status;
10
11
require_jetpack_file( 'modules/masterbar/admin-menu/class-jetpack-admin-menu.php' );
12
require_jetpack_file( 'tests/php/modules/masterbar/data/admin-menu.php' );
13
14
/**
15
 * Class Test_Jetpack_Admin_Menu.
16
 *
17
 * @coversDefaultClass Automattic\Jetpack\Dashboard_Customizations\Jetpack_Admin_Menu
18
 */
19
class Test_Jetpack_Admin_Menu extends WP_UnitTestCase {
20
21
	/**
22
	 * Menu data fixture.
23
	 *
24
	 * @var array
25
	 */
26
	public static $menu_data;
27
28
	/**
29
	 * Submenu data fixture.
30
	 *
31
	 * @var array
32
	 */
33
	public static $submenu_data;
34
35
	/**
36
	 * Test domain.
37
	 *
38
	 * @var string
39
	 */
40
	public static $domain;
41
42
	/**
43
	 * Whether this testsuite is run on WP.com.
44
	 *
45
	 * @var bool
46
	 */
47
	public static $is_wpcom;
48
49
	/**
50
	 * Admin menu instance.
51
	 *
52
	 * @var Jetpack_Admin_Menu
53
	 */
54
	public static $admin_menu;
55
56
	/**
57
	 * Mock user ID.
58
	 *
59
	 * @var int
60
	 */
61
	private static $user_id = 0;
62
63
	/**
64
	 * Create shared fixtures.
65
	 *
66
	 * @param WP_UnitTest_Factory $factory Fixture factory.
67
	 */
68 View Code Duplication
	public static function wpSetUpBeforeClass( $factory ) {
69
		static::$domain  = ( new Status() )->get_site_suffix();
70
		static::$user_id = $factory->user->create( array( 'role' => 'administrator' ) );
0 ignored issues
show
Bug introduced by
Since $user_id is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $user_id to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
71
72
		static::$menu_data    = get_menu_fixture();
73
		static::$submenu_data = get_submenu_fixture();
74
	}
75
76
	/**
77
	 * Set up data.
78
	 */
79 View Code Duplication
	public function setUp() {
80
		parent::setUp();
81
		global $menu, $submenu;
82
83
		// Initialize in setUp so it registers hooks for every test.
84
		static::$admin_menu = Jetpack_Admin_Menu::get_instance();
85
86
		$menu    = static::$menu_data;
87
		$submenu = static::$submenu_data;
88
89
		wp_set_current_user( static::$user_id );
0 ignored issues
show
Bug introduced by
Since $user_id is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $user_id to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
90
	}
91
92
	/**
93
	 * Tests add_jetpack_menu
94
	 *
95
	 * @covers ::add_jetpack_menu
96
	 */
97 View Code Duplication
	public function test_add_jetpack_menu() {
98
		global $submenu;
99
100
		static::$admin_menu->add_jetpack_menu();
101
102
		$domains_submenu_item = array(
103
			'Scan',
104
			'manage_options',
105
			'https://wordpress.com/scan/' . static::$domain,
106
			'Scan',
107
		);
108
		$this->assertContains( $domains_submenu_item, $submenu[ 'https://wordpress.com/activity-log/' . static::$domain ] );
109
	}
110
111
	/**
112
	 * Tests add_tools_menu
113
	 *
114
	 * @covers ::add_tools_menu
115
	 */
116
	public function test_add_tools_menu() {
117
		global $submenu;
118
119
		$slug = 'https://wordpress.com/marketing/tools/' . static::$domain;
120
		static::$admin_menu->add_tools_menu( false, false );
121
122
		// Check Import menu always links to WP Admin.
123
		$import_submenu_item = array(
124
			'Import',
125
			'import',
126
			'import.php',
127
			'Import',
128
		);
129
		$this->assertContains( $import_submenu_item, $submenu[ $slug ] );
130
131
		// Check Export menu always links to WP Admin.
132
		$export_submenu_item = array(
133
			'Export',
134
			'export',
135
			'export.php',
136
			'Export',
137
		);
138
		$this->assertContains( $export_submenu_item, $submenu[ $slug ] );
139
	}
140
141
	/**
142
	 * Tests add_wp_admin_menu
143
	 *
144
	 * @covers ::add_wp_admin_menu
145
	 */
146
	public function test_add_wp_admin_menu() {
147
		global $menu;
148
149
		static::$admin_menu->add_wp_admin_menu();
150
151
		$wp_admin_menu_item = array(
152
			'WP Admin',
153
			'read',
154
			'index.php',
155
			'WP Admin',
156
			'menu-top toplevel_page_index',
157
			'toplevel_page_index',
158
			'dashicons-wordpress-alt',
159
		);
160
		$this->assertSame( end( $menu ), $wp_admin_menu_item );
161
	}
162
163
	/**
164
	 * Tests add_appearance_menu
165
	 *
166
	 * @covers ::add_appearance_menu
167
	 */
168
	public function test_add_appearance_menu() {
169
		global $submenu;
170
171
		$slug = 'https://wordpress.com/themes/' . static::$domain;
172
		static::$admin_menu->add_appearance_menu( false, false );
173
174
		// Check Customize menu always links to WP Admin.
175
		$customize_submenu_item = array(
176
			'Customize',
177
			'customize',
178
			'customize.php',
179
			'Customize',
180
		);
181
		$this->assertContains( $customize_submenu_item, $submenu[ $slug ] );
182
	}
183
184
	/**
185
	 * Tests add_posts_menu
186
	 *
187
	 * @covers ::add_posts_menu
188
	 */
189 View Code Duplication
	public function test_add_posts_menu() {
190
		global $submenu;
191
192
		$slug = 'https://wordpress.com/posts/' . static::$domain;
193
		static::$admin_menu->add_posts_menu();
194
		$this->assertEmpty( $submenu[ $slug ] );
195
	}
196
197
	/**
198
	 * Tests add_page_menu
199
	 *
200
	 * @covers ::add_page_menu
201
	 */
202 View Code Duplication
	public function test_add_page_menu() {
203
		global $submenu;
204
205
		$slug = 'https://wordpress.com/pages/' . static::$domain;
206
		static::$admin_menu->add_page_menu();
207
		$this->assertEmpty( $submenu[ $slug ] );
208
	}
209
210
	/**
211
	 * Tests add_users_menu
212
	 *
213
	 * @covers ::add_users_menu
214
	 */
215 View Code Duplication
	public function test_add_users_menu() {
216
		global $submenu;
217
218
		$slug = 'https://wordpress.com/people/team/' . static::$domain;
219
		static::$admin_menu->add_users_menu();
220
		$this->assertEmpty( $submenu[ $slug ] );
221
	}
222
223
	/**
224
	 * Tests add_users_menu
225
	 *
226
	 * @covers ::add_feedback_menu
227
	 */
228
	public function add_feedback_menu() {
229
		global $menu;
230
231
		$menu_item = array(
232
			'Feedback',
233
			'edit_posts',
234
			'edit.php?post_type=feedback',
235
			'Feedback',
236
			'menu-top toplevel_page_index',
237
			'toplevel_page_index',
238
			'dashicons-feedback',
239
		);
240
		$this->assertSame( $menu[45], $menu_item );
241
	}
242
243
	/**
244
	 * Tests add_plugins_menu
245
	 *
246
	 * @covers ::add_plugins_menu
247
	 */
248 View Code Duplication
	public function test_add_plugins_menu() {
249
		global $menu;
250
251
		static::$admin_menu->add_plugins_menu( true );
252
253
		// Check Plugins menu always links to Calypso.
254
		$this->assertContains( 'https://wordpress.com/plugins/' . static::$domain, $menu[65] );
255
	}
256
}
257