From ede44e0be3efec83feb3849680474849b6e38b4a Mon Sep 17 00:00:00 2001 From: Kazuhiro Sera Date: Tue, 2 Feb 2021 21:48:00 +0900 Subject: [PATCH] Fix #893 Add support for admin.barriers.* API methods --- integration_tests/env_variable_names.py | 1 + integration_tests/web/test_admin_barriers.py | 77 +++++++++++++++++++ slack_sdk/web/async_client.py | 70 +++++++++++++++++ slack_sdk/web/client.py | 60 +++++++++++++++ slack_sdk/web/legacy_client.py | 62 +++++++++++++++ .../web/test_web_client_coverage.py | 40 +++++++++- 6 files changed, 308 insertions(+), 2 deletions(-) create mode 100644 integration_tests/web/test_admin_barriers.py diff --git a/integration_tests/env_variable_names.py b/integration_tests/env_variable_names.py index 4eec7b899..5a0f4e144 100644 --- a/integration_tests/env_variable_names.py +++ b/integration_tests/env_variable_names.py @@ -24,6 +24,7 @@ SLACK_SDK_TEST_GRID_WORKSPACE_USER_TOKEN = "SLACK_SDK_TEST_GRID_WORKSPACE_USER_TOKEN" SLACK_SDK_TEST_GRID_WORKSPACE_BOT_TOKEN = "SLACK_SDK_TEST_GRID_WORKSPACE_BOT_TOKEN" SLACK_SDK_TEST_GRID_IDP_USERGROUP_ID = "SLACK_SDK_TEST_GRID_IDP_USERGROUP_ID" +SLACK_SDK_TEST_GRID_IDP_USERGROUP_ID_2 = "SLACK_SDK_TEST_GRID_IDP_USERGROUP_ID_2" SLACK_SDK_TEST_GRID_TEAM_ID = "SLACK_SDK_TEST_GRID_TEAM_ID" SLACK_SDK_TEST_GRID_USER_ID = "SLACK_SDK_TEST_GRID_USER_ID" diff --git a/integration_tests/web/test_admin_barriers.py b/integration_tests/web/test_admin_barriers.py new file mode 100644 index 000000000..f60c5dc3e --- /dev/null +++ b/integration_tests/web/test_admin_barriers.py @@ -0,0 +1,77 @@ +import logging +import os +import unittest + +from integration_tests.env_variable_names import ( + SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN, + SLACK_SDK_TEST_GRID_IDP_USERGROUP_ID, + SLACK_SDK_TEST_GRID_IDP_USERGROUP_ID_2, +) +from integration_tests.helpers import async_test +from slack_sdk.web import WebClient +from slack_sdk.web.async_client import AsyncWebClient + + +class TestWebClient(unittest.TestCase): + """Runs integration tests with real Slack API""" + + def setUp(self): + self.logger = logging.getLogger(__name__) + self.org_admin_token = os.environ[SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN] + self.sync_client: WebClient = WebClient(token=self.org_admin_token) + self.async_client: AsyncWebClient = AsyncWebClient(token=self.org_admin_token) + + self.idp_usergroup_id1 = os.environ[SLACK_SDK_TEST_GRID_IDP_USERGROUP_ID] + self.idp_usergroup_id2 = os.environ[SLACK_SDK_TEST_GRID_IDP_USERGROUP_ID_2] + + def tearDown(self): + pass + + def test_sync(self): + client = self.sync_client + + list = client.admin_barriers_list(limit=1000) + self.assertIsNotNone(list) + + for barrier in list["barriers"]: + client.admin_barriers_delete(barrier_id=barrier["id"]) + + creation = client.admin_barriers_create( + primary_usergroup_id=self.idp_usergroup_id1, + barriered_from_usergroup_ids=[self.idp_usergroup_id2], + restricted_subjects=["call", "im", "mpim"] + ) + self.assertIsNotNone(creation) + + modification = client.admin_barriers_update( + barrier_id=creation["barrier"]["id"], + primary_usergroup_id=self.idp_usergroup_id2, + barriered_from_usergroup_ids=[self.idp_usergroup_id1], + restricted_subjects=["call", "im", "mpim"] + ) + self.assertIsNotNone(modification) + + @async_test + async def test_async(self): + client = self.async_client + + list = await client.admin_barriers_list(limit=1000) + self.assertIsNotNone(list) + + for barrier in list["barriers"]: + await client.admin_barriers_delete(barrier_id=barrier["id"]) + + creation = await client.admin_barriers_create( + primary_usergroup_id=self.idp_usergroup_id1, + barriered_from_usergroup_ids=[self.idp_usergroup_id2], + restricted_subjects=["call", "im", "mpim"] + ) + self.assertIsNotNone(creation) + + modification = await client.admin_barriers_update( + barrier_id=creation["barrier"]["id"], + primary_usergroup_id=self.idp_usergroup_id2, + barriered_from_usergroup_ids=[self.idp_usergroup_id1], + restricted_subjects=["call", "im", "mpim"] + ) + self.assertIsNotNone(modification) diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index 8a60d4bea..7071bde3d 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -150,6 +150,76 @@ async def admin_apps_restricted_list(self, **kwargs) -> AsyncSlackResponse: "admin.apps.restricted.list", http_verb="GET", params=kwargs ) + async def admin_barriers_create( + self, + *, + barriered_from_usergroup_ids: Union[str, Sequence[str]], + primary_usergroup_id: str, + restricted_subjects: Union[str, Sequence[str]], + **kwargs + ) -> AsyncSlackResponse: + """Create an Information Barrier""" + kwargs.update({"primary_usergroup_id": primary_usergroup_id}) + if isinstance(barriered_from_usergroup_ids, (list, Tuple)): + kwargs.update( + {"barriered_from_usergroup_ids": ",".join(barriered_from_usergroup_ids)} + ) + else: + kwargs.update( + {"barriered_from_usergroup_ids": barriered_from_usergroup_ids} + ) + if isinstance(restricted_subjects, (list, Tuple)): + kwargs.update({"restricted_subjects": ",".join(restricted_subjects)}) + else: + kwargs.update({"restricted_subjects": restricted_subjects}) + return await self.api_call( + "admin.barriers.create", http_verb="POST", params=kwargs + ) + + async def admin_barriers_delete( + self, *, barrier_id: str, **kwargs + ) -> AsyncSlackResponse: + """Delete an existing Information Barrier""" + kwargs.update({"barrier_id": barrier_id}) + return await self.api_call( + "admin.barriers.delete", http_verb="POST", params=kwargs + ) + + async def admin_barriers_update( + self, + *, + barrier_id: str, + barriered_from_usergroup_ids: Union[str, Sequence[str]], + primary_usergroup_id: str, + restricted_subjects: Union[str, Sequence[str]], + **kwargs + ) -> AsyncSlackResponse: + """Update an existing Information Barrier""" + kwargs.update( + {"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id} + ) + if isinstance(barriered_from_usergroup_ids, (list, Tuple)): + kwargs.update( + {"barriered_from_usergroup_ids": ",".join(barriered_from_usergroup_ids)} + ) + else: + kwargs.update( + {"barriered_from_usergroup_ids": barriered_from_usergroup_ids} + ) + if isinstance(restricted_subjects, (list, Tuple)): + kwargs.update({"restricted_subjects": ",".join(restricted_subjects)}) + else: + kwargs.update({"restricted_subjects": restricted_subjects}) + return await self.api_call( + "admin.barriers.update", http_verb="POST", params=kwargs + ) + + async def admin_barriers_list(self, **kwargs) -> AsyncSlackResponse: + """Get all Information Barriers for your organization""" + return await self.api_call( + "admin.barriers.list", http_verb="GET", params=kwargs + ) + async def admin_conversations_create( self, *, is_private: bool, name: str, **kwargs ) -> AsyncSlackResponse: diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 9e7b6256b..c0115d737 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -135,6 +135,66 @@ def admin_apps_restricted_list(self, **kwargs) -> SlackResponse: "admin.apps.restricted.list", http_verb="GET", params=kwargs ) + def admin_barriers_create( + self, + *, + barriered_from_usergroup_ids: Union[str, Sequence[str]], + primary_usergroup_id: str, + restricted_subjects: Union[str, Sequence[str]], + **kwargs + ) -> SlackResponse: + """Create an Information Barrier""" + kwargs.update({"primary_usergroup_id": primary_usergroup_id}) + if isinstance(barriered_from_usergroup_ids, (list, Tuple)): + kwargs.update( + {"barriered_from_usergroup_ids": ",".join(barriered_from_usergroup_ids)} + ) + else: + kwargs.update( + {"barriered_from_usergroup_ids": barriered_from_usergroup_ids} + ) + if isinstance(restricted_subjects, (list, Tuple)): + kwargs.update({"restricted_subjects": ",".join(restricted_subjects)}) + else: + kwargs.update({"restricted_subjects": restricted_subjects}) + return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs) + + def admin_barriers_delete(self, *, barrier_id: str, **kwargs) -> SlackResponse: + """Delete an existing Information Barrier""" + kwargs.update({"barrier_id": barrier_id}) + return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) + + def admin_barriers_update( + self, + *, + barrier_id: str, + barriered_from_usergroup_ids: Union[str, Sequence[str]], + primary_usergroup_id: str, + restricted_subjects: Union[str, Sequence[str]], + **kwargs + ) -> SlackResponse: + """Update an existing Information Barrier""" + kwargs.update( + {"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id} + ) + if isinstance(barriered_from_usergroup_ids, (list, Tuple)): + kwargs.update( + {"barriered_from_usergroup_ids": ",".join(barriered_from_usergroup_ids)} + ) + else: + kwargs.update( + {"barriered_from_usergroup_ids": barriered_from_usergroup_ids} + ) + if isinstance(restricted_subjects, (list, Tuple)): + kwargs.update({"restricted_subjects": ",".join(restricted_subjects)}) + else: + kwargs.update({"restricted_subjects": restricted_subjects}) + return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs) + + def admin_barriers_list(self, **kwargs) -> SlackResponse: + """Get all Information Barriers for your organization""" + return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs) + def admin_conversations_create( self, *, is_private: bool, name: str, **kwargs ) -> SlackResponse: diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index e234d1149..3b80390ec 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -148,6 +148,68 @@ def admin_apps_restricted_list(self, **kwargs) -> Union[Future, SlackResponse]: "admin.apps.restricted.list", http_verb="GET", params=kwargs ) + def admin_barriers_create( + self, + *, + barriered_from_usergroup_ids: Union[str, Sequence[str]], + primary_usergroup_id: str, + restricted_subjects: Union[str, Sequence[str]], + **kwargs + ) -> Union[Future, SlackResponse]: + """Create an Information Barrier""" + kwargs.update({"primary_usergroup_id": primary_usergroup_id}) + if isinstance(barriered_from_usergroup_ids, (list, Tuple)): + kwargs.update( + {"barriered_from_usergroup_ids": ",".join(barriered_from_usergroup_ids)} + ) + else: + kwargs.update( + {"barriered_from_usergroup_ids": barriered_from_usergroup_ids} + ) + if isinstance(restricted_subjects, (list, Tuple)): + kwargs.update({"restricted_subjects": ",".join(restricted_subjects)}) + else: + kwargs.update({"restricted_subjects": restricted_subjects}) + return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs) + + def admin_barriers_delete( + self, *, barrier_id: str, **kwargs + ) -> Union[Future, SlackResponse]: + """Delete an existing Information Barrier""" + kwargs.update({"barrier_id": barrier_id}) + return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) + + def admin_barriers_update( + self, + *, + barrier_id: str, + barriered_from_usergroup_ids: Union[str, Sequence[str]], + primary_usergroup_id: str, + restricted_subjects: Union[str, Sequence[str]], + **kwargs + ) -> Union[Future, SlackResponse]: + """Update an existing Information Barrier""" + kwargs.update( + {"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id} + ) + if isinstance(barriered_from_usergroup_ids, (list, Tuple)): + kwargs.update( + {"barriered_from_usergroup_ids": ",".join(barriered_from_usergroup_ids)} + ) + else: + kwargs.update( + {"barriered_from_usergroup_ids": barriered_from_usergroup_ids} + ) + if isinstance(restricted_subjects, (list, Tuple)): + kwargs.update({"restricted_subjects": ",".join(restricted_subjects)}) + else: + kwargs.update({"restricted_subjects": restricted_subjects}) + return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs) + + def admin_barriers_list(self, **kwargs) -> Union[Future, SlackResponse]: + """Get all Information Barriers for your organization""" + return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs) + def admin_conversations_create( self, *, is_private: bool, name: str, **kwargs ) -> Union[Future, SlackResponse]: diff --git a/tests/slack_sdk_async/web/test_web_client_coverage.py b/tests/slack_sdk_async/web/test_web_client_coverage.py index c3f58cd19..67161ac4f 100644 --- a/tests/slack_sdk_async/web/test_web_client_coverage.py +++ b/tests/slack_sdk_async/web/test_web_client_coverage.py @@ -14,9 +14,9 @@ class TestWebClientCoverage(unittest.TestCase): - # 226 endpoints as of Oct 29, 2020 + # 235 endpoints as of Feb 2, 2021 # Can be fetched by running `var methodNames = [].slice.call(document.getElementsByClassName('bold')).map(e => e.text);console.log(methodNames.toString());console.log(methodNames.length);` on https://api.slack.com/methods - all_api_methods = "admin.analytics.getFile,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.approved.list,admin.apps.requests.list,admin.apps.restricted.list,admin.conversations.archive,admin.conversations.convertToPrivate,admin.conversations.create,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,api.test,apps.event.authorizations.list,apps.permissions.info,apps.permissions.request,apps.permissions.resources.list,apps.permissions.scopes.list,apps.permissions.users.list,apps.permissions.users.request,apps.uninstall,auth.revoke,auth.test,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.archive,conversations.close,conversations.create,conversations.history,conversations.info,conversations.invite,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.comments.delete,files.delete,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,migration.exchange,oauth.access,oauth.token,oauth.v2.access,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.profile.get,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,admin.conversations.whitelist.add,admin.conversations.whitelist.listGroupsLinkedToChannel,admin.conversations.whitelist.remove,channels.archive,channels.create,channels.history,channels.info,channels.invite,channels.join,channels.kick,channels.leave,channels.list,channels.mark,channels.rename,channels.replies,channels.setPurpose,channels.setTopic,channels.unarchive,groups.archive,groups.create,groups.createChild,groups.history,groups.info,groups.invite,groups.kick,groups.leave,groups.list,groups.mark,groups.open,groups.rename,groups.replies,groups.setPurpose,groups.setTopic,groups.unarchive,im.close,im.history,im.list,im.mark,im.open,im.replies,mpim.close,mpim.history,mpim.list,mpim.mark,mpim.open,mpim.replies".split( + all_api_methods = "admin.analytics.getFile,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.approved.list,admin.apps.requests.list,admin.apps.restricted.list,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.convertToPrivate,admin.conversations.create,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,api.test,apps.connections.open,apps.event.authorizations.list,apps.permissions.info,apps.permissions.request,apps.permissions.resources.list,apps.permissions.scopes.list,apps.permissions.users.list,apps.permissions.users.request,apps.uninstall,auth.revoke,auth.test,auth.teams.list,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.archive,conversations.close,conversations.create,conversations.history,conversations.info,conversations.invite,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.comments.delete,files.delete,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,migration.exchange,oauth.access,oauth.token,oauth.v2.access,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.profile.get,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,admin.conversations.whitelist.add,admin.conversations.whitelist.listGroupsLinkedToChannel,admin.conversations.whitelist.remove,channels.archive,channels.create,channels.history,channels.info,channels.invite,channels.join,channels.kick,channels.leave,channels.list,channels.mark,channels.rename,channels.replies,channels.setPurpose,channels.setTopic,channels.unarchive,groups.archive,groups.create,groups.createChild,groups.history,groups.info,groups.invite,groups.kick,groups.leave,groups.list,groups.mark,groups.open,groups.rename,groups.replies,groups.setPurpose,groups.setTopic,groups.unarchive,im.close,im.history,im.list,im.mark,im.open,im.replies,mpim.close,mpim.history,mpim.list,mpim.mark,mpim.open,mpim.replies".split( "," ) @@ -38,6 +38,8 @@ def setUp(self): self.api_methods_to_call = [] for api_method in self.all_api_methods: if api_method.startswith("apps.permissions.") or api_method in [ + "apps.connections.open", # app-level token + "auth.teams.list", # app-level token "oauth.access", "oauth.v2.access", "oauth.token", @@ -45,6 +47,9 @@ def setUp(self): "admin.conversations.whitelist.add", # deprecated "admin.conversations.whitelist.listGroupsLinkedToChannel", # deprecated "admin.conversations.whitelist.remove", # deprecated + "admin.conversations.getCustomRetention", + "admin.conversations.removeCustomRetention", + "admin.conversations.setCustomRetention", ]: continue self.api_methods_to_call.append(api_method) @@ -68,6 +73,37 @@ async def run_method(self, method_name, method, async_method): elif method_name == "admin_apps_clearResolution": self.api_methods_to_call.remove(method(app_id="AID123")["method"]) await async_method(app_id="AID123") + elif method_name == "admin_barriers_create": + self.api_methods_to_call.remove( + method( + barriered_from_usergroup_ids=["AAA"], + primary_usergroup_id="AAA", + restricted_subjects=["AAA"], + )["method"] + ) + await async_method( + barriered_from_usergroup_ids=["AAA"], + primary_usergroup_id="AAA", + restricted_subjects=["AAA"], + ) + elif method_name == "admin_barriers_update": + self.api_methods_to_call.remove( + method( + barrier_id="AAA", + barriered_from_usergroup_ids=["AAA"], + primary_usergroup_id="AAA", + restricted_subjects=["AAA"], + )["method"] + ) + await async_method( + barrier_id="AAA", + barriered_from_usergroup_ids=["AAA"], + primary_usergroup_id="AAA", + restricted_subjects=["AAA"], + ) + elif method_name == "admin_barriers_delete": + self.api_methods_to_call.remove(method(barrier_id="AAA")["method"]) + await async_method(barrier_id="AAA") elif method_name == "admin_inviteRequests_approve": self.api_methods_to_call.remove( method(invite_request_id="ID123")["method"]