mirror of
https://github.com/zulip/zulip.git
synced 2025-11-11 17:36:27 +00:00
This improves the logic and fixes the bug where the href was calculated based on the current URL and not the filter of the current message list. We now add the '/streams/public/' operator at the start of the operators, similar to how it is represented in all other cases. Fixes #15405
186 lines
4.8 KiB
JavaScript
186 lines
4.8 KiB
JavaScript
|
|
zrequire('hash_util');
|
|
zrequire('stream_data');
|
|
zrequire('people');
|
|
zrequire('Filter', 'js/filter');
|
|
zrequire('narrow_state');
|
|
|
|
set_global('location', {
|
|
protocol: "https:",
|
|
host: "example.com",
|
|
pathname: "/",
|
|
});
|
|
|
|
const hamlet = {
|
|
user_id: 1,
|
|
email: 'hamlet@example.com',
|
|
full_name: 'Hamlet',
|
|
};
|
|
|
|
people.add_active_user(hamlet);
|
|
|
|
const frontend = {
|
|
stream_id: 99,
|
|
name: 'frontend',
|
|
};
|
|
|
|
stream_data.add_sub(frontend);
|
|
|
|
run_test('hash_util', () => {
|
|
// Test encodeHashComponent
|
|
const str = 'https://www.zulipexample.com';
|
|
const result1 = hash_util.encodeHashComponent(str);
|
|
assert.equal(result1, 'https.3A.2F.2Fwww.2Ezulipexample.2Ecom');
|
|
|
|
// Test decodeHashComponent
|
|
const result2 = hash_util.decodeHashComponent(result1);
|
|
assert.equal(result2, str);
|
|
|
|
// Test encode_operand and decode_operand
|
|
|
|
function encode_decode_operand(operator, operand, expected_val) {
|
|
const encode_result = hash_util.encode_operand(operator, operand);
|
|
assert.equal(encode_result, expected_val);
|
|
const new_operand = encode_result;
|
|
const decode_result = hash_util.decode_operand(operator, new_operand);
|
|
assert.equal(decode_result, operand);
|
|
}
|
|
|
|
let operator = 'sender';
|
|
let operand = hamlet.email;
|
|
|
|
encode_decode_operand(operator, operand, '1-hamlet');
|
|
|
|
operator = 'stream';
|
|
operand = 'frontend';
|
|
|
|
encode_decode_operand(operator, operand, '99-frontend');
|
|
|
|
operator = 'topic';
|
|
operand = 'testing 123';
|
|
|
|
encode_decode_operand(operator, operand, 'testing.20123');
|
|
});
|
|
|
|
run_test('test_get_hash_category', () => {
|
|
assert.deepEqual(
|
|
hash_util.get_hash_category('streams/subscribed'),
|
|
'streams'
|
|
);
|
|
assert.deepEqual(
|
|
hash_util.get_hash_category('#settings/display-settings'),
|
|
'settings'
|
|
);
|
|
assert.deepEqual(
|
|
hash_util.get_hash_category('#drafts'),
|
|
'drafts'
|
|
);
|
|
assert.deepEqual(
|
|
hash_util.get_hash_category('invites'),
|
|
'invites'
|
|
);
|
|
});
|
|
|
|
run_test('test_get_hash_section', () => {
|
|
assert.equal(
|
|
hash_util.get_hash_section('streams/subscribed'),
|
|
'subscribed'
|
|
);
|
|
assert.equal(
|
|
hash_util.get_hash_section('#settings/your-account'),
|
|
'your-account'
|
|
);
|
|
|
|
assert.equal(
|
|
hash_util.get_hash_section('settings/10/general/'),
|
|
'10'
|
|
);
|
|
|
|
assert.equal(
|
|
hash_util.get_hash_section('#drafts'),
|
|
''
|
|
);
|
|
assert.equal(
|
|
hash_util.get_hash_section(''),
|
|
''
|
|
);
|
|
});
|
|
|
|
run_test('test_parse_narrow', () => {
|
|
assert.deepEqual(
|
|
hash_util.parse_narrow(['narrow', 'stream', '99-frontend']),
|
|
[{negated: false, operator: 'stream', operand: 'frontend'}]
|
|
);
|
|
|
|
assert.deepEqual(
|
|
hash_util.parse_narrow(['narrow', '-stream', '99-frontend']),
|
|
[{negated: true, operator: 'stream', operand: 'frontend'}]
|
|
);
|
|
|
|
assert.equal(
|
|
hash_util.parse_narrow(['narrow', 'BOGUS']),
|
|
undefined
|
|
);
|
|
|
|
// For nonexistent streams, we get the full slug.
|
|
// We possibly should remove the prefix and fix this test.
|
|
assert.deepEqual(
|
|
hash_util.parse_narrow(['narrow', 'stream', '42-bogus']),
|
|
[{negated: false, operator: 'stream', operand: '42-bogus'}]
|
|
);
|
|
});
|
|
|
|
run_test('test_stream_edit_uri', () => {
|
|
const sub = {
|
|
name: 'research & development',
|
|
stream_id: 42,
|
|
};
|
|
assert.equal(hash_util.stream_edit_uri(sub),
|
|
'#streams/42/research.20.26.20development');
|
|
});
|
|
|
|
run_test('test_by_conversation_and_time_uri', () => {
|
|
let message = {
|
|
type: 'stream',
|
|
stream_id: frontend.stream_id,
|
|
topic: 'testing',
|
|
id: 42,
|
|
};
|
|
|
|
assert.equal(hash_util.by_conversation_and_time_uri(message),
|
|
'https://example.com/#narrow/stream/99-frontend/topic/testing/near/42');
|
|
|
|
message = {
|
|
type: 'private',
|
|
display_recipient: [
|
|
{
|
|
id: hamlet.user_id,
|
|
},
|
|
],
|
|
id: 43,
|
|
};
|
|
|
|
assert.equal(hash_util.by_conversation_and_time_uri(message),
|
|
'https://example.com/#narrow/pm-with/1-pm/near/43');
|
|
});
|
|
|
|
run_test('test_search_public_streams_notice_url', () => {
|
|
function set_uri(uri) {
|
|
const operators = hash_util.parse_narrow(uri.split('/'));
|
|
narrow_state.set_current_filter(new Filter(operators));
|
|
}
|
|
|
|
set_uri("#narrow/search/abc");
|
|
assert.equal(hash_util.search_public_streams_notice_url(),
|
|
"#narrow/streams/public/search/abc");
|
|
|
|
|
|
set_uri("#narrow/has/link/has/image/has/attachment");
|
|
assert.equal(hash_util.search_public_streams_notice_url(),
|
|
"#narrow/streams/public/has/link/has/image/has/attachment");
|
|
|
|
set_uri("#narrow/sender/15");
|
|
assert.equal(hash_util.search_public_streams_notice_url(),
|
|
"#narrow/streams/public/sender/15");
|
|
});
|