diff --git a/slack_sdk/oauth/installation_store/file/__init__.py b/slack_sdk/oauth/installation_store/file/__init__.py index aa6f6c52d..097792389 100644 --- a/slack_sdk/oauth/installation_store/file/__init__.py +++ b/slack_sdk/oauth/installation_store/file/__init__.py @@ -70,10 +70,14 @@ def save(self, installation: Installation): f.write(entity) else: + # per workspace + entity = json.dumps(installation.__dict__) + with open(f"{team_installation_dir}/installer-latest", "w") as f: + f.write(entity) + + # per workspace per user u_id = installation.user_id or none - installer_filepath = f"{team_installation_dir}/installer-{u_id}-latest" - with open(installer_filepath, "w") as f: - entity = json.dumps(installation.__dict__) + with open(f"{team_installation_dir}/installer-{u_id}-latest", "w") as f: f.write(entity) def save_bot(self, bot: Bot): diff --git a/tests/slack_sdk/oauth/installation_store/test_file.py b/tests/slack_sdk/oauth/installation_store/test_file.py index 74675452a..dbc21599f 100644 --- a/tests/slack_sdk/oauth/installation_store/test_file.py +++ b/tests/slack_sdk/oauth/installation_store/test_file.py @@ -1,3 +1,4 @@ +import tempfile import unittest from slack_sdk.oauth.installation_store import Installation, FileInstallationStore @@ -78,6 +79,34 @@ def test_save_and_find(self): bot = store.find_bot(enterprise_id="E111", team_id="T222") self.assertIsNone(bot) + def test_save_and_find_without_historical_data(self): + with tempfile.TemporaryDirectory() as base_dir: + store = FileInstallationStore(base_dir=base_dir, client_id="111.222", historical_data_enabled=False) + installation = Installation( + app_id="A111", + enterprise_id="E111", + team_id="T111", + user_id="U111", + bot_id="B111", + bot_token="xoxb-111", + bot_scopes=["chat:write"], + bot_user_id="U222", + ) + store.save(installation) + + bot = store.find_bot(enterprise_id="E111", team_id="T111") + self.assertIsNotNone(bot) + + i = store.find_installation(enterprise_id="E111", team_id="T111") + self.assertIsNotNone(i) + self.assertEqual(i.bot_token, "xoxb-111") + i = store.find_installation(enterprise_id="E111", team_id="T111", user_id="U111") + self.assertIsNotNone(i) + + store.delete_installation(enterprise_id="E111", team_id="T111") + i = store.find_installation(enterprise_id="E111", team_id="T111") + self.assertIsNone(i) + def test_org_installation(self): store = FileInstallationStore(client_id="111.222") installation = Installation(