Files
zulip/tools/test-api
Hemanth V. Alluri 243d8ffc51 openapi: Add a test to ensure generated curl examples work.
This new test runs each generated curl example against the Zulip API,
checking whether it returns successfully without errors.

Significantly modified by tabbott for simplicity.
2019-08-17 11:35:08 -07:00

86 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import os
import sys
# check for the venv
from lib import sanity_check
sanity_check.check_venv(__file__)
ZULIP_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, ZULIP_PATH)
os.chdir(ZULIP_PATH)
from zulip import Client
from tools.lib.test_script import assert_provisioning_status_ok
from tools.lib.test_server import test_server_running
usage = """test-api [options]"""
parser = argparse.ArgumentParser(usage)
parser.add_argument('--force', dest='force',
action="store_true",
default=False, help='Run tests despite possible provisioning problems.')
options = parser.parse_args()
assert_provisioning_status_ok(options.force)
with test_server_running(force=options.force, external_host='zulipdev.com:9981'):
# Zerver imports should happen after `django.setup()` is run
# by the test_server_running decorator.
from zerver.openapi.python_examples import test_the_api, test_invalid_api_key
from zerver.openapi.test_curl_examples import test_generated_curl_examples_for_success
from zerver.lib.actions import do_create_user
from zerver.lib.users import get_api_key
from zerver.models import get_user, get_realm
print("Running API tests...")
# Prepare the admin client
email = 'iago@zulip.com' # Iago is an admin
realm = get_realm("zulip")
user = get_user(email, realm)
api_key = get_api_key(user)
site = 'http://zulip.zulipdev.com:9981'
client = Client(
email=email,
api_key=api_key,
site=site
)
# Prepare a generic bot client for curl testing
email = 'default-bot@zulip.com'
realm = get_realm("zulip")
bot_user = get_user(email, realm)
api_key = get_api_key(bot_user)
bot_client = Client(
email=email,
api_key=api_key,
site=site
)
# Prepare the non-admin client
email = 'guest@zulip.com' # guest is not an admin
guest_user = do_create_user('guest@zulip.com', 'secret',
get_realm('zulip'), 'Mr. Guest', 'guest')
api_key = get_api_key(guest_user)
nonadmin_client = Client(
email=email,
api_key=api_key,
site=site
)
test_generated_curl_examples_for_success(bot_client)
test_the_api(client, nonadmin_client)
# Test error payloads
client = Client(
email=email,
api_key='abcedrsdfd',
site=site
)
test_invalid_api_key(client)
print("API tests passed!")