@@ -406,6 +406,57 @@ public void Test_Oracle_ExecuteCommand_DML_Unsupported_SELECT_Queries()
406406 }
407407 }
408408
409+ [ TestMethod ]
410+ [ TestCategory ( DB_TESTS ) , TestCategory ( ORACLE_TESTS ) ]
411+ public void Test_Oracle_ExecuteCommand_DCL_Queries ( )
412+ {
413+ var user = "TEST_USER" ;
414+ var password = "Test@1234" ;
415+ var table = "AGENTS" ;
416+ var commands = "SELECT, UPDATE" ;
417+ var checkCommand = "SELECT" ;
418+
419+ var createUser = string . Format ( Queries . OracleQueries . TestDB . DCL . CreateUserSql_User_Password , user , password ) ;
420+ var grantConnect = string . Format ( Queries . OracleQueries . TestDB . DCL . GrantConnectSql_User , user ) ;
421+ var grantSql = string . Format ( Queries . OracleQueries . TestDB . DCL . GrantSql_Command_Table_User , commands , table , user ) ;
422+ var revokeSql = string . Format ( Queries . OracleQueries . TestDB . DCL . RevokeSql_Command_Table_User , commands , table , user ) ;
423+ var verifyPermissions = string . Format ( Queries . OracleQueries . TestDB . DCL . VerifyPermission_User , user ) ;
424+ var removeUser = string . Format ( Queries . OracleQueries . TestDB . DCL . RemoveUserSql_User , user ) ;
425+
426+ var dbContext = new DBContext ( DB . Oracle , OracleConnectionString ) ;
427+
428+ // Create User
429+ var result = dbContext . ExecuteCommand ( createUser ) ;
430+ Assert . AreEqual ( 0 , result ) ;
431+
432+ // Grant CONNECT to User
433+ result = dbContext . ExecuteCommand ( grantConnect ) ;
434+ Assert . AreEqual ( 0 , result ) ;
435+
436+ // Existing Permissions
437+ var data = dbContext . FetchData ( verifyPermissions ) ;
438+ Assert . AreEqual ( 1 , data . Count ) ;
439+ Assert . IsFalse ( data . Any ( data => data . ReferenceData . Values . Any ( value => value . Contains ( checkCommand ) ) ) ) ;
440+
441+ // Grant
442+ result = dbContext . ExecuteCommand ( grantSql ) ;
443+ Assert . AreEqual ( 0 , result ) ;
444+ data = dbContext . FetchData ( verifyPermissions ) ;
445+ Assert . AreEqual ( 2 , data . Count ) ;
446+ Assert . IsTrue ( data . Any ( data => data . ReferenceData . Values . Any ( value => value . Contains ( checkCommand ) ) ) ) ;
447+
448+ // Revoke
449+ result = dbContext . ExecuteCommand ( revokeSql ) ;
450+ Assert . AreEqual ( 0 , result ) ;
451+ data = dbContext . FetchData ( verifyPermissions ) ;
452+ Assert . AreEqual ( 1 , data . Count ) ;
453+ Assert . IsFalse ( data . Any ( data => data . ReferenceData . Values . Any ( value => value . Contains ( checkCommand ) ) ) ) ;
454+
455+ // Remove User
456+ result = dbContext . ExecuteCommand ( removeUser ) ;
457+ Assert . AreEqual ( 0 , result ) ;
458+ }
459+
409460 #endregion
410461
411462 #endregion
0 commit comments