Completed
Push — add/nested-query-string-suppor... ( 782fd1...8b8479 )
by
unknown
08:17
created

SignatureTest::test_normalized_query_parameters()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
/**
3
 * The SignatureTest class file.
4
 *
5
 * @package automattic/jetpack-connection
6
 */
7
8
namespace Automattic\Jetpack\Connection;
9
10
use PHPUnit\Framework\TestCase;
11
12
/**
13
 * Provides unit tests for the methods in the Jetpack_Signature class.
14
 */
15
class SignatureTest extends TestCase {
16
	/**
17
	 * Tests the Jetpack_Signature->join_with_equal_sign() method.
18
	 *
19
	 * @covers Automattic\Jetpack\Connection\Jetpack_Signature->join_with_equal_sign
20
	 * @dataProvider join_with_equal_sign_data_provider
21
	 *
22
	 * @param string       $name Query string key value.
23
	 * @param string|array $value Associated value for query string key.
24
	 * @param string|array $expected_output The expected output of $signature->join_with_equal_sign.
25
	 */
26
	public function test_join_with_equal_sign( $name, $value, $expected_output ) {
27
		$signature = new \Jetpack_Signature( 'some-secret', 0 );
0 ignored issues
show
Documentation introduced by
'some-secret' is of type string, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
28
		$this->assertEquals( $expected_output, $signature->join_with_equal_sign( $name, $value ) );
29
	}
30
31
	/**
32
	 * Data provider for test_join_with_equal_sign.
33
	 *
34
	 * The test data arrays have the format:
35
	 *    'name'            => The value that the constant will be set to. Null if the constant will not be set.
36
	 *    'value'           => The name of the constant.
37
	 *    'expected_output' => The expected output of Utils::jetpack_api_constant_filter().
38
	 */
39
	public function join_with_equal_sign_data_provider() {
40
		return array(
41
			'string_value'                   =>
42
				array(
43
					'name'            => 'street',
44
					'value'           => '1600 Pennsylvania Ave',
45
					'expected_output' => 'street=1600 Pennsylvania Ave',
46
				),
47
			'array_value'                    =>
48
				array(
49
					'name'            => 'first_names',
50
					'value'           => array( 'Michael', 'Jim', 'Pam' ),
51
					'expected_output' => array( 'first_names[0]=Michael', 'first_names[1]=Jim', 'first_names[2]=Pam' ),
52
				),
53
			'associative_array_value'        =>
54
				array(
55
					'name'            => 'numbers',
56
					'value'           => array(
57
						'one' => 1,
58
						'two' => 2,
59
					),
60
					'expected_output' => array( 'numbers[one]=1', 'numbers[two]=2' ),
61
				),
62
			'nested_array_value'             =>
63
				array(
64
					'name'            => 'numbers',
65
					'value'           => array( array( 0, 1 ), array( 2, 3 ), array( 4, 5 ) ),
66
					'expected_output' => array(
67
						'numbers[0][0]=0',
68
						'numbers[0][1]=1',
69
						'numbers[1][0]=2',
70
						'numbers[1][1]=3',
71
						'numbers[2][0]=4',
72
						'numbers[2][1]=5',
73
					),
74
				),
75
			'nested_associative_array_value' =>
76
				array(
77
					'name'            => 'people',
78
					'value'           => array(
79
						array(
80
							'last_name'  => 'Scott',
81
							'first_name' => 'Michael',
82
							'city'       => 'Boulder',
83
						),
84
						array(
85
							'first_name' => 'Jim',
86
							'state'      => 'Texas',
87
							'last_name'  => 'Halpert',
88
						),
89
					),
90
					// Note: Expected output is sorted.
91
					'expected_output' => array(
92
						'people[0][city]=Boulder',
93
						'people[0][first_name]=Michael',
94
						'people[0][last_name]=Scott',
95
						'people[1][first_name]=Jim',
96
						'people[1][last_name]=Halpert',
97
						'people[1][state]=Texas',
98
					),
99
				),
100
		);
101
	}
102
103
	/**
104
	 * Tests the Jetpack_Signature->normalized_query_parameters() method.
105
	 *
106
	 * @covers Automattic\Jetpack\Connection\Jetpack_Signature->normalized_query_parameters
107
	 * @dataProvider normalized_query_parameters_data_provider
108
	 *
109
	 * @param string       $query_string Query string key value.
110
	 * @param string|array $expected_output The expected output of $signature->normalized_query_parameters.
111
	 */
112
	public function test_normalized_query_parameters( $query_string, $expected_output ) {
113
		$signature = new \Jetpack_Signature( 'some-secret', 0 );
0 ignored issues
show
Documentation introduced by
'some-secret' is of type string, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
114
		$this->assertEquals( $expected_output, $signature->normalized_query_parameters( $query_string ) );
115
	}
116
117
	/**
118
	 * Data provider for test_join_with_equal_sign.
119
	 *
120
	 * The test data arrays have the format:
121
	 *    'name'            => The value that the constant will be set to. Null if the constant will not be set.
122
	 *    'value'           => The name of the constant.
123
	 *    'expected_output' => The expected output of Utils::jetpack_api_constant_filter().
124
	 */
125
	public function normalized_query_parameters_data_provider() {
126
		return array(
127
			'signature_omitted' =>
128
				array(
129
					'query_string'    => 'size=10&signature=super-secret',
130
					'expected_output' => array(
131
						'size=10',
132
					),
133
				),
134
			'query_key_sort'    =>
135
				array(
136
					'query_string'    => 'size=10&highlight_fields%5B0%5D=title&highlight_fields%5B1%5D=content&aggregations%5Btaxonomy_1%5D%5Bterms%5D%5Bfield%5D=taxonomy.xposts.slug_slash_name&aggregations%5Btaxonomy_1%5D%5Bterms%5D%5Bsize%5D=5&fields%5B0%5D=date&fields%5B1%5D=permalink.url.raw&query=journey',
137
					'expected_output' => array(
138
						'query=journey',
139
						// Note that size has been sorted below query.
140
						'size=10',
141
						array(
142
							'aggregations[taxonomy_1][terms][field]=taxonomy.xposts.slug_slash_name',
143
							'aggregations[taxonomy_1][terms][size]=5',
144
						),
145
						array(
146
							'fields[0]=date',
147
							'fields[1]=permalink.url.raw',
148
						),
149
						// Note that aggregations has been sorted below aggregations and fields.
150
						array(
151
							'highlight_fields[0]=title',
152
							'highlight_fields[1]=content',
153
						),
154
					),
155
				),
156
		);
157
	}
158
}
159