예제 #1
0
def test_searching_multiple_channels():
    '''search should find all messages containing the query string regardless of channel'''
    andrew = auth_register("*****@*****.**", "password", "andrew", "taylor")
    new_channel_a = channels_create(andrew['token'], "channel_a", True)
    new_channel_b = channels_create(andrew['token'], "channel_b", True)
    message_send(andrew['token'], new_channel_a['channel_id'],
                 f'this is a test message in channel a')
    message_send(andrew['token'], new_channel_b['channel_id'],
                 f'this is a test message in channel b')
    search_results = search(andrew['token'], 'this is a test message')
    assert isinstance(search_results, dict)
    assert len(search_results['messages']) == 2
예제 #2
0
def test_message_already_reacted(new_channel_and_user):
    """ Test that if a user react to a message that has already been reacted"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    message_react(new_channel_and_user['token'], message['message_id'], 1)
    with pytest.raises(InputError):
        message_react(new_channel_and_user['token'], message['message_id'], 1)
예제 #3
0
def test_message_unreact_no_reacts(new_channel_and_user):
    """ Test that if a user try to unreact a message when there is no reacts in message"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adc')
    with pytest.raises(InputError):
        message_unreact(new_channel_and_user['token'], message['message_id'],
                        1)
예제 #4
0
def test_search_for_multiple_messages():
    '''searching with valid paramters and checking the returned object is correct
        messages_sent is a dictionary of message_ids as keys the message_content as
        the value. This is used to verify that the messages found match the messages
        that were sent.
    '''
    andrew = auth_register("*****@*****.**", "password", "andrew", "taylor")
    new_channel = channels_create(andrew['token'], "channel_1", True)

    messages_sent = {}
    for message_number in range(10):
        message_content = f'this is message number {message_number}'
        new_message_id = message_send(andrew['token'],
                                      new_channel['channel_id'],
                                      message_content)['message_id']
        messages_sent[new_message_id] = message_content

    search_results = search(andrew['token'], 'this is message number')
    assert isinstance(search_results, dict)
    assert len(search_results['messages']) == 10
    for message in search_results['messages']:
        assert isinstance(message, dict)
        assert 'message_id' in message
        assert isinstance(message['message_id'], int)
        assert 'u_id' in message
        assert isinstance(message['u_id'], int)
        assert 'message' in message
        assert isinstance(message['message'], str)
        assert message['message'] == messages_sent[message['message_id']]
        assert 'time_created' in message
        assert isinstance(message['time_created'], int)
예제 #5
0
def test_message_unpin_norm(new_channel_and_user):
    """ Test that if a legal use unpin a message"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    message_specific = get_message_by_msg_id(message['message_id'])

    assert not message_specific['is_pinned']
예제 #6
0
def test_message_unpin_not_member(new_channel_and_user,
                                  new_channel_and_user_2):
    """ Test that try to unpin a message by a user who is not one of members"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    with pytest.raises(AccessError):
        message_unpin(new_channel_and_user_2['token'], message['message_id'])
예제 #7
0
def test_message_already_unpinned(new_channel_and_user):
    """ Test that try to unpin a message that has already been pinned"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')

    with pytest.raises(InputError):
        message_unpin(new_channel_and_user['token'], message['message_id'])
예제 #8
0
def test_editing_with_invalid_token(new_channel_and_user):
    """ Tests that an access error is thrown when an an invalid token is used """
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'a')
    with pytest.raises(AccessError):
        message_edit('invalid token', message['message_id'],
                     'new message to replace existing message')
예제 #9
0
def test_message_unreact_invalid_react_id(new_channel_and_user):
    """ Test that a legal user unreact a message but with invalid react_id"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    message_react(new_channel_and_user['token'], message['message_id'], 1)
    with pytest.raises(InputError):
        message_unreact(new_channel_and_user['token'], message['message_id'],
                        0)
예제 #10
0
def test_message_react_user_not_in_channel(new_channel_and_user,
                                           new_channel_and_user_2):
    """ Test that if a user try to react a message when he/she is not in that channel"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    with pytest.raises(InputError):
        message_react(new_channel_and_user_2['token'], message['message_id'],
                      1)
예제 #11
0
def test_removing_message_as_owner(new_channel_and_user):
    ''' tests the sucessful removal of a message by the channel owner'''
    author = auth_register("*****@*****.**", "password", "first_name1",
                           "last_name1")
    channel_invite(new_channel_and_user['token'],
                   new_channel_and_user['channel_id'], author['u_id'])
    message = message_send(author['token'], new_channel_and_user['channel_id'],
                           'a')
    message_remove(new_channel_and_user['token'], message['message_id'])
예제 #12
0
def test_removing_authored_message(new_channel_and_user):
    """ Tests the successful removal of a message from a user that sent it"""
    author = auth_register("*****@*****.**", "password", "first_name1",
                           "last_name1")
    channel_invite(new_channel_and_user['token'],
                   new_channel_and_user['channel_id'], author['u_id'])
    message = message_send(author['token'], new_channel_and_user['channel_id'],
                           'a')
    message_remove(author['token'], message['message_id'])
예제 #13
0
def test_channel_messages_invalid_start(channel_dav, user_dav):

    # There is only one message inside the channel
    msg_1 = message_send(user_dav['token'], channel_dav['channel_id'],
                         "message")

    with pytest.raises(InputError):
        assert channel_messages(user_dav['token'], channel_dav['channel_id'],
                                100)
예제 #14
0
def test_channel_messages_invalid_user(channel_dav, user_dav, user_chas):

    # There is only one message inside the channel
    msg_1 = message_send(user_dav['token'], channel_dav['channel_id'],
                         "message")

    with pytest.raises(AccessError):
        assert channel_messages(user_chas['token'], channel_dav['channel_id'],
                                0)
예제 #15
0
def test_sending_message_without_channel_access(new_channel_and_user):
    """Tests that a user sending a message to a channel
        they do not have access to, throws an error
    """
    unauthorized_user = auth_register("*****@*****.**", "password",
                                      "first_name1", "last_name1")

    with pytest.raises(AccessError):
        assert message_send(unauthorized_user['token'],
                            new_channel_and_user['channel_id'], 'a')
예제 #16
0
def test_message_pin_not_owner(new_channel_and_user, new_channel_and_user_2):
    """ Test that try to pin a message but not the owner"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    channel_invite(new_channel_and_user['token'],
                   new_channel_and_user['channel_id'],
                   new_channel_and_user_2['u_id'])

    with pytest.raises(InputError):
        message_pin(new_channel_and_user_2['token'], message['message_id'])
예제 #17
0
def test_sending_many_messages(new_channel_and_user):
    """Sends 49 messages into a channel and checks the id has been incremented"""
    for message_id in range(49):
        message = message_send(new_channel_and_user['token'],
                               new_channel_and_user['channel_id'],
                               str(message_id))

        assert isinstance(message, dict)
        assert 'message_id' in message
        assert isinstance(message['message_id'], int)
        assert message['message_id'] == message_id
예제 #18
0
def test_searching_multiple_channels_with_no_access():
    '''search should find all messages containing the query string THAT THE USER HAS ACCESS TO'''
    andrew = auth_register("*****@*****.**", "password", "andrew", "taylor")
    andrews_channel = channels_create(andrew['token'], "andrews channel",
                                      False)
    message_send(andrew['token'], andrews_channel['channel_id'],
                 'this is a test message in andrews channel')

    john = auth_register("*****@*****.**", "password", "john", "smith")
    johns_channel = channels_create(john['token'], "channel_b", False)
    message_send(john['token'], johns_channel['channel_id'],
                 'this is a test message in johns channel')

    andrews_search_results = search(andrew['token'], 'this is a test message')
    assert isinstance(andrews_search_results, dict)
    assert len(andrews_search_results['messages']) == 1

    johns_search_results = search(john['token'], 'this is a test message')
    assert isinstance(johns_search_results, dict)
    assert len(johns_search_results['messages']) == 1
예제 #19
0
def test_editing_authored_message_with_empty_message(new_channel_and_user):
    """ Tests replacing a message with an empty message removes the messages"""
    author = auth_register("*****@*****.**", "password", "first_name1",
                           "last_name1")
    channel_invite(new_channel_and_user['token'],
                   new_channel_and_user['channel_id'], author['u_id'])
    message = message_send(author['token'], new_channel_and_user['channel_id'],
                           'a')
    message_edit(author['token'], message['message_id'], '')
    with pytest.raises(InputError):
        message_edit(author['token'], message['message_id'], '')
예제 #20
0
def test_sending_long_message(new_channel_and_user):
    """ Test sending a message that is just below the size limit
        uses channel_messages to verify that the message has been recorded
        assuming message ids start with 0, the first message ever will
        have an id of 0
    """
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'a' * 1000)
    assert isinstance(message, dict)
    assert 'message_id' in message
    assert isinstance(message['message_id'], int)
    assert message['message_id'] == 0
예제 #21
0
def test_removing_a_message_unauthorized_user(new_channel_and_user):
    """Tests that an error is thrown when the user is not authorised to remove the message
        A user is not authorised if they are not authorised to see the channel
    """
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'a')
    unauthorized_user = auth_register("*****@*****.**", "password",
                                      "first_name1", "last_name1")

    with pytest.raises(AccessError):
        assert message_remove(unauthorized_user['token'],
                              message['message_id'])
예제 #22
0
def test_message_unreact_norm(new_channel_and_user):
    """ Test that a legal user unreat a peice of mesage when there is only one piece of message"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    message_react(new_channel_and_user['token'], message['message_id'], 1)
    message_unreact(new_channel_and_user['token'], message['message_id'], 1)
    message_specific = get_message_by_msg_id(message['message_id'])

    assert message_specific['reacts'] == [{
        'is_this_user_reacted': True,
        'react_id': 1,
        'u_ids': []
    }]
예제 #23
0
def test_message_unreact_ueser_not_react(new_channel_and_user,
                                         new_channel_and_user_2):
    """ Test that if a uer try to unreact a message which is not his/her reaction"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    message_react(new_channel_and_user['token'], message['message_id'], 1)

    channel_invite(new_channel_and_user['token'],
                   new_channel_and_user['channel_id'],
                   new_channel_and_user_2['u_id'])

    with pytest.raises(InputError):
        message_unreact(new_channel_and_user_2['token'], message['message_id'],
                        1)
예제 #24
0
def test_message_react_normal(new_channel_and_user):
    """ Test that an legal user react a message"""
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'adcd')
    message_react(new_channel_and_user['token'], message['message_id'], 1)
    message_specific = get_message_by_msg_id(message['message_id'])

    assert message_specific['reacts'] == [{
        'react_id':
        1,
        'u_ids': [new_channel_and_user['u_id']],
        'is_this_user_reacted':
        True
    }]
예제 #25
0
def test_removing_a_message_neither_author_nor_owner(new_channel_and_user):
    """Tests that an error is thrown when the user is not authorised to remove the message
        A user is not authorised if they are
             i not the author of the message and
            ii: not an admin/owner of the chat
    """
    not_author = auth_register("*****@*****.**", "password",
                               "first_name1", "last_name1")
    message = message_send(new_channel_and_user['token'],
                           new_channel_and_user['channel_id'], 'a')
    channel_invite(new_channel_and_user['token'],
                   new_channel_and_user['channel_id'], not_author['u_id'])

    with pytest.raises(AccessError):
        assert message_remove(not_author['token'], message['message_id'])
예제 #26
0
def test_channel_messages_num_messages(channel_dav, user_dav):

    # Create couple messages
    message_send(user_dav['token'], channel_dav['channel_id'], "Message")
    message_send(user_dav['token'], channel_dav['channel_id'], "I love cs1531")
    message_send(user_dav['token'], channel_dav['channel_id'], "Make it")
    message_send(user_dav['token'], channel_dav['channel_id'], "can't do it")

    # Test 0
    # When the start index is 0
    test_0 = channel_messages(user_dav['token'], channel_dav['channel_id'], 0)

    assert test_0['start'] == 0
    assert test_0['end'] == -1
    assert len(test_0['messages']) == 4
    # Test 1
    # When the start index is 1
    test_1 = channel_messages(user_dav['token'], channel_dav['channel_id'], 1)

    assert test_1['start'] == 1
    assert test_1['end'] == -1
    assert len(test_1['messages']) == 3
예제 #27
0
def test_search_for_one_message():
    '''searching with valid paramters and checking the returned object is correct'''
    andrew = auth_register("*****@*****.**", "password", "andrew", "taylor")
    new_channel = channels_create(andrew['token'], "channel_1", True)
    new_message = message_send(andrew['token'], new_channel['channel_id'],
                               f'this is a test message')

    search_results = search(andrew['token'], 'test message')
    assert isinstance(search_results, dict)
    assert len(search_results['messages']) == 1
    message = search_results['messages'][0]

    assert isinstance(message, dict)
    assert 'message_id' in message
    assert isinstance(message['message_id'], int)
    assert message['message_id'] == new_message['message_id']
    assert 'u_id' in message
    assert isinstance(message['u_id'], int)
    assert 'message' in message
    assert isinstance(message['message'], str)
    assert 'time_created' in message
    assert isinstance(message['time_created'], int)
예제 #28
0
def test_sending_empty_message(new_channel_and_user):
    """ Tests that an empty message will throw and error"""
    with pytest.raises(InputError):
        message_send(new_channel_and_user['token'],
                     new_channel_and_user['channel_id'], '')
예제 #29
0
def message_send_wsgi():
    json = request.get_json()
    return jsonify(
        message_send(json['token'], int(int(json['channel_id'])),
                     json['message']))
예제 #30
0
def test_sending_with_invalid_token(new_channel_and_user):
    """ Tests that an access error is thrown when an an invalid token is used """
    with pytest.raises(AccessError):
        message_send('invalid token', new_channel_and_user['channel_id'], 'a')