@@ -20,6 +20,20 @@ class Test_Visualizer_Ajax extends WP_Ajax_UnitTestCase {
2020 */
2121 private $ admin_user_id ;
2222
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+
2337 /**
2438 * Set up.
2539 */
@@ -32,6 +46,18 @@ public function setUp() {
3246 );
3347 wp_set_current_user ( $ this ->admin_user_id );
3448
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+
3561 }
3662
3763 /**
@@ -113,10 +139,39 @@ public function test_ajax_response_get_query_data_valid_query_with_filtered_colu
113139 $ this ->assertTrue ( $ response ->success );
114140 }
115141
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+
116170 /**
117171 * Test the AJAX response for fetching the database data with user capability.
118172 */
119173 public function test_ajax_response_get_query_data_subcriber_dissallow () {
174+ wp_set_current_user ( $ this ->subscriber_user_id );
120175 $ this ->_setRole ( 'subscriber ' );
121176
122177 $ _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() {
139194 $ this ->assertEquals ( 'Action not allowed for this user. ' , $ response ->data ->msg );
140195 $ this ->assertFalse ( $ response ->success );
141196 }
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+ }
142224}
0 commit comments