Skip to content

Commit e9633ac

Browse files
zulip: Add tests for zulip apis.
This is an unit test suite testing for payloads and proper api calls.
1 parent 5b32b32 commit e9633ac

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ pytest
1010
-e git+https://github.com/zulip/zulint@14e3974001bf8442a6a3486125865660f1f2eb68#egg=zulint==1.0.0
1111
mypy==0.812
1212
gitlint>=0.13.0
13+
responses

zulip/tests/test_api.py

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import json
2+
import unittest
3+
import responses
4+
import zulip
5+
import urllib
6+
7+
from typing import Any, Tuple, Dict
8+
from unittest import TestCase
9+
10+
class TerminationException(Exception):
11+
pass
12+
13+
class TestAPI(TestCase):
14+
15+
@responses.activate
16+
def test_add_reaction(self) -> None:
17+
def request_callback(request: Any) -> Tuple[int, Dict[str, str], str]:
18+
params = {}
19+
for param in request.body.split("&"):
20+
key, value = param.split("=")
21+
params[key] = urllib.parse.unquote(value)
22+
assert "emoji_name" in params or "emoji_code" in params
23+
return (200, {}, json.dumps({'result': 'success', 'msg': ''}))
24+
25+
responses.add_callback(
26+
method=responses.POST,
27+
url="https://test.zulipapi.com/api/v1/messages/10/reactions",
28+
callback=request_callback
29+
)
30+
31+
client = zulip.Client(config_file="zulip/tests/test_zuliprc")
32+
# request with emoji name
33+
request = {
34+
"message_id": 10,
35+
"emoji_name": "octopus",
36+
}
37+
result = client.add_reaction(request)
38+
self.assertEqual(result, {'result': 'success', 'msg': ''})
39+
# request with emoji code
40+
request = {
41+
"message_id": 10,
42+
"emoji_code": "1f419",
43+
}
44+
result = client.add_reaction(request)
45+
self.assertEqual(result, {'result': 'success', 'msg': ''})
46+
47+
@responses.activate
48+
def test_call_on_each_event(self) -> None:
49+
50+
responses.add(
51+
responses.POST,
52+
url="https://test.zulipapi.com/api/v1/register",
53+
json={'queue_id': '123456789', 'last_event_id': -1, 'msg': '', 'result': 'success'},
54+
status=200
55+
)
56+
responses.add(
57+
responses.GET,
58+
url="https://test.zulipapi.com/api/v1/events",
59+
json={'result': 'success', 'msg': '', 'events': [{'id': 0}, {'id': 1}, {'id': 2}]},
60+
status=200
61+
)
62+
63+
def event_callback(x: Dict[str, Any]) -> None:
64+
print(x)
65+
if x['id'] == 2:
66+
raise TerminationException()
67+
68+
client = zulip.Client(config_file="zulip/tests/test_zuliprc")
69+
70+
try:
71+
client.call_on_each_event(
72+
lambda x: event_callback(x),
73+
)
74+
except TerminationException:
75+
pass
76+
77+
try:
78+
client.call_on_each_event(
79+
lambda x: event_callback(x),
80+
['message'],
81+
)
82+
except TerminationException:
83+
pass
84+
85+
try:
86+
client.call_on_each_event(
87+
event_callback,
88+
['message'],
89+
[['some', 'narrow']]
90+
)
91+
except TerminationException:
92+
pass
93+
94+
if __name__ == '__main__':
95+
unittest.main()

zulip/tests/test_zuliprc

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[api]
2+
3+
key=K1PZuAp18Cn9RFjTsf5O1HeRW6TVpyhF
4+
site=https://test.zulipapi.com

0 commit comments

Comments
 (0)