mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
Fixes #17795 In PR #17014, we added support for deactivate-own-user. And while doing so, we first deactivated the client and then reactivated it. But this implementation is a bit hacky. So, to fix this, we're now deactivating a test_user so that we don't have to reactivate it. We did so by changing the value of authentication_line. As we want to keep endpoint code out of the “test_curl_examples”, we changed the value of authentication_line in `curl_param_value_generators.py`. To work this out, we create a new global variable named AUTHENTICATION_LINE in “curl_param_value_generators.py” and change its value in function “deactivate_own_user” and to use this change in “test_curl_examples,” we import AUTHENTICATION_LINE. AUTHENTICATION_LINE is of list data type because we want a pointer to original mutable object so that changes made during run time show across the module. Another way to do this is to change the way we import variable, but that will be inconsistent to the way we had in all other files. To remove confusion between AUTHENTICATION_LINE and authentication_line we renamed authentication_line to default_authentication_line.
145 lines
4.0 KiB
Python
Executable File
145 lines
4.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import argparse
|
|
import os
|
|
import sys
|
|
|
|
os.environ["RUNNING_OPENAPI_CURL_TEST"] = "1"
|
|
|
|
# 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 add_provision_check_override_param, assert_provisioning_status_ok
|
|
from tools.lib.test_server import test_server_running
|
|
|
|
usage = """test-api [options]"""
|
|
parser = argparse.ArgumentParser(usage)
|
|
add_provision_check_override_param(parser)
|
|
options = parser.parse_args()
|
|
|
|
assert_provisioning_status_ok(options.skip_provision_check)
|
|
|
|
with test_server_running(
|
|
skip_provision_check=options.skip_provision_check, external_host="zulipdev.com:9981"
|
|
):
|
|
# Zerver imports should happen after `django.setup()` is run
|
|
# by the test_server_running decorator.
|
|
from zerver.lib.actions import (
|
|
change_user_is_active,
|
|
do_create_user,
|
|
do_deactivate_realm,
|
|
do_reactivate_realm,
|
|
do_reactivate_user,
|
|
)
|
|
from zerver.lib.test_helpers import reset_emails_in_zulip_realm
|
|
from zerver.lib.users import get_api_key
|
|
from zerver.models import get_realm, get_user
|
|
from zerver.openapi.javascript_examples import test_js_bindings
|
|
from zerver.openapi.python_examples import (
|
|
test_invalid_api_key,
|
|
test_realm_deactivated,
|
|
test_the_api,
|
|
test_user_account_deactivated,
|
|
)
|
|
from zerver.openapi.test_curl_examples import test_generated_curl_examples_for_success
|
|
|
|
print("Running API tests...")
|
|
|
|
reset_emails_in_zulip_realm()
|
|
|
|
# Prepare the admin client
|
|
email = "iago@zulip.com" # Iago is an admin
|
|
realm = get_realm("zulip")
|
|
user = get_user(email, realm)
|
|
# Required to test can_create_users endpoints.
|
|
user.can_create_users = True
|
|
user.save(update_fields=["can_create_users"])
|
|
|
|
api_key = get_api_key(user)
|
|
site = "http://zulip.zulipdev.com:9981"
|
|
client = Client(
|
|
email=email,
|
|
api_key=api_key,
|
|
site=site,
|
|
)
|
|
|
|
# Prepare the owner client
|
|
email = "desdemona@zulip.com" # desdemona is an owner
|
|
realm = get_realm("zulip")
|
|
user = get_user(email, realm)
|
|
api_key = get_api_key(user)
|
|
site = "http://zulip.zulipdev.com:9981"
|
|
owner_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", acting_user=None
|
|
)
|
|
api_key = get_api_key(guest_user)
|
|
nonadmin_client = Client(
|
|
email=email,
|
|
api_key=api_key,
|
|
site=site,
|
|
)
|
|
|
|
test_the_api(client, nonadmin_client, owner_client)
|
|
test_generated_curl_examples_for_success(client)
|
|
test_js_bindings(client)
|
|
|
|
# Test error payloads
|
|
client = Client(
|
|
email=email,
|
|
api_key="X" * 32,
|
|
site=site,
|
|
)
|
|
test_invalid_api_key(client)
|
|
|
|
# Test account deactivated error
|
|
# we deactivate user manually because do_deactivate_user removes user session
|
|
change_user_is_active(guest_user, False)
|
|
client = Client(
|
|
email=email,
|
|
api_key=api_key,
|
|
site=site,
|
|
)
|
|
test_user_account_deactivated(client)
|
|
# reactivate user to avoid any side-effects in other tests.
|
|
do_reactivate_user(guest_user, acting_user=None)
|
|
|
|
# Test realm deactivated error
|
|
do_deactivate_realm(guest_user.realm, acting_user=None)
|
|
|
|
client = Client(
|
|
email=email,
|
|
api_key=api_key,
|
|
site=site,
|
|
)
|
|
test_realm_deactivated(client)
|
|
do_reactivate_realm(guest_user.realm)
|
|
|
|
|
|
print("API tests passed!")
|