mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
In validate_account_and_subdomain we check if user's account is not deactivated. In case of failure of this check we raise our standard JsonableError. While this works well in most cases but it creates difficulties in handling of deactivated accounts for non-browser clients. So we register a new USER_DEACTIVATED error code so that clients can distinguish if error is because of deactivated account. Following these changes `validate_account_and_subdomain` raises UserDeactivatedError if user's account is deactivated. This error is also documented in `/api/rest-error-handling`. Testing: I have mostly relied on automated backend tests to test this. Partially addresses issue #17763.
127 lines
3.7 KiB
Python
Executable File
127 lines
3.7 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_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_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, owner_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)
|
|
|
|
|
|
print("API tests passed!")
|