mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			158 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const assert = require("node:assert/strict");
 | 
						|
 | 
						|
const {zrequire} = require("./lib/namespace.cjs");
 | 
						|
const {run_test} = require("./lib/test.cjs");
 | 
						|
 | 
						|
const user_topics = zrequire("user_topics");
 | 
						|
const muted_users = zrequire("muted_users");
 | 
						|
const people = zrequire("people");
 | 
						|
const pmc = zrequire("pm_conversations");
 | 
						|
const {set_current_user} = zrequire("state_data");
 | 
						|
 | 
						|
const current_user = {};
 | 
						|
set_current_user(current_user);
 | 
						|
 | 
						|
const alice = {
 | 
						|
    user_id: 1,
 | 
						|
    email: "alice@example.com",
 | 
						|
    full_name: "Alice",
 | 
						|
};
 | 
						|
 | 
						|
const isaac = {
 | 
						|
    user_id: 2,
 | 
						|
    email: "isaac@example.com",
 | 
						|
    full_name: "Isaac",
 | 
						|
};
 | 
						|
 | 
						|
const alex = {
 | 
						|
    user_id: 3,
 | 
						|
    email: "alex@example.com",
 | 
						|
    full_name: "Alex",
 | 
						|
};
 | 
						|
 | 
						|
const me = {
 | 
						|
    user_id: 15,
 | 
						|
    email: "me@example.com",
 | 
						|
    full_name: "Me",
 | 
						|
};
 | 
						|
 | 
						|
people.add_active_user(alice);
 | 
						|
people.add_active_user(isaac);
 | 
						|
people.add_active_user(alex);
 | 
						|
people.add_active_user(me);
 | 
						|
 | 
						|
const params = {
 | 
						|
    recent_private_conversations: [
 | 
						|
        {user_ids: [alice.user_id], max_message_id: 100},
 | 
						|
        {user_ids: [alex.user_id], max_message_id: 99},
 | 
						|
        {user_ids: [alice.user_id, isaac.user_id], max_message_id: 98},
 | 
						|
        {user_ids: [alice.user_id, isaac.user_id, alex.user_id], max_message_id: 97},
 | 
						|
        {user_ids: [me.user_id], max_message_id: 96}, // self
 | 
						|
    ],
 | 
						|
};
 | 
						|
 | 
						|
function test(label, f) {
 | 
						|
    run_test(label, ({override}) => {
 | 
						|
        pmc.clear_for_testing();
 | 
						|
        user_topics.set_user_topics([]);
 | 
						|
        muted_users.set_muted_users([]);
 | 
						|
        people.initialize_current_user(me.user_id);
 | 
						|
        f({override});
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
test("partners", () => {
 | 
						|
    const user1_id = 1;
 | 
						|
    const user2_id = 2;
 | 
						|
    const user3_id = 3;
 | 
						|
 | 
						|
    pmc.set_partner(user1_id);
 | 
						|
    pmc.set_partner(user3_id);
 | 
						|
 | 
						|
    assert.equal(pmc.is_partner(user1_id), true);
 | 
						|
    assert.equal(pmc.is_partner(user2_id), false);
 | 
						|
    assert.equal(pmc.is_partner(user3_id), true);
 | 
						|
});
 | 
						|
 | 
						|
test("insert_recent_private_message", () => {
 | 
						|
    pmc.recent.initialize(params);
 | 
						|
 | 
						|
    // Base data
 | 
						|
    assert.deepEqual(pmc.recent.get(), [
 | 
						|
        {user_ids_string: "1", max_message_id: 100},
 | 
						|
        {user_ids_string: "3", max_message_id: 99},
 | 
						|
        {user_ids_string: "1,2", max_message_id: 98},
 | 
						|
        {user_ids_string: "1,2,3", max_message_id: 97},
 | 
						|
        {user_ids_string: "15", max_message_id: 96},
 | 
						|
    ]);
 | 
						|
 | 
						|
    // Insert new messages (which should rearrange these entries).
 | 
						|
    pmc.recent.insert([1], 1000);
 | 
						|
    pmc.recent.insert([1, 2, 3], 999);
 | 
						|
    // direct message to oneself
 | 
						|
    pmc.recent.insert([], 101);
 | 
						|
 | 
						|
    // Try to backdate user1's latest message.
 | 
						|
    pmc.recent.insert([1], 555);
 | 
						|
 | 
						|
    assert.deepEqual(pmc.recent.get(), [
 | 
						|
        {user_ids_string: "1", max_message_id: 1000},
 | 
						|
        {user_ids_string: "1,2,3", max_message_id: 999},
 | 
						|
        {user_ids_string: "15", max_message_id: 101},
 | 
						|
        {user_ids_string: "3", max_message_id: 99},
 | 
						|
        {user_ids_string: "1,2", max_message_id: 98},
 | 
						|
    ]);
 | 
						|
    assert.deepEqual(pmc.recent.get_strings(), ["1", "1,2,3", "15", "3", "1,2"]);
 | 
						|
});
 | 
						|
 | 
						|
test("muted_users", () => {
 | 
						|
    pmc.recent.initialize(params);
 | 
						|
 | 
						|
    // Base data
 | 
						|
    assert.deepEqual(pmc.recent.get(), [
 | 
						|
        {user_ids_string: "1", max_message_id: 100},
 | 
						|
        {user_ids_string: "3", max_message_id: 99},
 | 
						|
        {user_ids_string: "1,2", max_message_id: 98},
 | 
						|
        {user_ids_string: "1,2,3", max_message_id: 97},
 | 
						|
        {user_ids_string: "15", max_message_id: 96},
 | 
						|
    ]);
 | 
						|
    assert.deepEqual(pmc.recent.get_strings(), ["1", "3", "1,2", "1,2,3", "15"]);
 | 
						|
 | 
						|
    // Mute some users.
 | 
						|
    muted_users.add_muted_user(1);
 | 
						|
    muted_users.add_muted_user(2);
 | 
						|
 | 
						|
    // We should now get back only those messages which are either-
 | 
						|
    // 1:1 direct messages in which the other user hasn't been muted.
 | 
						|
    // Direct message groups where there's at least one non-muted participant.
 | 
						|
    assert.deepEqual(pmc.recent.get(), [
 | 
						|
        {user_ids_string: "3", max_message_id: 99},
 | 
						|
        {user_ids_string: "1,2,3", max_message_id: 97},
 | 
						|
        {user_ids_string: "15", max_message_id: 96},
 | 
						|
    ]);
 | 
						|
    assert.deepEqual(pmc.recent.get_strings(), ["3", "1,2,3", "15"]);
 | 
						|
});
 | 
						|
 | 
						|
test("has_conversation", ({override}) => {
 | 
						|
    override(current_user, "user_id", me.user_id);
 | 
						|
    pmc.recent.initialize(params);
 | 
						|
 | 
						|
    // Tests if `has_conversation` returns `true` when there are previous
 | 
						|
    // messages in the conversation.
 | 
						|
    assert.ok(pmc.recent.has_conversation("1"));
 | 
						|
    assert.ok(pmc.recent.has_conversation("15"));
 | 
						|
    assert.ok(pmc.recent.has_conversation("1,2"));
 | 
						|
    assert.ok(pmc.recent.has_conversation("1,2,15"));
 | 
						|
    // Check that we canonicalize to sorted order. This isn't
 | 
						|
    // functionality we rely on, but seems worth testing.
 | 
						|
    assert.ok(pmc.recent.has_conversation("2,1,15"));
 | 
						|
 | 
						|
    // Since the current filter does not match the DM view, there may be
 | 
						|
    // messages in the conversation which are not fetched yet.
 | 
						|
    assert.ok(!pmc.recent.has_conversation("1,3"));
 | 
						|
    assert.ok(!pmc.recent.has_conversation("2"));
 | 
						|
    assert.ok(!pmc.recent.has_conversation("72"));
 | 
						|
});
 |