Files
zulip/frontend_tests/node_tests/hash_util.js
Ryan Rehman d59ccd4c0f message view: Fix link generation logic of the end of results notice.
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
2020-06-20 16:26:25 -07:00

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");
});