def test_channel_invite_invalid_channel_id(url):
    requests.delete(url + "clear")
    owner, user = http_register_n_users(url, 2)

    # Owner creates a private channel
    requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": False
        },
    ).json()

    # Owner invites user with invalid channel id
    invalid_channel_id = -1
    response = requests.post(
        url + "channel/invite",
        json={
            "token": owner["token"],
            "channel_id": invalid_channel_id,
            "u_id": user["u_id"],
        },
    )

    assert response.status_code == 400
def test_standup_send_invalid_channel_id(url):
    requests.delete(url + "clear")
    user1 = http_register_n_users(url, 1)

    # Create channel
    channel = requests.post(
        url + "channels/create",
        json={
            "token": user1["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # Start a standup
    requests.post(
        url + "standup/start",
        json={
            "token": user1["token"],
            "channel_id": channel["channel_id"],
            "length": 1,
        },
    )

    # Send with invalid channel id
    invalid_channel_id = -1
    response = requests.post(
        url + "standup/send",
        json={
            "token": user1["token"],
            "channel_id": invalid_channel_id,
            "message": "test",
        },
    )
    assert response.status_code == 400
Exemple #3
0
def test_http_channels_create_empty_name(url):
    """Testing empty names because the http stack might remove them
    automatically or something. It's clearly an edge case"""
    requests.delete(url + "clear")
    usera = http_register_n_users(url, 1)

    response = requests.post(
        url + "channels/create",
        json={
            "token": usera["token"],
            "name": "",
            "is_public": True,
        },
    )
    assert response.status_code == 200

    channel_id = response.json()["channel_id"]

    response = requests.get(
        url + "channel/details",
        params={
            "token": usera["token"],
            "channel_id": channel_id,
        },
    )
    assert response.status_code == 200
    channel_details = response.json()
    # empty names are replaced with the name 'new_channel'
    assert channel_details["name"] == "new_channel"
Exemple #4
0
def test_add_invalid_user_to_owner(url):
    requests.delete(url + "clear")
    owner = http_register_n_users(url, 1)

    private_channel = requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": False
        },
    ).json()

    # Owner tries to add a non-existent user as owner
    invalid_uid = -1
    response = requests.post(
        url + "channel/addowner",
        json={
            "token": owner["token"],
            "channel_id": private_channel["channel_id"],
            "u_id": invalid_uid,
        },
    )

    assert response.status_code == 400
def test_standup_start_standup_is_already_running(url):
    requests.delete(url + "clear")
    user1 = http_register_n_users(url, 1)

    # Create channel
    channel = requests.post(
        url + "channels/create",
        json={
            "token": user1["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # Start a standup
    requests.post(
        url + "standup/start",
        json={
            "token": user1["token"],
            "channel_id": channel["channel_id"],
            "length": 1,
        },
    )

    # Another standup when there's one already running
    response = requests.post(
        url + "standup/start",
        json={
            "token": user1["token"],
            "channel_id": channel["channel_id"],
            "length": 1,
        },
    )
    assert response.status_code == 400
Exemple #6
0
def test_messages_invalid_token(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)

    # Create a channel
    response = requests.post(
        url + "channels/create",
        json={
            "token": user["token"],
            "name": "channel_01",
            "is_public": True
        },
    )
    assert response.status_code == 200
    channel = response.json()

    response = requests.get(
        url + "channel/messages",
        params={
            "token": -1,
            "channel_id": channel["channel_id"],
            "start": 0,
        },
    )
    assert response.status_code == 403
Exemple #7
0
def test_add_owner_invalid_channel_id(url):
    requests.delete(url + "clear")
    owner, user = http_register_n_users(url, 2)

    # Owner creates public channel
    requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # Owner adds user using invalid channel id
    invalid_channel_id = -1
    response = requests.post(
        url + "channel/addowner",
        json={
            "token": owner["token"],
            "channel_id": invalid_channel_id,
            "u_id": user["u_id"],
        },
    )

    assert response.status_code == 400
Exemple #8
0
def test_channels_list_2_channels(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)
    channel01 = requests.post(
        url + "channels/create",
        json={
            "token": user["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()
    channel02 = requests.post(
        url + "channels/create",
        json={
            "token": user["token"],
            "name": "channel_02",
            "is_public": True
        },
    ).json()

    response = requests.get(url + "channels/list",
                            params={"token": user["token"]})
    assert response.status_code == 200
    channels_list = response.json()
    assert channel01["channel_id"] in [
        x["channel_id"] for x in channels_list["channels"]
    ]
    assert channel02["channel_id"] in [
        x["channel_id"] for x in channels_list["channels"]
    ]
Exemple #9
0
def tests_channels_list_non_admin(url):
    requests.delete(url + "clear")
    admin, user = http_register_n_users(url, 2)
    channel = requests.post(
        url + "channels/create",
        json={
            "token": admin["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    requests.post(
        url + "channel/join",
        json={
            "token": user["token"],
            "channel_id": channel["channel_id"]
        },
    )

    response = requests.get(url + "channels/list",
                            params={"token": user["token"]})
    assert response.status_code == 200
    channels_list = response.json()
    assert channel["channel_id"] in [
        x["channel_id"] for x in channels_list["channels"]
    ]
def test_react_invalid_react_id(url):
    requests.delete(url + "clear")
    user_a = http_register_n_users(url, 1)

    # user_a create a channel
    public_channel_id = requests.post(
        url + "channels/create",
        json={"token": user_a["token"], "name": "public_channel", "is_public": True},
    ).json()["channel_id"]

    # user_a send a message
    message_id = requests.post(
        url + "message/send",
        json={
            "token": user_a["token"],
            "channel_id": public_channel_id,
            "message": "How are you",
        },
    ).json()["message_id"]
    invalid_react_number = -1

    # user_a react the the message using a invalid message_id
    response = requests.post(
        url + "message/react",
        json={
            "token": user_a["token"],
            "message_id": message_id,
            "react_id": invalid_react_number,
        },
    )
    assert response.status_code == 400
def test_message_sendlater_4xx_web(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)

    channel_id = requests.post(
        url + "channels/create",
        json={
            "token": user["token"],
            "name": "channel_name",
            "is_public": True,
        },
    ).json()["channel_id"]

    assert (requests.post(
        url + "message/sendlater",
        json={
            "token": -1,
            "channel_id": channel_id,
            "message": "message",
            "time_sent": int(round(time.time() + 2)),
        },
    ).status_code == 403)

    assert (requests.post(
        url + "message/sendlater",
        json={
            "token": user["token"],
            "channel_id": -1,
            "message": "asdfasfd",
            "time_sent": int(round(time.time() + 2)),
        },
    ).status_code == 400)
def test_react_invalid_message_id_out_channel(url):
    requests.delete(url + "clear")
    user_a, user_b = http_register_n_users(url, 2)
    # user_b create a channel and send message in his own channel
    public_channel_id_b = requests.post(
        url + "channels/create",
        json={"token": user_b["token"], "name": "public_channel_b", "is_public": True},
    ).json()["channel_id"]

    message_id_b = requests.post(
        url + "message/send",
        json={
            "token": user_b["token"],
            "channel_id": public_channel_id_b,
            "message": "Nice to see you mate",
        },
    ).json()["message_id"]

    # user_a trying to reponse in outside the channel
    response = requests.post(
        url + "message/react",
        json={
            "token": user_a["token"],
            "message_id": message_id_b,
            "react_id": 1,
        },
    )
    # user_a should not be able to react the the message in the public_channel_b
    assert response.status_code == 400
def test_channel_invite_invalid_user_id(url):
    requests.delete(url + "clear")
    owner = http_register_n_users(url, 1)

    # Owner creates private channel
    private_channel = requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": False
        },
    ).json()

    # Owner invites a user that does not exist in the database
    invalid_user_id = -1
    response = requests.post(
        url + "channel/invite",
        json={
            "token": owner["token"],
            "channel_id": private_channel["channel_id"],
            "u_id": invalid_user_id,
        },
    )

    assert response.status_code == 400
def test_channel_invite_from_unauthorised_user(url):
    requests.delete(url + "clear")
    owner, user1, user2 = http_register_n_users(url, 3)

    # Owner creates a private channel
    private_channel = requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": False
        },
    ).json()

    # User 1 (non-member) invites User2 (non-member) to Owner's channel
    response = requests.post(
        url + "channel/invite",
        json={
            "token": user1["token"],
            "channel_id": private_channel["channel_id"],
            "u_id": user2["u_id"],
        },
    )

    assert response.status_code == 403
def test_remove_invald_message_id(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)
    # Create a new channel
    channel_params = {
        "token": user["token"],
        "name": "channel_01",
        "is_public": True,
    }
    response = requests.post(url + "channels/create", json=channel_params)
    assert response.status_code == 200
    channel = response.json()

    # User sends a message
    message_params = {
        "token": user["token"],
        "channel_id": channel["channel_id"],
        "message": "test message",
    }
    response = requests.post(url + "message/send", json=message_params)
    assert response.status_code == 200

    # User tries to edit message with invalid message id
    message_remove_params = {
        "token": user["token"],
        "message_id": INVALID_MESSAGE_ID
    }

    # Ensure input error raised
    r = requests.delete(url + "message/remove", json=message_remove_params)
    assert r.status_code == 400
Exemple #16
0
def test_edit_non_existent_user(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)
    # Create a new channel
    channel_params = {
        "token": user["token"],
        "name": "channel_01",
        "is_public": True,
    }
    response = requests.post(url + "channels/create", json=channel_params)
    assert response.status_code == 200
    channel = response.json()

    # User sends a message
    message_params = {
        "token": user["token"],
        "channel_id": channel["channel_id"],
        "message": "test message",
    }
    response = requests.post(url + "message/send", json=message_params)
    assert response.status_code == 200
    message = response.json()

    # Non-existent user tries to edit the message
    message_edit_data = {
        "token": -1,
        "message_id": message["message_id"],
        "message": "try editing",
    }
    response = requests.put(url + "message/edit", json=message_edit_data)
    assert response.status_code == 403
def test_remove_unauthorised_user(url):
    requests.delete(url + "clear")
    user01, user02 = http_register_n_users(url, 2)

    # Create a new channel
    channel_params = {
        "token": user01["token"],
        "name": "channel_01",
        "is_public": True,
    }
    response = requests.post(url + "channels/create", json=channel_params)
    assert response.status_code == 200
    channel = response.json()

    # User 1 sends a message
    message_params = {
        "token": user01["token"],
        "channel_id": channel["channel_id"],
        "message": "test message",
    }
    response = requests.post(url + "message/send", json=message_params)
    assert response.status_code == 200
    message = response.json()

    # User 2 tries to remove message from User 1
    message_remove_params = {
        "token": user02["token"],
        "message_id": message["message_id"],
    }

    r = requests.delete(url + "message/remove", json=message_remove_params)
    assert r.status_code == 403
Exemple #18
0
def test_message_edit_exceeeds_limit(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)
    # Create a new channel
    channel_params = {
        "token": user["token"],
        "name": "channel_01",
        "is_public": True,
    }
    response = requests.post(url + "channels/create", json=channel_params)
    assert response.status_code == 200
    channel = response.json()

    # User sends a message
    message_params = {
        "token": user["token"],
        "channel_id": channel["channel_id"],
        "message": "test message",
    }
    response = requests.post(url + "message/send", json=message_params)
    assert response.status_code == 200
    message = response.json()

    # Edited message exeeds 1000 chars
    message_edit_data = {
        "token": user["token"],
        "message_id": message["message_id"],
        "message": "a" * 1001,
    }
    response = requests.put(url + "message/edit", json=message_edit_data)
    assert response.status_code == 400
def test_channels_listall_multiple_users_public(url):
    requests.delete(url + "clear")

    user_01, user_02 = http_register_n_users(url, 2)

    tokens = [user_01["token"], user_02["token"]]
    channel_ids = []
    names = ["private_channel_01", "private_channel_02"]

    # Create a list of tuple which include elements from
    # names and token, and use it to create two channel
    for name, token in zip(names, tokens):
        channel_id = requests.post(
            url + "channels/create",
            json={"token": token, "name": name, "is_public": True},
        ).json()["channel_id"]
        channel_ids.append(channel_id)

    # Authorised channel is our expectation to the
    # channels which should be listed.
    authorised_channels = []
    for channel_id, name in zip(channel_ids, names):
        authorised_channels.append({"channel_id": channel_id, "name": name})

    # For any user, channels/listall should list all of channels that exist.
    response01 = requests.get(
        url + "channels/listall", params={"token": user_01["token"]}
    )
    response02 = requests.get(
        url + "channels/listall", params={"token": user_02["token"]}
    )
    assert response01.json()["channels"] == authorised_channels
    assert response02.json()["channels"] == authorised_channels
Exemple #20
0
def test_edit_invalid_message_id(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)
    # Create a new channel
    channel_params = {
        "token": user["token"],
        "name": "channel_01",
        "is_public": True,
    }
    response = requests.post(url + "channels/create", json=channel_params)
    assert response.status_code == 200
    channel = response.json()

    # User sends a message
    message_params = {
        "token": user["token"],
        "channel_id": channel["channel_id"],
        "message": "test message",
    }
    response = requests.post(url + "message/send", json=message_params)
    assert response.status_code == 200

    # User tries to edit message with an invalid message id
    message_edit_data = {
        "token": "-1",
        "message_id": INVALID_MESSAGE_ID,
        "message": "try editing",
    }
    response = requests.put(url + "message/edit", json=message_edit_data)
    assert response.status_code == 403
Exemple #21
0
def test_add_owner_repeatedly(url):
    requests.delete(url + "clear")
    owner_1, owner_2 = http_register_n_users(url, 2)

    # Owner_1 creates a public channel
    public_channel = requests.post(
        url + "channels/create",
        json={
            "token": owner_1["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # Owner_1 adds Owner_2 as an owner
    requests.post(
        url + "channel/addowner",
        json={
            "token": owner_1["token"],
            "channel_id": public_channel["channel_id"],
            "u_id": owner_2["u_id"],
        },
    )

    # Owner_1 adds Owner_2 as an owner again
    response = requests.post(
        url + "channel/addowner",
        json={
            "token": owner_1["token"],
            "channel_id": public_channel["channel_id"],
            "u_id": owner_2["u_id"],
        },
    )

    assert response.status_code == 400
def test_unreact_inactive_react_id(url):
    """
    situation where a user trying to unreact a message which haven't been reacted
    """
    requests.delete(url + "clear")
    user_a = http_register_n_users(url, 1)
    public_channel_id = requests.post(
        url + "channels/create",
        json={
            "token": user_a["token"],
            "name": "public_channel",
            "is_public": True
        },
    ).json()["channel_id"]

    message_id = requests.post(
        url + "message/send",
        json={
            "token": user_a["token"],
            "channel_id": public_channel_id,
            "message": "Nice to see you mate",
        },
    ).json()["message_id"]

    # React id 1 is a valid id but not active
    response = requests.post(
        url + "message/unreact",
        json={
            "token": user_a["token"],
            "message_id": message_id,
            "react_id": 1,
        },
    )
    assert response.status_code == 400
Exemple #23
0
def test_add_owner_invalid_token(url):
    requests.delete(url + "clear")
    owner, user = http_register_n_users(url, 2)

    # Owner creates a public channel
    channel = requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # User tries to make themselves the owner of Owner's channel
    response = requests.post(
        url + "channel/addowner",
        json={
            "token": user["token"],
            "channel_id": channel["channel_id"],
            "u_id": user["u_id"],
        },
    )

    assert response.status_code == 403
def test_remove_owner_on_nonexistent_user(url):

    requests.delete(url + "clear")
    owner = http_register_n_users(url, 1)

    # Owner creates public channel
    channel = requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # User tries to remove non-existent user as owner of the channel
    nonexistent_user_id = -1
    response = requests.post(
        url + "channel/removeowner",
        json={
            "token": owner["token"],
            "channel_id": channel["channel_id"],
            "u_id": nonexistent_user_id,
        },
    )

    assert response.status_code == 400
def test_standup_start_no_message_sent(url):
    requests.delete(url + "clear")
    user1 = http_register_n_users(url, 1)

    # Create channel
    channel = requests.post(
        url + "channels/create",
        json={
            "token": user1["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # Start a standup
    requests.post(
        url + "standup/start",
        json={
            "token": user1["token"],
            "channel_id": channel["channel_id"],
            "length": 1,
        },
    )

    # Assert the messages are empty
    messages = requests.get(
        url + "channel/messages",
        params={
            "token": user1["token"],
            "channel_id": channel["channel_id"],
            "start": 0,
        },
    ).json()["messages"]
    assert len(messages) == 0
def test_remove_owner_on_member(url):
    requests.delete(url + "clear")
    owner, user = http_register_n_users(url, 2)

    # Owner creates a public channel
    channel = requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # User joins channel and becomes a member
    requests.post(
        url + "channel/join",
        json={
            "token": user["token"],
            "channel_id": channel["channel_id"],
        },
    )

    # Owner tries to remove user using removeowner
    response = requests.post(
        url + "channel/removeowner",
        json={
            "token": owner["token"],
            "channel_id": channel["channel_id"],
            "u_id": user["u_id"],
        },
    )

    assert response.status_code == 400
def test_standup_send_AccessError(url):
    requests.delete(url + "clear")
    user1, user2 = http_register_n_users(url, 2)

    # Create channel
    channel = requests.post(
        url + "channels/create",
        json={
            "token": user1["token"],
            "name": "channel_01",
            "is_public": True
        },
    ).json()

    # Start a standup
    requests.post(
        url + "standup/start",
        json={
            "token": user1["token"],
            "channel_id": channel["channel_id"],
            "length": 1,
        },
    )

    # User2 is not a member of the channel
    response = requests.post(
        url + "standup/send",
        json={
            "token": user2["token"],
            "channel_id": channel["channel_id"],
            "message": "test",
        },
    )
    assert response.status_code == 403
def test_remove_invalid_user_token(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)
    # Create a new channel
    channel_params = {
        "token": user["token"],
        "name": "channel_01",
        "is_public": True,
    }
    response = requests.post(url + "channels/create", json=channel_params)
    assert response.status_code == 200
    channel = response.json()
    # User sends a message
    message_params = {
        "token": user["token"],
        "channel_id": channel["channel_id"],
        "message": "test message",
    }
    response = requests.post(url + "message/send", json=message_params)
    assert response.status_code == 200
    message = response.json()

    message_remove_params = {
        "token": "-1",
        "message_id": message["message_id"],
    }
    # Ensure access error raised
    r = requests.delete(url + "message/remove", json=message_remove_params)
    assert r.status_code == 403
Exemple #29
0
def create_channel(url):
    requests.delete(url + "clear")
    user = http_register_n_users(url, 1)

    # Create a channel
    response = requests.post(
        url + "channels/create",
        json={
            "token": user["token"],
            "name": "channel_01",
            "is_public": True,
        },
    )
    assert response.status_code == 200
    channel = response.json()

    # User sends a message
    response = requests.post(
        url + "message/send",
        json={
            "token": user["token"],
            "channel_id": channel["channel_id"],
            "message": "test message",
        },
    )
    assert response.status_code == 200
    message = response.json()
    return [url, user, channel, message]
def test_channel_invite_invalid_token(url):
    requests.delete(url + "clear")
    owner, user = http_register_n_users(url, 2)

    # Owner creates private channel
    private_channel = requests.post(
        url + "channels/create",
        json={
            "token": owner["token"],
            "name": "channel_01",
            "is_public": False
        },
    ).json()

    # Invalid token used to invite user to owner's channel
    invalid_token = "arandomtoken"
    response = requests.post(
        url + "channel/invite",
        json={
            "token": invalid_token,
            "channel_id": private_channel["channel_id"],
            "u_id": user["u_id"],
        },
    )

    assert response.status_code == 403