@@ -20,6 +20,20 @@ class Test_Visualizer_Ajax extends WP_Ajax_UnitTestCase {
20
20
*/
21
21
private $ admin_user_id ;
22
22
23
+ /**
24
+ * Contributor user ID.
25
+ *
26
+ * @var int
27
+ */
28
+ private $ contibutor_user_id ;
29
+
30
+ /**
31
+ * Subscriber user ID.
32
+ *
33
+ * @var int
34
+ */
35
+ private $ subscriber_user_id ;
36
+
23
37
/**
24
38
* Set up.
25
39
*/
@@ -32,6 +46,18 @@ public function setUp() {
32
46
);
33
47
wp_set_current_user ( $ this ->admin_user_id );
34
48
49
+ $ this ->contibutor_user_id = $ this ->factory ->user ->create (
50
+ array (
51
+ 'role ' => 'contributor ' ,
52
+ )
53
+ );
54
+
55
+ $ this ->subscriber_user_id = $ this ->factory ->user ->create (
56
+ array (
57
+ 'role ' => 'subscriber ' ,
58
+ )
59
+ );
60
+
35
61
}
36
62
37
63
/**
@@ -113,10 +139,39 @@ public function test_ajax_response_get_query_data_valid_query_with_filtered_colu
113
139
$ this ->assertTrue ( $ response ->success );
114
140
}
115
141
142
+ /**
143
+ * Test the AJAX response for fetching the database data with user capability.
144
+ */
145
+ public function test_ajax_response_get_query_data_contributor_dissallow () {
146
+ wp_set_current_user ( $ this ->contibutor_user_id );
147
+ $ this ->_setRole ( 'contributor ' );
148
+
149
+ $ _GET ['security ' ] = wp_create_nonce ( Visualizer_Plugin::ACTION_FETCH_DB_DATA . Visualizer_Plugin::VERSION );
150
+
151
+ $ _POST ['params ' ] = array (
152
+ 'query ' => "/**/UPDATE wp_options SET option_value='administrator' WHERE option_name='default_role' -- " ,
153
+ 'chart_id ' => 1 ,
154
+ );
155
+ try {
156
+ // Trigger the AJAX action
157
+ $ this ->_handleAjax ( Visualizer_Plugin::ACTION_FETCH_DB_DATA );
158
+ } catch ( WPAjaxDieContinueException $ e ) {
159
+ // We expected this, do nothing.
160
+ }
161
+
162
+ $ response = json_decode ( $ this ->_last_response );
163
+ $ this ->assertIsObject ( $ response );
164
+ $ this ->assertObjectHasAttribute ( 'success ' , $ response );
165
+ $ this ->assertObjectHasAttribute ( 'data ' , $ response );
166
+ $ this ->assertEquals ( 'Action not allowed for this user. ' , $ response ->data ->msg );
167
+ $ this ->assertFalse ( $ response ->success );
168
+ }
169
+
116
170
/**
117
171
* Test the AJAX response for fetching the database data with user capability.
118
172
*/
119
173
public function test_ajax_response_get_query_data_subcriber_dissallow () {
174
+ wp_set_current_user ( $ this ->subscriber_user_id );
120
175
$ this ->_setRole ( 'subscriber ' );
121
176
122
177
$ _GET ['security ' ] = wp_create_nonce ( Visualizer_Plugin::ACTION_FETCH_DB_DATA . Visualizer_Plugin::VERSION );
@@ -139,4 +194,31 @@ public function test_ajax_response_get_query_data_subcriber_dissallow() {
139
194
$ this ->assertEquals ( 'Action not allowed for this user. ' , $ response ->data ->msg );
140
195
$ this ->assertFalse ( $ response ->success );
141
196
}
197
+
198
+ /**
199
+ * Test the AJAX response for fetching the database data with invalid query.
200
+ */
201
+ public function test_ajax_response_get_query_data_invalid_query_subquery () {
202
+ $ this ->_setRole ( 'administrator ' );
203
+
204
+ $ _GET ['security ' ] = wp_create_nonce ( Visualizer_Plugin::ACTION_FETCH_DB_DATA . Visualizer_Plugin::VERSION );
205
+
206
+ $ _POST ['params ' ] = array (
207
+ 'query ' => "UPDATE wp_options SET option_value = ( SELECT role_name FROM role_configurations WHERE condition = 'specific_condition' LIMIT 1 )WHERE option_name = 'default_role'; " ,
208
+ 'chart_id ' => 1 ,
209
+ );
210
+ try {
211
+ // Trigger the AJAX action
212
+ $ this ->_handleAjax ( Visualizer_Plugin::ACTION_FETCH_DB_DATA );
213
+ } catch ( WPAjaxDieContinueException $ e ) {
214
+ // We expected this, do nothing.
215
+ }
216
+
217
+ $ response = json_decode ( $ this ->_last_response );
218
+ $ this ->assertIsObject ( $ response );
219
+ $ this ->assertObjectHasAttribute ( 'success ' , $ response );
220
+ $ this ->assertObjectHasAttribute ( 'data ' , $ response );
221
+ $ this ->assertEquals ( 'Only SELECT queries are allowed ' , $ response ->data ->msg );
222
+ $ this ->assertFalse ( $ response ->success );
223
+ }
142
224
}
0 commit comments