@@ -1108,6 +1108,154 @@ def _get(username, *args, **kwargs):
11081108 assert worker_stats .increment_total_errors .call_count == 1
11091109
11101110
1111+ def test_bulk_add_roles_uses_expected_arguments (runner , mocker , cli_state_with_user ):
1112+ bulk_processor = mocker .patch (f"{ _NAMESPACE } .run_bulk_process" )
1113+ with runner .isolated_filesystem ():
1114+ with open ("test_bulk_add_roles.csv" , "w" ) as csv :
1115+ csv .writelines (
1116+ ["username,role_name\n " , f"{ TEST_USERNAME } ,{ TEST_ROLE_NAME } \n " ]
1117+ )
1118+ command = ["users" , "bulk" , "add-roles" , "test_bulk_add_roles.csv" ]
1119+ runner .invoke (
1120+ cli , command , obj = cli_state_with_user ,
1121+ )
1122+ assert bulk_processor .call_args [0 ][1 ] == [
1123+ {"username" : TEST_USERNAME , "role_name" : TEST_ROLE_NAME , "role added" : "False" },
1124+ ]
1125+ bulk_processor .assert_called_once ()
1126+
1127+
1128+ def test_bulk_add_roles_ignores_blank_lines (runner , mocker , cli_state ):
1129+ bulk_processor = mocker .patch (f"{ _NAMESPACE } .run_bulk_process" )
1130+ with runner .isolated_filesystem ():
1131+ with open ("test_bulk_add_roles.csv" , "w" ) as csv :
1132+ csv .writelines (
1133+ ["username,role_name\n \n \n " , f"{ TEST_USERNAME } ,{ TEST_ROLE_NAME } \n \n \n " ]
1134+ )
1135+ runner .invoke (
1136+ cli ,
1137+ ["users" , "bulk" , "add-roles" , "test_bulk_add_roles.csv" ],
1138+ obj = cli_state ,
1139+ )
1140+ assert bulk_processor .call_args [0 ][1 ] == [
1141+ {"username" : TEST_USERNAME , "role_name" : TEST_ROLE_NAME , "role added" : "False" },
1142+ ]
1143+ bulk_processor .assert_called_once ()
1144+
1145+
1146+ def test_bulk_add_roles_uses_handler_that_when_encounters_error_increments_total_errors (
1147+ runner ,
1148+ mocker ,
1149+ cli_state ,
1150+ worker_stats ,
1151+ get_users_response ,
1152+ get_available_roles_success ,
1153+ ):
1154+ def _get (username , * args , ** kwargs ):
1155+ if username == "test@example.com" :
1156+ raise Exception ("TEST" )
1157+ return get_users_response
1158+
1159+ cli_state .sdk .users .get_by_username .side_effect = _get
1160+ bulk_processor = mocker .patch (f"{ _NAMESPACE } .run_bulk_process" )
1161+ with runner .isolated_filesystem ():
1162+ with open ("test_bulk_add_roles.csv" , "w" ) as csv :
1163+ csv .writelines (
1164+ ["username,role_name\n " , f"{ TEST_USERNAME } ,{ TEST_ROLE_NAME } \n " ]
1165+ )
1166+
1167+ runner .invoke (
1168+ cli ,
1169+ ["users" , "bulk" , "add-roles" , "test_bulk_add_roles.csv" ],
1170+ obj = cli_state ,
1171+ )
1172+ handler = bulk_processor .call_args [0 ][0 ]
1173+
1174+ handler (
1175+ username = "test@example.com" , role_name = TEST_ROLE_NAME ,
1176+ )
1177+ handler (username = "not.test@example.com" , role_name = TEST_ROLE_NAME )
1178+ assert worker_stats .increment_total_errors .call_count == 1
1179+
1180+
1181+ def test_bulk_remove_roles_uses_expected_arguments (runner , mocker , cli_state_with_user ):
1182+ bulk_processor = mocker .patch (f"{ _NAMESPACE } .run_bulk_process" )
1183+ with runner .isolated_filesystem ():
1184+ with open ("test_bulk_remove_roles.csv" , "w" ) as csv :
1185+ csv .writelines (
1186+ ["username,role_name\n " , f"{ TEST_USERNAME } ,{ TEST_ROLE_NAME } \n " ]
1187+ )
1188+ command = ["users" , "bulk" , "remove-roles" , "test_bulk_remove_roles.csv" ]
1189+ runner .invoke (
1190+ cli , command , obj = cli_state_with_user ,
1191+ )
1192+ assert bulk_processor .call_args [0 ][1 ] == [
1193+ {
1194+ "username" : TEST_USERNAME ,
1195+ "role_name" : TEST_ROLE_NAME ,
1196+ "role removed" : "False" ,
1197+ },
1198+ ]
1199+ bulk_processor .assert_called_once ()
1200+
1201+
1202+ def test_bulk_remove_roles_ignores_blank_lines (runner , mocker , cli_state ):
1203+ bulk_processor = mocker .patch (f"{ _NAMESPACE } .run_bulk_process" )
1204+ with runner .isolated_filesystem ():
1205+ with open ("test_bulk_remove_roles.csv" , "w" ) as csv :
1206+ csv .writelines (
1207+ ["username,role_name\n \n \n " , f"{ TEST_USERNAME } ,{ TEST_ROLE_NAME } \n \n \n " ]
1208+ )
1209+ runner .invoke (
1210+ cli ,
1211+ ["users" , "bulk" , "remove-roles" , "test_bulk_remove_roles.csv" ],
1212+ obj = cli_state ,
1213+ )
1214+ assert bulk_processor .call_args [0 ][1 ] == [
1215+ {
1216+ "username" : TEST_USERNAME ,
1217+ "role_name" : TEST_ROLE_NAME ,
1218+ "role removed" : "False" ,
1219+ },
1220+ ]
1221+ bulk_processor .assert_called_once ()
1222+
1223+
1224+ def test_bulk_remove_roles_uses_handler_that_when_encounters_error_increments_total_errors (
1225+ runner ,
1226+ mocker ,
1227+ cli_state ,
1228+ worker_stats ,
1229+ get_users_response ,
1230+ get_available_roles_success ,
1231+ ):
1232+ def _get (username , * args , ** kwargs ):
1233+ if username == "test@example.com" :
1234+ raise Exception ("TEST" )
1235+
1236+ return get_users_response
1237+
1238+ cli_state .sdk .users .get_by_username .side_effect = _get
1239+ bulk_processor = mocker .patch (f"{ _NAMESPACE } .run_bulk_process" )
1240+ with runner .isolated_filesystem ():
1241+ with open ("test_bulk_remove_roles.csv" , "w" ) as csv :
1242+ csv .writelines (
1243+ ["username,role_name\n " , f"{ TEST_USERNAME } ,{ TEST_ROLE_NAME } \n " ]
1244+ )
1245+
1246+ runner .invoke (
1247+ cli ,
1248+ ["users" , "bulk" , "remove-roles" , "test_bulk_remove_roles.csv" ],
1249+ obj = cli_state ,
1250+ )
1251+ handler = bulk_processor .call_args [0 ][0 ]
1252+ handler (
1253+ username = "test@example.com" , role_name = TEST_ROLE_NAME ,
1254+ )
1255+ handler (username = "not.test@example.com" , role_name = TEST_ROLE_NAME )
1256+ assert worker_stats .increment_total_errors .call_count == 1
1257+
1258+
11111259def test_orgs_list_calls_orgs_get_all_with_expected_params (runner , cli_state ):
11121260 runner .invoke (cli , ["users" , "orgs" , "list" ], obj = cli_state )
11131261 assert cli_state .sdk .orgs .get_all .call_count == 1
0 commit comments