Completed
Push — renovate/webpack-cli-4.x ( d6eb3b...d1283c )
by
unknown
172:37 queued 163:05
created

Test_Jetpack_Admin_Menu   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 144
Duplicated Lines 13.19 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 19
loc 144
rs 10
c 0
b 0
f 0
wmc 5
lcom 1
cbo 2

5 Methods

Rating   Name   Duplication   Size   Complexity  
A wpSetUpBeforeClass() 7 7 1
A setUp() 12 12 1
A test_add_tools_menu() 0 24 1
A test_add_jetpack_menu() 0 13 1
A test_add_wp_admin_menu() 0 16 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

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
	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