def build_valid_request(self, body: str = raw_body) -> BoltRequest: timestamp = str(int(time())) return BoltRequest(body=body, headers=self.build_headers(timestamp, body))
def test_member_join_left_events(self): app = App(client=self.web_client, signing_secret=self.signing_secret) join_event_body = { "token": "verification_token", "team_id": "T111", "enterprise_id": "E111", "api_app_id": "A111", "event": { "type": "member_joined_channel", "user": "******", # not self "channel": "C111", "channel_type": "C", "team": "T111", "inviter": "U222", }, "type": "event_callback", "event_id": "Ev111", "event_time": 1599616881, "authed_users": ["W111"], } left_event_body = { "token": "verification_token", "team_id": "T111", "enterprise_id": "E111", "api_app_id": "A111", "event": { "type": "member_left_channel", "user": "******", # not self "channel": "C111", "channel_type": "C", "team": "T111", }, "type": "event_callback", "event_id": "Ev111", "event_time": 1599616881, "authed_users": ["W111"], } @app.event("member_joined_channel") def handle_app_mention(say): say("What's up?") @app.event("member_left_channel") def handle_app_mention(say): say("What's up?") timestamp, body = str(int(time())), json.dumps(join_event_body) request: BoltRequest = BoltRequest(body=body, headers=self.build_headers( timestamp, body)) response = app.dispatch(request) assert response.status == 200 assert_auth_test_count(self, 1) timestamp, body = str(int(time())), json.dumps(left_event_body) request: BoltRequest = BoltRequest(body=body, headers=self.build_headers( timestamp, body)) response = app.dispatch(request) assert response.status == 200 sleep(1) # wait a bit after auto ack() # the listeners should not be executed assert self.mock_received_requests["/chat.postMessage"] == 2
def test_body_validation(self): with pytest.raises(BoltError): BoltRequest(body={"foo": "bar"}, mode="http")
def build_valid_multi_request(self) -> BoltRequest: timestamp = str(int(time())) return BoltRequest(body=raw_multi_body, headers=self.build_headers(timestamp, raw_multi_body))
def test_member_join_left_events(self): app = App(client=self.web_client) join_event_body = { "token": "verification_token", "team_id": "T111", "enterprise_id": "E111", "api_app_id": "A111", "event": { "type": "member_joined_channel", "user": "******", # not self "channel": "C111", "channel_type": "C", "team": "T111", "inviter": "U222", }, "type": "event_callback", "event_id": "Ev111", "event_time": 1599616881, "authed_users": ["W111"], } left_event_body = { "token": "verification_token", "team_id": "T111", "enterprise_id": "E111", "api_app_id": "A111", "event": { "type": "member_left_channel", "user": "******", # not self "channel": "C111", "channel_type": "C", "team": "T111", }, "type": "event_callback", "event_id": "Ev111", "event_time": 1599616881, "authed_users": ["W111"], } @app.event("member_joined_channel") def handle_app_mention(say): say("What's up?") @app.event("member_left_channel") def handle_app_mention(say): say("What's up?") request: BoltRequest = BoltRequest(body=join_event_body, mode="socket_mode") response = app.dispatch(request) assert response.status == 200 assert self.mock_received_requests["/auth.test"] == 1 request: BoltRequest = BoltRequest(body=left_event_body, mode="socket_mode") response = app.dispatch(request) assert response.status == 200 sleep(1) # wait a bit after auto ack() # the listeners should not be executed assert self.mock_received_requests["/chat.postMessage"] == 2
def to_bolt_request(req: Request, body: bytes) -> BoltRequest: return BoltRequest( body=body.decode("utf-8"), query=req.query_params, headers=req.headers, )
def run_app_and_verify(self, app: App): payload = { "type": "message_action", "token": "verification_token", "action_ts": "1583637157.207593", "team": { "id": "T111", "domain": "test-test", "enterprise_id": "E111", "enterprise_name": "Org Name", }, "user": { "id": "W111", "name": "test-test" }, "channel": { "id": "C111", "name": "dev" }, "callback_id": "test-shortcut", "trigger_id": "111.222.xxx", "message_ts": "1583636382.000300", "message": { "client_msg_id": "zzzz-111-222-xxx-yyy", "type": "message", "text": "<@W222> test", "user": "******", "ts": "1583636382.000300", "team": "T111", "blocks": [{ "type": "rich_text", "block_id": "d7eJ", "elements": [{ "type": "rich_text_section", "elements": [ { "type": "user", "user_id": "U222" }, { "type": "text", "text": " test" }, ], }], }], }, "response_url": "https://hooks.slack.com/app/T111/111/xxx", } timestamp, body = str(int(time())), f"payload={json.dumps(payload)}" request: BoltRequest = BoltRequest( body=body, headers={ "content-type": ["application/x-www-form-urlencoded"], "x-slack-signature": [ self.signature_verifier.generate_signature( body=body, timestamp=timestamp, ) ], "x-slack-request-timestamp": [timestamp], }, ) response = app.dispatch(request) assert response.status == 200 assert self.mock_received_requests["/auth.test"] == 1 sleep(0.5) # wait a bit after auto ack() assert self.mock_received_requests["/chat.postMessage"] == 1
def test_uninstallation_and_revokes(self): app = App( client=self.web_client, signing_secret=self.signing_secret, authorize=authorize, ) app._client = WebClient( token="uninstalled-revoked", base_url=self.mock_api_server_base_url ) @app.event("app_uninstalled") def handler1(say: Say): say(channel="C111", text="What's up?") @app.event("tokens_revoked") def handler2(say: Say): say(channel="C111", text="What's up?") app_uninstalled_body = { "token": "verification_token", "team_id": "T_INSTALLED", "enterprise_id": "E_INSTALLED", "api_app_id": "A111", "event": {"type": "app_uninstalled"}, "type": "event_callback", "event_id": "Ev111", "event_time": 1599616881, "authorizations": [ { "enterprise_id": "E_INSTALLED", "team_id": "T_INSTALLED", "user_id": "W111", "is_bot": True, "is_enterprise_install": False, } ], } timestamp, body = str(int(time())), json.dumps(app_uninstalled_body) request: BoltRequest = BoltRequest( body=body, headers=self.build_headers(timestamp, body) ) response = app.dispatch(request) assert response.status == 200 tokens_revoked_body = { "token": "verification_token", "team_id": "T_INSTALLED", "enterprise_id": "E_INSTALLED", "api_app_id": "A111", "event": { "type": "tokens_revoked", "tokens": {"oauth": ["UXXXXXXXX"], "bot": ["UXXXXXXXX"]}, }, "type": "event_callback", "event_id": "Ev111", "event_time": 1599616881, "authorizations": [ { "enterprise_id": "E_INSTALLED", "team_id": "T_INSTALLED", "user_id": "W111", "is_bot": True, "is_enterprise_install": False, } ], } timestamp, body = str(int(time())), json.dumps(tokens_revoked_body) request: BoltRequest = BoltRequest( body=body, headers=self.build_headers(timestamp, body) ) response = app.dispatch(request) assert response.status == 200 # this should not be called when we have authorize assert self.mock_received_requests.get("/auth.test") is None sleep(1) # wait a bit after auto ack() assert self.mock_received_requests["/chat.postMessage"] == 2
def test_self_member_join_left_events(self): app = App( client=self.web_client, signing_secret=self.signing_secret, authorize=authorize, ) join_event_body = { "token": "verification_token", "team_id": "T_SOURCE", "enterprise_id": "E_SOURCE", "api_app_id": "A111", "event": { "type": "member_joined_channel", "user": "******", # bot_user_id "channel": "C111", "channel_type": "C", "team": "T_INSTALLED", "inviter": "U222", }, "type": "event_callback", "event_id": "Ev111", "event_time": 1599616881, "authorizations": [ { "enterprise_id": "E_INSTALLED", "team_id": "T_INSTALLED", "user_id": "W111", "is_bot": True, "is_enterprise_install": False, } ], } left_event_body = { "token": "verification_token", "team_id": "T_SOURCE", "enterprise_id": "E_SOURCE", "api_app_id": "A111", "event": { "type": "member_left_channel", "user": "******", # bot_user_id "channel": "C111", "channel_type": "C", "team": "T_INSTALLED", }, "type": "event_callback", "event_id": "Ev111", "event_time": 1599616881, "authorizations": [ { "enterprise_id": "E_INSTALLED", "team_id": "T_INSTALLED", "user_id": "W111", "is_bot": True, "is_enterprise_install": False, } ], } @app.event("member_joined_channel") def handle_member_joined_channel(say): say("What's up?") @app.event("member_left_channel") def handle_member_left_channel(say): say("What's up?") timestamp, body = str(int(time())), json.dumps(join_event_body) request: BoltRequest = BoltRequest( body=body, headers=self.build_headers(timestamp, body) ) response = app.dispatch(request) assert response.status == 200 assert self.mock_received_requests["/auth.test"] == 1 timestamp, body = str(int(time())), json.dumps(left_event_body) request: BoltRequest = BoltRequest( body=body, headers=self.build_headers(timestamp, body) ) response = app.dispatch(request) assert response.status == 200 sleep(1) # wait a bit after auto ack() assert self.mock_received_requests["/chat.postMessage"] == 2