Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions integration_tests/samples/scim/search_groups.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# ------------------
# Only for running this script here
import sys
from os.path import dirname


sys.path.insert(1, f"{dirname(__file__)}/../../..")
# ------------------

import logging

logging.basicConfig(level=logging.DEBUG)

import os
from slack_sdk.scim import SCIMClient

client = SCIMClient(token=os.environ["SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN"])

response = client.search_groups(start_index=1, count=2)
print("-----------------------")
print(response.groups)
25 changes: 25 additions & 0 deletions integration_tests/samples/scim/search_groups_async.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# ------------------
# Only for running this script here
import sys
from os.path import dirname


sys.path.insert(1, f"{dirname(__file__)}/../../..")
# ------------------

import logging

logging.basicConfig(level=logging.DEBUG)

import asyncio
import os
from slack_sdk.scim.async_client import AsyncSCIMClient

client = AsyncSCIMClient(token=os.environ["SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN"])

async def main():
response = await client.search_groups(start_index=1, count=2)
print("-----------------------")
print(response.groups)

asyncio.run(main())
21 changes: 21 additions & 0 deletions integration_tests/samples/scim/search_users.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# ------------------
# Only for running this script here
import sys
from os.path import dirname


sys.path.insert(1, f"{dirname(__file__)}/../../..")
# ------------------

import logging

logging.basicConfig(level=logging.DEBUG)

import os
from slack_sdk.scim import SCIMClient

client = SCIMClient(token=os.environ["SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN"])

response = client.search_users(start_index=1, count=2)
print("-----------------------")
print(response.users)
78 changes: 78 additions & 0 deletions integration_tests/scim/test_scim_client_read.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import logging
import os
import unittest

from integration_tests.env_variable_names import (
SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN,
)
from slack_sdk.scim import SCIMClient, SCIMResponse


class TestSCIMClient(unittest.TestCase):
def setUp(self):
self.logger = logging.getLogger(__name__)
self.bot_token = os.environ[SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN]
self.client: SCIMClient = SCIMClient(token=self.bot_token)

def tearDown(self):
pass

def test_api_call(self):
response: SCIMResponse = self.client.api_call(
http_verb="GET", path="Users", query_params={"startIndex": 1, "count": 1}
)
self.assertIsNotNone(response)

self.logger.info(response.snake_cased_body)
self.assertEqual(response.snake_cased_body["start_index"], 1)
self.assertIsNotNone(response.snake_cased_body["resources"][0]["id"])

def test_lookup_users(self):
search_result = self.client.search_users(start_index=1, count=1)
self.assertIsNotNone(search_result)

self.logger.info(search_result.snake_cased_body)
self.assertEqual(search_result.snake_cased_body["start_index"], 1)
self.assertIsNotNone(search_result.snake_cased_body["resources"][0]["id"])
self.assertEqual(
search_result.users[0].id,
search_result.snake_cased_body["resources"][0]["id"],
)

read_result = self.client.read_user(search_result.users[0].id)
self.assertIsNotNone(read_result)
self.logger.info(read_result.snake_cased_body)
self.assertEqual(read_result.user.id, search_result.users[0].id)

def test_lookup_users_error(self):
# error
error_result = self.client.search_users(start_index=1, count=1, filter="foo")
self.assertEqual(error_result.errors.code, 400)
self.assertEqual(
error_result.errors.description, "no_filters (is_aggregate_call=1)"
)

def test_lookup_groups(self):
search_result = self.client.search_groups(start_index=1, count=1)
self.assertIsNotNone(search_result)

self.logger.info(search_result.snake_cased_body)
self.assertEqual(search_result.snake_cased_body["start_index"], 1)
self.assertIsNotNone(search_result.snake_cased_body["resources"][0]["id"])
self.assertEqual(
search_result.groups[0].id,
search_result.snake_cased_body["resources"][0]["id"],
)

read_result = self.client.read_group(search_result.groups[0].id)
self.assertIsNotNone(read_result)
self.logger.info(read_result.snake_cased_body)
self.assertEqual(read_result.group.id, search_result.groups[0].id)

def test_lookup_groups_error(self):
# error
error_result = self.client.search_groups(start_index=1, count=-1, filter="foo")
self.assertEqual(error_result.errors.code, 400)
self.assertEqual(
error_result.errors.description, "no_filters (is_aggregate_call=1)"
)
94 changes: 94 additions & 0 deletions integration_tests/scim/test_scim_client_write.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import logging
import os
import time
import unittest

from integration_tests.env_variable_names import (
SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN,
)
from slack_sdk.scim import SCIMClient
from slack_sdk.scim.v1.group import Group, GroupMember
from slack_sdk.scim.v1.user import User, UserName, UserEmail


class TestSCIMClient(unittest.TestCase):
def setUp(self):
self.logger = logging.getLogger(__name__)
self.bot_token = os.environ[SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN]
self.client: SCIMClient = SCIMClient(token=self.bot_token)

def tearDown(self):
pass

def test_user_crud(self):
now = str(time.time())[:10]
user = User(
user_name=f"user_{now}",
name=UserName(given_name="Kaz", family_name="Sera"),
emails=[UserEmail(value=f"seratch+{now}@example.com")],
schemas=[
"urn:scim:schemas:core:1.0",
# "urn:scim:schemas:extension:enterprise:1.0",
# "urn:scim:schemas:extension:slack:guest:1.0"
],
# additional_fields={
# "urn:scim:schemas:extension:slack:guest:1.0": {
# "type": "multi",
# "expiration": "2022-11-30T23:59:59Z"
# }
# }
)
creation = self.client.create_user(user)
self.assertEqual(creation.status_code, 201)

patch_result = self.client.patch_user(
id=creation.user.id,
partial_user=User(
user_name=f"user_{now}_2",
name=UserName(given_name="Kazuhiro", family_name="Sera"),
),
)
self.assertEqual(patch_result.status_code, 200)

updated_user = creation.user
updated_user.name = UserName(given_name="Foo", family_name="Bar")
update_result = self.client.update_user(user=updated_user)
self.assertEqual(update_result.status_code, 200)

delete_result = self.client.delete_user(updated_user.id)
self.assertEqual(delete_result.status_code, 200)

def test_group_crud(self):
now = str(time.time())[:10]

user = User(
user_name=f"user_{now}",
name=UserName(given_name="Kaz", family_name="Sera"),
emails=[UserEmail(value=f"seratch+{now}@example.com")],
schemas=["urn:scim:schemas:core:1.0"],
)
user_creation = self.client.create_user(user)
group = Group(
display_name=f"TestGroup_{now}",
members=[GroupMember(value=user_creation.user.id)],
)
creation = self.client.create_group(group)
self.assertEqual(creation.status_code, 201)

group = creation.group

patch_result = self.client.patch_group(
id=group.id,
partial_group=Group(
display_name=f"Test Group{now}_2",
),
)
self.assertEqual(patch_result.status_code, 204)

updated_group = group
updated_group.display_name = f"Test Group{now}_3"
update_result = self.client.update_group(updated_group)
self.assertEqual(update_result.status_code, 200)

delete_result = self.client.delete_group(updated_group.id)
self.assertEqual(delete_result.status_code, 204)
6 changes: 6 additions & 0 deletions slack_sdk/scim/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from .v1.client import SCIMClient # noqa
from .v1.response import SCIMResponse # noqa
from .v1.response import SearchUsersResponse, ReadUserResponse # noqa
from .v1.response import SearchGroupsResponse, ReadGroupResponse # noqa
from .v1.user import User # noqa
from .v1.group import Group # noqa
1 change: 1 addition & 0 deletions slack_sdk/scim/async_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .v1.async_client import AsyncSCIMClient # noqa
Empty file added slack_sdk/scim/v1/__init__.py
Empty file.
Loading