예제 #1
0
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")
예제 #2
0
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')
예제 #3
0
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')
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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")
예제 #7
0
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')
예제 #8
0
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']
예제 #9
0
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")
예제 #10
0
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')
예제 #11
0
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"]
예제 #12
0
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")
예제 #13
0
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")
예제 #14
0
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")
예제 #15
0
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")
예제 #16
0
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")
예제 #17
0
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")
예제 #18
0
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")
예제 #19
0
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")
예제 #20
0
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")
예제 #21
0
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')
예제 #22
0
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')
예제 #23
0
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")
예제 #24
0
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')
예제 #25
0
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")
예제 #26
0
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")
예제 #27
0
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")
예제 #28
0
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")
예제 #29
0
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")
예제 #30
0
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')