def test_initial(test_data): a_data, b_data, c_data = test_data user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["channels_joined"][0]["num_channels_joined"] == 0 assert abs(user_stats["channels_joined"][0]["time_stamp"] - a_data["time_registered"]) <= 1 assert user_stats["dms_joined"][0]["num_dms_joined"] == 0 assert abs(user_stats["dms_joined"][0]["time_stamp"] - a_data["time_registered"]) <= 1 assert user_stats["messages_sent"][0]["num_messages_sent"] == 0 assert abs(user_stats["messages_sent"][0]["time_stamp"] - a_data["time_registered"]) <= 1 assert user_stats["involvement_rate"] == 0 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["channels_joined"][0]["num_channels_joined"] == 0 assert abs(user_stats["channels_joined"][0]["time_stamp"] - b_data["time_registered"]) <= 1 assert user_stats["dms_joined"][0]["num_dms_joined"] == 0 assert abs(user_stats["dms_joined"][0]["time_stamp"] - b_data["time_registered"]) <= 1 assert user_stats["messages_sent"][0]["num_messages_sent"] == 0 assert abs(user_stats["messages_sent"][0]["time_stamp"] - b_data["time_registered"]) <= 1 assert user_stats["involvement_rate"] == 0 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["channels_joined"][0]["num_channels_joined"] == 0 assert abs(user_stats["channels_joined"][0]["time_stamp"] - c_data["time_registered"]) <= 1 assert user_stats["dms_joined"][0]["num_dms_joined"] == 0 assert abs(user_stats["dms_joined"][0]["time_stamp"] - c_data["time_registered"]) <= 1 assert user_stats["messages_sent"][0]["num_messages_sent"] == 0 assert abs(user_stats["messages_sent"][0]["time_stamp"] - c_data["time_registered"]) <= 1 assert user_stats["involvement_rate"] == 0
def test_multi_channel_dm_and_messages_half_involved(reg_user, crt_channel, crt_dm, send_msg, involvement): clear_v2() user_1_token = reg_user(0)['token'] user_2 = reg_user(1) user_2_token = user_2['token'] user_2_id = user_2['auth_user_id'] crt_count = 10 for _ in range(crt_count): # User is involved in half of all activities inv_channel_id = crt_channel(user_1_token)['channel_id'] uninv_channel_id = crt_channel(user_2_token)['channel_id'] crt_dm(user_1_token, [user_2_id]) crt_dm(user_2_token, [user_2_id]) send_msg(user_1_token, inv_channel_id) send_msg(user_2_token, uninv_channel_id) user_stats = user_stats_v1(user_1_token)['user_stats'] inv = involvement(crt_count, crt_count, crt_count, 2 * crt_count, 2 * crt_count, 2 * crt_count) assert user_stats['channels_joined'][-1][ 'num_channels_joined'] == crt_count assert user_stats['dms_joined'][-1]['num_dms_joined'] == crt_count assert user_stats['messages_sent'][-1]['num_messages_sent'] == crt_count assert user_stats['involvement_rate'] == inv
def test_multi_channel_dm_and_messages_all_involved(reg_user, crt_channel, crt_dm, send_msg, involvement): clear_v2() user = reg_user(0) token = user['token'] user_id = user['auth_user_id'] crt_count = 10 for _ in range(crt_count): channel_id = crt_channel(token)['channel_id'] crt_dm(token, [user_id]) send_msg(token, channel_id) user_stats = user_stats_v1(token)['user_stats'] inv = involvement(crt_count, crt_count, crt_count, crt_count, crt_count, crt_count) assert user_stats['channels_joined'][-1][ 'num_channels_joined'] == crt_count assert user_stats['dms_joined'][-1]['num_dms_joined'] == crt_count assert user_stats['messages_sent'][-1]['num_messages_sent'] == crt_count assert user_stats['involvement_rate'] == inv
def test_one_channel_dm_and_message_all_involved(reg_user, crt_channel, crt_dm, send_msg, involvement): clear_v2() user = reg_user(0) token = user['token'] user_id = user['auth_user_id'] channel_id = crt_channel(token)['channel_id'] crt_dm(token, [user_id]) send_msg(token, channel_id) user_stats = user_stats_v1(token)['user_stats'] assert user_stats['channels_joined'][-1]['num_channels_joined'] == 1 assert user_stats['dms_joined'][-1]['num_dms_joined'] == 1 assert user_stats['messages_sent'][-1]['num_messages_sent'] == 1 assert user_stats['involvement_rate'] == involvement(1, 1, 1, 1, 1, 1)
def test_invalid_token(reg_user): clear_v2() reg_user(0) with pytest.raises(AccessError): user_stats_v1("Invalid token")
def test_channel(test_data): a_data, b_data, c_data = test_data # a creates a channel # a involvement should be 1 (only channel) # b involvement should be 0 a_ch_timestamp = datetime.now().replace(microsecond=0).timestamp() channels_create_v2(a_data["token"], "A channel", True) sleep(1) user_stats = user_stats_v1(a_data["token"])["user_stats"] # going to skip 0, as that is the init timestamp assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - a_ch_timestamp) <= 1 assert user_stats["involvement_rate"] == 1 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["channels_joined"][0]["num_channels_joined"] == 0 assert abs(user_stats["channels_joined"][0]["time_stamp"] - b_data["time_registered"]) <= 1 # b creates a channel # a and b should have the same involvement rate now (2 channels, each in different channels) b_ch_timestamp = datetime.now().replace(microsecond=0).timestamp() b_ch_id = channels_create_v2(b_data["token"], "B channel", True)["channel_id"] sleep(1) user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - b_ch_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.5 user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - a_ch_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.5 # b creates a second channel # b is now in 2/3 channels # a is in only 1/3 channels b2_ch_timestamp = datetime.now().replace(microsecond=0).timestamp() channels_create_v2(b_data["token"], "B2 channel", True)["channel_id"] sleep(1) user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - b_ch_timestamp) <= 1 assert user_stats["channels_joined"][2]["num_channels_joined"] == 2 assert abs(user_stats["channels_joined"][2]["time_stamp"] - b2_ch_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.67 user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - a_ch_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.33 c_ch_join_timestamp = datetime.now().replace(microsecond=0).timestamp() channel_join_v2(c_data["token"], b_ch_id) channel_addowner_v1(b_data["token"], b_ch_id, c_data["auth_user_id"]) sleep(1) # b leaves one of his channels # a, b c are now in 1/3 existing channels b_ch_leave_timestamp = datetime.now().replace(microsecond=0).timestamp() channel_leave_v1(b_data["token"], b_ch_id) sleep(1) user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - a_ch_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.33 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - b_ch_timestamp) <= 1 assert user_stats["channels_joined"][2]["num_channels_joined"] == 2 assert abs(user_stats["channels_joined"][2]["time_stamp"] - b2_ch_timestamp) <= 1 assert user_stats["channels_joined"][3]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][3]["time_stamp"] - b_ch_leave_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.33 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - c_ch_join_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.33
def test_invalid_token(test_data): a_data, _, _ = test_data a_ch_id = channels_create_v2(a_data["token"], "A channel", True)["channel_id"] message_send_v2(a_data["token"], a_ch_id, "Im a message") with pytest.raises(AccessError): user_stats_v1("") user_stats_v1(0) user_stats_v1(999328) user_stats_v1(-42) user_stats_v1("5912381") user_stats_v1("invalid.token.10586") user_stats_v1("bytasdoawqeawqdqafwa") user_stats_v1("ADWNUASMfaaAWwm") user_stats_v1("ASUIdb21d9ADsDi21") user_stats_v1("!)(%&@!*%#!$") user_stats_v1(" ")
def test_message(test_data): a_data, b_data, c_data = test_data a_ch_create_timestamp = datetime.now().replace(microsecond=0).timestamp() a_ch_id = channels_create_v2(a_data["token"], "A channel", True)["channel_id"] sleep(1) b_dm_create_timestamp = datetime.now().replace(microsecond=0).timestamp() b_dm_id = dm_create_v1(b_data["token"], [a_data["auth_user_id"], c_data["auth_user_id"]])["dm_id"] sleep(1) # 1 channel, 1 dm = 2 total user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - a_ch_create_timestamp) <= 1 assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 1 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.5 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.5 # a sends 2 messages in ch, b sends 1 in dm # 1 channel, 1 dm, 2msg, 1msgdm = 5 total a1_msg_send_timestamp = datetime.now().replace(microsecond=0).timestamp() a_msg_id = message_send_v2(a_data["token"], a_ch_id, "Im a message")["message_id"] sleep(1) a2_msg_send_timestamp = datetime.now().replace(microsecond=0).timestamp() a2_msg_id = message_send_v2(a_data["token"], a_ch_id, "Im a message to be shared")["message_id"] sleep(1) b1_msgdm_send_timestamp = datetime.now().replace(microsecond=0).timestamp() message_senddm_v1(b_data["token"], b_dm_id, "Im a message again") sleep(1) user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - a_ch_create_timestamp) <= 1 assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["messages_sent"][1]["num_messages_sent"] == 1 assert abs(user_stats["messages_sent"][1]["time_stamp"] - a1_msg_send_timestamp) <= 1 assert user_stats["messages_sent"][2]["num_messages_sent"] == 2 assert abs(user_stats["messages_sent"][2]["time_stamp"] - a2_msg_send_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.80 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["messages_sent"][1]["num_messages_sent"] == 1 assert abs(user_stats["messages_sent"][1]["time_stamp"] - b1_msgdm_send_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.40 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.2 # a shares a message # 1 channel, 1 dm, 3msg, 1msgdm = 6 total a_msg_share_timestamp = datetime.now().replace(microsecond=0).timestamp() message_share_v1(a_data["token"], a2_msg_id, "Look at this cool message", -1, b_dm_id) sleep(1) user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - a_ch_create_timestamp) <= 1 assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["messages_sent"][1]["num_messages_sent"] == 1 assert abs(user_stats["messages_sent"][1]["time_stamp"] - a1_msg_send_timestamp) <= 1 assert user_stats["messages_sent"][2]["num_messages_sent"] == 2 assert abs(user_stats["messages_sent"][2]["time_stamp"] - a2_msg_send_timestamp) <= 1 assert user_stats["messages_sent"][3]["num_messages_sent"] == 3 assert abs(user_stats["messages_sent"][3]["time_stamp"] - a_msg_share_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.83 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["messages_sent"][1]["num_messages_sent"] == 1 assert abs(user_stats["messages_sent"][1]["time_stamp"] - b1_msgdm_send_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.33 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.17 # a removes a1 message # 1 channel, 1 dm, 2msg, 1msgdm = 5 total message_remove_v1(a_data["token"], a_msg_id) sleep(1) # message send for 'a' never goes down but involvement will change user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["channels_joined"][1]["num_channels_joined"] == 1 assert abs(user_stats["channels_joined"][1]["time_stamp"] - a_ch_create_timestamp) <= 1 assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["messages_sent"][1]["num_messages_sent"] == 1 assert len(user_stats["messages_sent"]) == 4 assert abs(user_stats["messages_sent"][1]["time_stamp"] - a1_msg_send_timestamp) <= 1 assert user_stats["messages_sent"][2]["num_messages_sent"] == 2 assert abs(user_stats["messages_sent"][2]["time_stamp"] - a2_msg_send_timestamp) <= 1 assert user_stats["messages_sent"][3]["num_messages_sent"] == 3 assert abs(user_stats["messages_sent"][3]["time_stamp"] - a_msg_share_timestamp) <= 1 assert user_stats["involvement_rate"] == 1 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["messages_sent"][1]["num_messages_sent"] == 1 assert abs(user_stats["messages_sent"][1]["time_stamp"] - b1_msgdm_send_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.40 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.20
def test_dm(test_data): a_data, b_data, c_data = test_data # b makes dm with c # a inv. = 0 # b and c inv. = 1 b_dm_create_timestamp = datetime.now().replace(microsecond=0).timestamp() b_dm_id = dm_create_v1(b_data["token"], [c_data["auth_user_id"]])["dm_id"] sleep(1) user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["dms_joined"][0]["num_dms_joined"] == 0 assert abs(user_stats["dms_joined"][0]["time_stamp"] - a_data["time_registered"]) <= 1 assert user_stats["involvement_rate"] == 0 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 1 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 1 # a makes dm with b, c # a inv. = 0.5 # b and c inv. = 1 a_dm_create_timestamp = datetime.now().replace(microsecond=0).timestamp() a_dm_id = dm_create_v1(a_data["token"], [b_data["auth_user_id"], c_data["auth_user_id"]])["dm_id"] sleep(1) user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - a_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.5 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["dms_joined"][2]["num_dms_joined"] == 2 assert abs(user_stats["dms_joined"][2]["time_stamp"] - a_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 1 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["dms_joined"][2]["num_dms_joined"] == 2 assert abs(user_stats["dms_joined"][2]["time_stamp"] - a_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 1 # b leaves a dm # b inv. = 0.5 b_dm_leave_timestamp = datetime.now().replace(microsecond=0).timestamp() dm_leave_v1(b_data["token"], a_dm_id) sleep(1) user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["dms_joined"][2]["num_dms_joined"] == 2 assert abs(user_stats["dms_joined"][2]["time_stamp"] - a_dm_create_timestamp) <= 1 assert user_stats["dms_joined"][3]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][3]["time_stamp"] - b_dm_leave_timestamp) <= 1 assert user_stats["involvement_rate"] == 0.50 # b deletes b_dm # a and c inv. = 1 # b inv. = 0 b_dm_remove_timestamp = datetime.now().replace(microsecond=0).timestamp() dm_remove_v1(b_data["token"], b_dm_id) sleep(1) user_stats = user_stats_v1(a_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - a_dm_create_timestamp) <= 1 assert user_stats["involvement_rate"] == 1 user_stats = user_stats_v1(b_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["dms_joined"][2]["num_dms_joined"] == 2 assert abs(user_stats["dms_joined"][2]["time_stamp"] - a_dm_create_timestamp) <= 1 assert user_stats["dms_joined"][3]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][3]["time_stamp"] - b_dm_leave_timestamp) <= 1 assert user_stats["dms_joined"][4]["num_dms_joined"] == 0 assert abs(user_stats["dms_joined"][4]["time_stamp"] - b_dm_remove_timestamp) <= 1 assert user_stats["involvement_rate"] == 0 user_stats = user_stats_v1(c_data["token"])["user_stats"] assert user_stats["dms_joined"][1]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][1]["time_stamp"] - b_dm_create_timestamp) <= 1 assert user_stats["dms_joined"][2]["num_dms_joined"] == 2 assert abs(user_stats["dms_joined"][2]["time_stamp"] - a_dm_create_timestamp) <= 1 assert user_stats["dms_joined"][3]["num_dms_joined"] == 1 assert abs(user_stats["dms_joined"][3]["time_stamp"] - b_dm_remove_timestamp) <= 1 assert user_stats["involvement_rate"] == 1
def user_stats(): token = request.args.get('token') stats = user_stats_v1(token) return dumps(stats)