mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 06:23:38 +00:00
Rename tools/lib/api_tests.py to zerver/lib/api_test_helpers.py.
Now that the Markdown extension defined in zerver/lib/bugdown/api_generate_examples depended on code in the tools/lib/* directory, it caused the production tests to fail since the tools/ directory wouldn't exist in a production environment.
This commit is contained in:
219
zerver/lib/api_test_helpers.py
Normal file
219
zerver/lib/api_test_helpers.py
Normal file
@@ -0,0 +1,219 @@
|
||||
from typing import Dict, Any, Optional, Iterable
|
||||
import os
|
||||
import ujson
|
||||
|
||||
if False:
|
||||
from zulip import Client
|
||||
|
||||
ZULIP_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
FIXTURE_PATH = os.path.join(ZULIP_DIR, 'templates', 'zerver', 'api', 'fixtures.json')
|
||||
|
||||
def load_api_fixtures():
|
||||
# type: () -> Dict[str, Any]
|
||||
with open(FIXTURE_PATH, 'r') as fp:
|
||||
json_dict = ujson.loads(fp.read())
|
||||
return json_dict
|
||||
|
||||
FIXTURES = load_api_fixtures()
|
||||
|
||||
def add_subscriptions(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
request = [
|
||||
dict(
|
||||
name='new stream',
|
||||
description='New stream for testing',
|
||||
)
|
||||
]
|
||||
result = client.add_subscriptions(request)
|
||||
assert result['result'] == 'success'
|
||||
|
||||
def create_user(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
request = dict(
|
||||
email='newbie@zulip.com',
|
||||
full_name='New User',
|
||||
short_name='Newbie',
|
||||
password='temp',
|
||||
)
|
||||
result = client.create_user(request)
|
||||
assert result['result'] == 'success'
|
||||
|
||||
def get_members(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
result = client.get_members()
|
||||
assert result['result'] == 'success'
|
||||
members = [m for m in result['members'] if m['email'] == 'newbie@zulip.com']
|
||||
assert len(members) == 1
|
||||
iago = members[0]
|
||||
|
||||
assert not iago['is_admin']
|
||||
assert iago['full_name'] == 'New User'
|
||||
|
||||
def get_profile(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
result = client.get_profile()
|
||||
assert result['is_admin']
|
||||
assert result['email'] == 'iago@zulip.com'
|
||||
assert result['full_name'] == 'Iago'
|
||||
|
||||
def get_stream_id(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
stream_name = 'new stream'
|
||||
result = client.get_stream_id(stream_name)
|
||||
assert int(result['stream_id'])
|
||||
|
||||
def get_streams(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
result = client.get_streams()
|
||||
assert result['result'] == 'success'
|
||||
streams = [s for s in result['streams'] if s['name'] == 'new stream']
|
||||
assert streams[0]['description'] == 'New stream for testing'
|
||||
|
||||
def get_subscribers(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
result = client.get_subscribers(stream='new stream')
|
||||
assert result['subscribers'] == ['iago@zulip.com']
|
||||
|
||||
def get_user_agent(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
result = client.get_user_agent()
|
||||
assert result.startswith('ZulipPython/')
|
||||
|
||||
def list_subscriptions(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
result = client.list_subscriptions()
|
||||
assert result['result'] == 'success'
|
||||
streams = [s for s in result['subscriptions'] if s['name'] == 'new stream']
|
||||
assert streams[0]['description'] == 'New stream for testing'
|
||||
|
||||
def remove_subscriptions(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
result = client.remove_subscriptions(['new stream'])
|
||||
assert result['result'] == 'success'
|
||||
|
||||
# test it was actually removed
|
||||
result = client.list_subscriptions()
|
||||
assert result['result'] == 'success'
|
||||
streams = [s for s in result['subscriptions'] if s['name'] == 'new stream']
|
||||
assert len(streams) == 0
|
||||
|
||||
def render_message(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
# {code_example|start}
|
||||
# Render a message
|
||||
request = {
|
||||
'content': '**foo**'
|
||||
}
|
||||
result = client.render_message(request)
|
||||
# {code_example|end}
|
||||
|
||||
fixture = FIXTURES['render-message']
|
||||
test_against_fixture(result, fixture)
|
||||
|
||||
def send_message(client):
|
||||
# type: (Client) -> int
|
||||
|
||||
request = dict(
|
||||
type='stream',
|
||||
to='Denmark',
|
||||
subject='Copenhagen',
|
||||
content='hello',
|
||||
)
|
||||
result = client.send_message(request)
|
||||
assert result['result'] == 'success'
|
||||
message_id = result['id']
|
||||
|
||||
# test it was actually sent
|
||||
url = 'messages/' + str(message_id)
|
||||
result = client.call_endpoint(
|
||||
url=url,
|
||||
method='GET'
|
||||
)
|
||||
assert result['result'] == 'success'
|
||||
assert result['raw_content'] == 'hello'
|
||||
|
||||
return message_id
|
||||
|
||||
def update_message(client, message_id):
|
||||
# type: (Client, int) -> None
|
||||
|
||||
assert int(message_id)
|
||||
request = dict(
|
||||
message_id=message_id,
|
||||
content='new content',
|
||||
)
|
||||
result = client.update_message(request)
|
||||
assert result['result'] == 'success'
|
||||
|
||||
# test it was actually updated
|
||||
url = 'messages/' + str(message_id)
|
||||
result = client.call_endpoint(
|
||||
url=url,
|
||||
method='GET'
|
||||
)
|
||||
assert result['result'] == 'success'
|
||||
assert result['raw_content'] == 'new content'
|
||||
|
||||
TEST_FUNCTIONS = {
|
||||
'render-message': render_message,
|
||||
}
|
||||
|
||||
# SETUP METHODS FOLLOW
|
||||
|
||||
def test_against_fixture(result, fixture, check_if_equal=[], check_if_exists=[]):
|
||||
# type: (Dict[str, Any], Dict[str, Any], Optional[Iterable[str]], Optional[Iterable[str]]) -> None
|
||||
if not check_if_equal and not check_if_exists:
|
||||
for key, value in fixture.items():
|
||||
assert result[key] == fixture[key]
|
||||
|
||||
if check_if_equal:
|
||||
for key in check_if_equal:
|
||||
assert result[key] == fixture[key]
|
||||
|
||||
if check_if_exists:
|
||||
for key in check_if_exists:
|
||||
assert key in result
|
||||
|
||||
def test_messages(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
render_message(client)
|
||||
message_id = send_message(client)
|
||||
update_message(client, message_id)
|
||||
|
||||
def test_users(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
create_user(client)
|
||||
get_members(client)
|
||||
get_profile(client)
|
||||
|
||||
def test_streams(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
add_subscriptions(client)
|
||||
list_subscriptions(client)
|
||||
get_stream_id(client)
|
||||
get_streams(client)
|
||||
get_subscribers(client)
|
||||
|
||||
def test_the_api(client):
|
||||
# type: (Client) -> None
|
||||
|
||||
get_user_agent(client)
|
||||
test_users(client)
|
||||
test_streams(client)
|
||||
test_messages(client)
|
||||
|
||||
# print(dir(client))
|
||||
Reference in New Issue
Block a user