Skip to content

Commit 210d3a6

Browse files
committed
Add unit tests for request_verification middleware
1 parent eb746e1 commit 210d3a6

File tree

4 files changed

+108
-0
lines changed

4 files changed

+108
-0
lines changed

tests/slack_bolt/middleware/request_verification/__init__.py

Whitespace-only changes.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from time import time
2+
3+
from slack_sdk.signature import SignatureVerifier
4+
5+
from slack_bolt.middleware import RequestVerification
6+
from slack_bolt.request import BoltRequest
7+
from slack_bolt.response import BoltResponse
8+
9+
10+
def next():
11+
return BoltResponse(status=200, body="next")
12+
13+
14+
class TestRequestVerification:
15+
signing_secret = "secret"
16+
signature_verifier = SignatureVerifier(signing_secret)
17+
18+
def generate_signature(self, body: str, timestamp: str):
19+
return self.signature_verifier.generate_signature(
20+
body=body, timestamp=timestamp,
21+
)
22+
23+
def build_headers(self, timestamp: str, body: str):
24+
return {
25+
"content-type": ["application/x-www-form-urlencoded"],
26+
"x-slack-signature": [self.generate_signature(body, timestamp)],
27+
"x-slack-request-timestamp": [timestamp],
28+
}
29+
30+
def test_valid(self):
31+
middleware = RequestVerification(signing_secret=self.signing_secret)
32+
timestamp = str(int(time()))
33+
raw_body = "payload={}"
34+
req = BoltRequest(
35+
body=raw_body, headers=self.build_headers(timestamp, raw_body)
36+
)
37+
resp = BoltResponse(status=404, body="default")
38+
resp = middleware.process(req=req, resp=resp, next=next)
39+
assert resp.status == 200
40+
assert resp.body == "next"
41+
42+
def test_invalid(self):
43+
middleware = RequestVerification(signing_secret=self.signing_secret)
44+
req = BoltRequest(body="payload={}", headers={})
45+
resp = BoltResponse(status=404)
46+
resp = middleware.process(req=req, resp=resp, next=next)
47+
assert resp.status == 401
48+
assert resp.body == """{"error": "invalid request"}"""

tests/slack_bolt_async/middleware/request_verification/__init__.py

Whitespace-only changes.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import asyncio
2+
from time import time
3+
4+
import pytest
5+
from slack_sdk.signature import SignatureVerifier
6+
7+
from slack_bolt.middleware.request_verification.async_request_verification import (
8+
AsyncRequestVerification,
9+
)
10+
from slack_bolt.request.async_request import AsyncBoltRequest
11+
from slack_bolt.response import BoltResponse
12+
13+
14+
async def next():
15+
return BoltResponse(status=200, body="next")
16+
17+
18+
class TestAsyncRequestVerification:
19+
signing_secret = "secret"
20+
signature_verifier = SignatureVerifier(signing_secret)
21+
22+
def generate_signature(self, body: str, timestamp: str):
23+
return self.signature_verifier.generate_signature(
24+
body=body, timestamp=timestamp,
25+
)
26+
27+
def build_headers(self, timestamp: str, body: str):
28+
return {
29+
"content-type": ["application/x-www-form-urlencoded"],
30+
"x-slack-signature": [self.generate_signature(body, timestamp)],
31+
"x-slack-request-timestamp": [timestamp],
32+
}
33+
34+
@pytest.fixture
35+
def event_loop(self):
36+
loop = asyncio.get_event_loop()
37+
yield loop
38+
loop.close()
39+
40+
@pytest.mark.asyncio
41+
async def test_valid(self):
42+
middleware = AsyncRequestVerification(signing_secret="secret")
43+
timestamp = str(int(time()))
44+
raw_body = "payload={}"
45+
req = AsyncBoltRequest(
46+
body=raw_body, headers=self.build_headers(timestamp, raw_body)
47+
)
48+
resp = BoltResponse(status=404)
49+
resp = await middleware.async_process(req=req, resp=resp, next=next)
50+
assert resp.status == 200
51+
assert resp.body == "next"
52+
53+
@pytest.mark.asyncio
54+
async def test_invalid(self):
55+
middleware = AsyncRequestVerification(signing_secret="secret")
56+
req = AsyncBoltRequest(body="payload={}", headers={})
57+
resp = BoltResponse(status=404)
58+
resp = await middleware.async_process(req=req, resp=resp, next=next)
59+
assert resp.status == 401
60+
assert resp.body == """{"error": "invalid request"}"""

0 commit comments

Comments
 (0)