def test_authorization_errors_fatal(client: Client, nonadmin_client: Client) -> None: client.add_subscriptions( streams=[ {"name": "private_stream"}, ], ) stream_id = client.get_stream_id("private_stream")["stream_id"] client.call_endpoint( f"streams/{stream_id}", method="PATCH", request={"is_private": True}, ) result = nonadmin_client.add_subscriptions( streams=[ {"name": "private_stream"}, ], authorization_errors_fatal=False, ) validate_against_openapi_schema(result, "/users/me/subscriptions", "post", "400_0") result = nonadmin_client.add_subscriptions( streams=[ {"name": "private_stream"}, ], authorization_errors_fatal=True, ) validate_against_openapi_schema(result, "/users/me/subscriptions", "post", "400_1")
def test_authorization_errors_fatal(client: Client, nonadmin_client: Client) -> None: client.add_subscriptions( streams=[ {'name': 'private_stream'}, ], ) stream_id = client.get_stream_id('private_stream')['stream_id'] client.call_endpoint( f'streams/{stream_id}', method='PATCH', request={'is_private': True}, ) result = nonadmin_client.add_subscriptions( streams=[ {'name': 'private_stream'}, ], authorization_errors_fatal=False, ) validate_against_openapi_schema(result, '/users/me/subscriptions', 'post', '400_0') result = nonadmin_client.add_subscriptions( streams=[ {'name': 'private_stream'}, ], authorization_errors_fatal=True, ) validate_against_openapi_schema(result, '/users/me/subscriptions', 'post', '400_1')
def toggle_mute_topic(client: Client) -> None: # Send a test message message = {'type': 'stream', 'to': 'Denmark', 'topic': 'boat party'} client.call_endpoint(url='messages', method='POST', request=message) # {code_example|start} # Mute the topic "boat party" in the stream "Denmark" request = {'stream': 'Denmark', 'topic': 'boat party', 'op': 'add'} result = client.mute_topic(request) # {code_example|end} validate_against_openapi_schema(result, '/users/me/subscriptions/muted_topics', 'patch', '200') # {code_example|start} # Unmute the topic "boat party" in the stream "Denmark" request = {'stream': 'Denmark', 'topic': 'boat party', 'op': 'remove'} result = client.mute_topic(request) # {code_example|end} validate_against_openapi_schema(result, '/users/me/subscriptions/muted_topics', 'patch', '200')
def send_message(client: Client) -> int: request: Dict[str, Any] = {} # {code_example|start} # Send a stream message request = { "type": "stream", "to": "Denmark", "topic": "Castle", "content": "I come not, friends, to steal away your hearts.", } result = client.send_message(request) # {code_example|end} validate_against_openapi_schema(result, '/messages', 'post', '200') # test that the message was actually sent message_id = result['id'] url = 'messages/' + str(message_id) result = client.call_endpoint( url=url, method='GET', ) assert result['result'] == 'success' assert result['raw_content'] == request['content'] ensure_users([10], ['hamlet']) # {code_example|start} # Send a private message user_id = 10 request = { "type": "private", "to": [user_id], "content": "With mirth and laughter let old wrinkles come.", } result = client.send_message(request) # {code_example|end} validate_against_openapi_schema(result, '/messages', 'post', '200') # test that the message was actually sent message_id = result['id'] url = 'messages/' + str(message_id) result = client.call_endpoint( url=url, method='GET', ) assert result['result'] == 'success' assert result['raw_content'] == request['content'] return message_id
def send_message(client: Client) -> int: request: Dict[str, Any] = {} # {code_example|start} # Send a stream message request = { "type": "stream", "to": "Denmark", "topic": "Castle", "content": "I come not, friends, to steal away your hearts.", } result = client.send_message(request) # {code_example|end} validate_against_openapi_schema(result, "/messages", "post", "200") # test that the message was actually sent message_id = result["id"] url = "messages/" + str(message_id) result = client.call_endpoint( url=url, method="GET", ) assert result["result"] == "success" assert result["raw_content"] == request["content"] ensure_users([10], ["hamlet"]) # {code_example|start} # Send a private message user_id = 10 request = { "type": "private", "to": [user_id], "content": "With mirth and laughter let old wrinkles come.", } result = client.send_message(request) # {code_example|end} validate_against_openapi_schema(result, "/messages", "post", "200") # test that the message was actually sent message_id = result["id"] url = "messages/" + str(message_id) result = client.call_endpoint( url=url, method="GET", ) assert result["result"] == "success" assert result["raw_content"] == request["content"] return message_id
def update_status(client: Client) -> None: # {code_example|start} # The request contains the new status and away boolean request = { "status_text": "on vacation", "away": False, "emoji_name": "car", "emoji_code": "1f697", "reaction_type": "unicode_emoji", } result = client.call_endpoint(url="/users/me/status", method="POST", request=request) # {code_example|end} validate_against_openapi_schema(result, "/users/me/status", "post", "200") # Test "status_text is too long error" request = { "status_text": "This is a message that exceeds 60 characters, and so should throw an error.", "away": "false", } validate_against_openapi_schema(result, "/users/me/status", "post", "400")
def check_messages_match_narrow(client: Client) -> None: message = { "type": "stream", "to": "Verona", "topic": "test_topic", "content": "http://foo.com" } msg_ids = [] response = client.send_message(message) msg_ids.append(response['id']) message['content'] = "no link here" response = client.send_message(message) msg_ids.append(response['id']) # {code_example|start} # Check which messages within an array match a narrow. request = { 'msg_ids': msg_ids, 'narrow': [{'operator': 'has', 'operand': 'link'}], } result = client.call_endpoint( url='messages/matches_narrow', method='GET', request=request ) # {code_example|end} validate_against_openapi_schema(result, '/messages/matches_narrow', 'get', '200')
def update_message(client: Client, message_id: int) -> None: assert int(message_id) # {code_example|start} # Edit a message # (make sure that message_id below is set to the ID of the # message you wish to update) request = { "message_id": message_id, "content": "New content", } result = client.update_message(request) # {code_example|end} validate_against_openapi_schema(result, '/messages/{message_id}', 'patch', '200') # 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'] == request['content']
def upload_file(client: Client) -> None: path_to_file = os.path.join(ZULIP_DIR, "zerver", "tests", "images", "img.jpg") # {code_example|start} # Upload a file with open(path_to_file, "rb") as fp: result = client.call_endpoint( "user_uploads", method="POST", files=[fp], ) client.send_message({ "type": "stream", "to": "Denmark", "topic": "Castle", "content": "Check out [this picture]({}) of my castle!".format(result["uri"]), }) # {code_example|end} validate_against_openapi_schema(result, "/user_uploads", "post", "200")
def upload_file(client: Client) -> None: path_to_file = os.path.join(ZULIP_DIR, 'zerver', 'tests', 'images', 'img.jpg') # {code_example|start} # Upload a file with open(path_to_file, 'rb') as fp: result = client.call_endpoint( 'user_uploads', method='POST', files=[fp], ) client.send_message({ "type": "stream", "to": "Denmark", "topic": "Castle", "content": "Check out [this picture]({}) of my castle!".format(result['uri']), }) # {code_example|end} validate_against_openapi_schema(result, '/user_uploads', 'post', '200')
def update_message(client: Client, message_id: int) -> None: assert int(message_id) # {code_example|start} # Edit a message # (make sure that message_id below is set to the ID of the # message you wish to update) request = { "message_id": message_id, "content": "New content", } result = client.update_message(request) # {code_example|end} validate_against_openapi_schema(result, "/messages/{message_id}", "patch", "200") # 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"] == request["content"]
def check_messages_match_narrow(client: Client) -> None: message = { "type": "stream", "to": "Verona", "topic": "test_topic", "content": "http://foo.com" } msg_ids = [] response = client.send_message(message) msg_ids.append(response["id"]) message["content"] = "no link here" response = client.send_message(message) msg_ids.append(response["id"]) # {code_example|start} # Check which messages within an array match a narrow. request = { "msg_ids": msg_ids, "narrow": [{ "operator": "has", "operand": "link" }], } result = client.call_endpoint(url="messages/matches_narrow", method="GET", request=request) # {code_example|end} validate_against_openapi_schema(result, "/messages/matches_narrow", "get", "200")
def remove_realm_playground(client: Client) -> None: # {code_example|start} # Remove the playground with ID 1 result = client.call_endpoint(url="/realm/playgrounds/1", method="DELETE") # {code_example|end} validate_against_openapi_schema(result, "/realm/playgrounds/{playground_id}", "delete", "200")
def create_realm_profile_field(client: Client) -> None: # {code_example|start} # Create a custom profile field in the user's organization. request = {"name": "Phone", "hint": "Contact no.", "field_type": 1} result = client.call_endpoint(url="/realm/profile_fields", method="POST", request=request) # {code_example|end} validate_against_openapi_schema(result, "/realm/profile_fields", "post", "200")
def reorder_realm_profile_fields(client: Client) -> None: # {code_example|start} # Reorder the custom profile fields in the user's organization. order = [8, 7, 6, 5, 4, 3, 2, 1] request = {"order": json.dumps(order)} result = client.call_endpoint(url="/realm/profile_fields", method="PATCH", request=request) # {code_example|end} validate_against_openapi_schema(result, "/realm/profile_fields", "patch", "200")
def get_realm_profile_fields(client: Client) -> None: # {code_example|start} # Fetch all the custom profile fields in the user's organization. result = client.call_endpoint( url="/realm/profile_fields", method="GET", ) # {code_example|end} validate_against_openapi_schema(result, "/realm/profile_fields", "get", "200")
def add_user_mute(client: Client) -> None: ensure_users([10], ["hamlet"]) # {code_example|start} # Mute user with ID 10 muted_user_id = 10 result = client.call_endpoint(url=f"/users/me/muted_users/{muted_user_id}", method="POST") # {code_example|end} validate_against_openapi_schema(result, "/users/me/muted_users/{muted_user_id}", "post", "200")
def toggle_mute_topic(client: Client) -> None: # Send a test message message = { "type": "stream", "to": "Denmark", "topic": "boat party", } client.call_endpoint( url="messages", method="POST", request=message, ) # {code_example|start} # Mute the topic "boat party" in the stream "Denmark" request = { "stream": "Denmark", "topic": "boat party", "op": "add", } result = client.mute_topic(request) # {code_example|end} validate_against_openapi_schema(result, "/users/me/subscriptions/muted_topics", "patch", "200") # {code_example|start} # Unmute the topic "boat party" in the stream "Denmark" request = { "stream": "Denmark", "topic": "boat party", "op": "remove", } result = client.mute_topic(request) # {code_example|end} validate_against_openapi_schema(result, "/users/me/subscriptions/muted_topics", "patch", "200")
def get_user_by_email(client: Client) -> None: # {code_example|start} # Fetch details on a user given a user ID email = "*****@*****.**" result = client.call_endpoint( url=f"/users/{email}", method="GET", ) # {code_example|end} validate_against_openapi_schema(result, "/users/{email}", "get", "200")
def get_realm_linkifiers(client: Client) -> None: # {code_example|start} # Fetch all the filters in this organization result = client.call_endpoint( url="/realm/linkifiers", method="GET", ) # {code_example|end} validate_against_openapi_schema(result, "/realm/linkifiers", "get", "200")
def get_subscription_status(client: Client) -> None: # {code_example|start} # Check whether a user is a subscriber to a given stream. user_id = 7 stream_id = 1 result = client.call_endpoint( url=f'/users/{user_id}/subscriptions/{stream_id}', method='GET', ) # {code_example|end} validate_against_openapi_schema(result, '/users/{user_id}/subscriptions/{stream_id}', 'get', '200')
def create_realm_profile_field(client: Client) -> None: # {code_example|start} # Create a custom profile field in the user's organization. request = {'name': 'Phone', 'hint': 'Contact No.', 'field_type': 1} result = client.call_endpoint(url='/realm/profile_fields', method='POST', request=request) # {code_example|end} validate_against_openapi_schema(result, '/realm/profile_fields', 'post', '200')
def update_settings(client: Client) -> None: # {code_example|start} # Enable push notifications even when online and change emojiset request = { "enable_offline_push_notifications": True, "enable_online_push_notifications": True, "emojiset": "google", } result = client.call_endpoint("/settings", method="PATCH", request=request) # {code_example|end} validate_against_openapi_schema(result, "/settings", "patch", "200")
def deactivate_user(client: Client) -> None: # {code_example|start} # Deactivate a user user_id = 8 url = 'users/' + str(user_id) result = client.call_endpoint( url=url, method='DELETE', ) # {code_example|end} validate_against_openapi_schema(result, '/users/{user_id}', 'delete', '200')
def update_display_settings(client: Client) -> None: # {code_example|start} # Show user list on left sidebar in narrow windows. # Change emoji set used for display to Google modern. request = { "left_side_userlist": True, "emojiset": "google", } result = client.call_endpoint("settings/display", method="PATCH", request=request) # {code_example|end} validate_against_openapi_schema(result, "/settings/display", "patch", "200")
def add_realm_playground(client: Client) -> None: # {code_example|start} # Add a realm playground for Python request = { "name": "Python playground", "pygments_language": "Python", "url_prefix": "https://python.example.com", } result = client.call_endpoint(url="/realm/playgrounds", method="POST", request=request) # {code_example|end} validate_against_openapi_schema(result, "/realm/playgrounds", "post", "200")
def get_subscription_status(client: Client) -> None: ensure_users([7], ["zoe"]) # {code_example|start} # Check whether a user is a subscriber to a given stream. user_id = 7 stream_id = 1 result = client.call_endpoint( url=f"/users/{user_id}/subscriptions/{stream_id}", method="GET", ) # {code_example|end} validate_against_openapi_schema( result, "/users/{user_id}/subscriptions/{stream_id}", "get", "200")
def deactivate_own_user(client: Client, owner_client: Client) -> None: user_id = client.get_profile()["user_id"] # {code_example|start} # Deactivate the account of the current user/bot that requests. result = client.call_endpoint( url="/users/me", method="DELETE", ) # {code_example|end} # Reactivate the account to avoid polluting other tests. owner_client.reactivate_user_by_id(user_id) validate_against_openapi_schema(result, "/users/me", "delete", "200")
def upload_custom_emoji(client: Client) -> None: emoji_path = os.path.join(ZULIP_DIR, "zerver", "tests", "images", "img.jpg") # {code_example|start} # Upload a custom emoji; assume `emoji_path` is the path to your image. with open(emoji_path, "rb") as fp: emoji_name = "my_custom_emoji" result = client.call_endpoint( f"realm/emoji/{emoji_name}", method="POST", files=[fp], ) # {code_example|end} validate_against_openapi_schema(result, "/realm/emoji/{emoji_name}", "post", "200")
def upload_custom_emoji(client: Client) -> None: emoji_path = os.path.join(ZULIP_DIR, 'zerver', 'tests', 'images', 'img.jpg') # {code_example|start} # Upload a custom emoji; assume `emoji_path` is the path to your image. with open(emoji_path, 'rb') as fp: emoji_name = 'my_custom_emoji' result = client.call_endpoint(f'realm/emoji/{emoji_name}', method='POST', files=[fp]) # {code_example|end} validate_against_openapi_schema(result, '/realm/emoji/{emoji_name}', 'post', '200')