Skip to content

Commit 688ea66

Browse files
tests: add tests to ensure web client is copyable (#1682)
1 parent 8b9c0b9 commit 688ea66

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

tests/helpers.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import asyncio
2+
import copy
23
import os
4+
import sys
5+
from typing import Any
36

47

58
def async_test(coro):
@@ -24,3 +27,19 @@ def remove_os_env_temporarily() -> dict:
2427

2528
def restore_os_env(old_env: dict) -> None:
2629
os.environ.update(old_env)
30+
31+
32+
def create_copy(original: Any) -> Any:
33+
if sys.version_info.major == 3 and sys.version_info.minor <= 6:
34+
# NOTE: Unfortunately, copy.deepcopy doesn't work in Python 3.6.5.
35+
# --------------------
36+
# > rv = reductor(4)
37+
# E TypeError: can't pickle _thread.RLock objects
38+
# ../../.pyenv/versions/3.6.10/lib/python3.6/copy.py:169: TypeError
39+
# --------------------
40+
# As a workaround, this operation uses shallow copies in Python 3.6.
41+
# If your code modifies the shared data in threads / async functions, race conditions may arise.
42+
# Please consider upgrading Python major version to 3.7+ if you encounter some issues due to this.
43+
return copy.copy(original)
44+
else:
45+
return copy.deepcopy(original)

tests/slack_sdk/web/test_web_client_logger.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@
33

44
from slack_sdk import WebClient
55
from slack_sdk.web import base_client
6+
from tests.helpers import create_copy
7+
from tests.mock_web_api_server import cleanup_mock_web_api_server, setup_mock_web_api_server
68
from tests.slack_sdk.web.mock_web_api_handler import MockHandler
7-
from tests.mock_web_api_server import setup_mock_web_api_server, cleanup_mock_web_api_server
89

910

1011
class TestWebClientLogger(unittest.TestCase):
1112
test_logger: logging.Logger
1213

1314
def setUp(self):
14-
self.test_logger = logging.Logger("test-logger")
15+
self.test_logger = logging.getLogger("test-logger")
1516
setup_mock_web_api_server(self, MockHandler)
1617

1718
def tearDown(self):
@@ -36,3 +37,13 @@ def test_logger_property_has_no_setter(self):
3637
)
3738
with self.assertRaises(AttributeError):
3839
client.logger = self.test_logger
40+
41+
def test_ensure_web_client_with_logger_is_copyable(self):
42+
client = WebClient(
43+
base_url="http://localhost:8888",
44+
token="xoxb-api_test",
45+
logger=self.test_logger,
46+
)
47+
client_copy = create_copy(client)
48+
self.assertEqual(client.logger, self.test_logger)
49+
self.assertEqual(client_copy.logger, self.test_logger)

tests/slack_sdk_async/web/test_async_web_client_logger.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from slack_sdk.web.async_client import AsyncWebClient
55
from slack_sdk.web import async_base_client
6+
from tests.helpers import create_copy
67
from tests.slack_sdk.web.mock_web_api_handler import MockHandler
78
from tests.mock_web_api_server import setup_mock_web_api_server_async, cleanup_mock_web_api_server_async
89

@@ -11,7 +12,7 @@ class TestAsyncWebClientLogger(unittest.TestCase):
1112
test_logger: logging.Logger
1213

1314
def setUp(self):
14-
self.test_logger = logging.Logger("test-logger")
15+
self.test_logger = logging.getLogger("test-logger")
1516
setup_mock_web_api_server_async(self, MockHandler)
1617

1718
def tearDown(self):
@@ -36,3 +37,13 @@ def test_logger_property_has_no_setter(self):
3637
)
3738
with self.assertRaises(AttributeError):
3839
client.logger = self.test_logger
40+
41+
def test_ensure_async_web_client_with_logger_is_copyable(self):
42+
client = AsyncWebClient(
43+
base_url="http://localhost:8888",
44+
token="xoxb-api_test",
45+
logger=self.test_logger,
46+
)
47+
client_copy = create_copy(client)
48+
self.assertEqual(client.logger, self.test_logger)
49+
self.assertEqual(client_copy.logger, self.test_logger)

0 commit comments

Comments
 (0)