Discriminator in username

This commit is contained in:
Fedor Indutny 2022-10-18 10:12:02 -07:00 committed by GitHub
parent 58f0012f14
commit 00f82a6d39
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
54 changed files with 2706 additions and 892 deletions

View file

@ -113,7 +113,7 @@ describe('LeftPaneComposeHelper', () => {
composeContacts: [],
composeGroups: [],
regionCode: 'US',
searchTerm: 'foo bar',
searchTerm: 'foobar',
isUsernamesEnabled: true,
uuidFetchState: {},
}).getRowCount(),
@ -124,7 +124,7 @@ describe('LeftPaneComposeHelper', () => {
composeContacts: [getDefaultConversation(), getDefaultConversation()],
composeGroups: [],
regionCode: 'US',
searchTerm: 'foo bar',
searchTerm: 'foobar',
isUsernamesEnabled: true,
uuidFetchState: {},
}).getRowCount(),
@ -135,7 +135,7 @@ describe('LeftPaneComposeHelper', () => {
composeContacts: [getDefaultConversation(), getDefaultConversation()],
composeGroups: [getDefaultConversation()],
regionCode: 'US',
searchTerm: 'foo bar',
searchTerm: 'foobar',
isUsernamesEnabled: true,
uuidFetchState: {},
}).getRowCount(),

View file

@ -3,15 +3,13 @@
import { assert } from 'chai';
import * as Username from '../../types/Username';
import * as Username from '../../util/Username';
describe('Username', () => {
describe('getUsernameFromSearch', () => {
const { getUsernameFromSearch } = Username;
it('matches invalid username searches', () => {
assert.strictEqual(getUsernameFromSearch('username!'), 'username!');
assert.strictEqual(getUsernameFromSearch('1username'), '1username');
assert.strictEqual(getUsernameFromSearch('use'), 'use');
assert.strictEqual(
getUsernameFromSearch('username9012345678901234567'),
@ -22,6 +20,7 @@ describe('Username', () => {
it('matches valid username searches', () => {
assert.strictEqual(getUsernameFromSearch('username_34'), 'username_34');
assert.strictEqual(getUsernameFromSearch('u5ername'), 'u5ername');
assert.strictEqual(getUsernameFromSearch('username.12'), 'username.12');
assert.strictEqual(getUsernameFromSearch('user'), 'user');
assert.strictEqual(
getUsernameFromSearch('username901234567890123456'),
@ -33,6 +32,7 @@ describe('Username', () => {
assert.strictEqual(getUsernameFromSearch('@username!'), 'username!');
assert.strictEqual(getUsernameFromSearch('@1username'), '1username');
assert.strictEqual(getUsernameFromSearch('@username_34'), 'username_34');
assert.strictEqual(getUsernameFromSearch('@username.34'), 'username.34');
assert.strictEqual(getUsernameFromSearch('@u5ername'), 'u5ername');
});
@ -40,6 +40,7 @@ describe('Username', () => {
assert.strictEqual(getUsernameFromSearch('username!@'), 'username!');
assert.strictEqual(getUsernameFromSearch('1username@'), '1username');
assert.strictEqual(getUsernameFromSearch('username_34@'), 'username_34');
assert.strictEqual(getUsernameFromSearch('username.34@'), 'username.34');
assert.strictEqual(getUsernameFromSearch('u5ername@'), 'u5ername');
});
@ -57,16 +58,18 @@ describe('Username', () => {
it('does not match invalid username searches', () => {
assert.isFalse(isValidUsername('username!'));
assert.isFalse(isValidUsername('1username'));
assert.isFalse(isValidUsername('use'));
assert.isFalse(isValidUsername('username9012345678901234567'));
assert.isFalse(isValidUsername('u'));
assert.isFalse(isValidUsername('username9012345678901234567890123'));
assert.isFalse(isValidUsername('username.abc'));
});
it('matches valid usernames', () => {
assert.isTrue(isValidUsername('username_34'));
assert.isTrue(isValidUsername('u5ername'));
assert.isTrue(isValidUsername('_username'));
assert.isTrue(isValidUsername('user'));
assert.isTrue(isValidUsername('username901234567890123456'));
assert.isTrue(isValidUsername('use'));
assert.isTrue(isValidUsername('username901234567890123456789012'));
assert.isTrue(isValidUsername('username.0123'));
});
it('does not match valid and invalid usernames with @ prefix or suffix', () => {

View file

@ -12,7 +12,9 @@ import {
parseSgnlHref,
parseCaptchaHref,
parseE164FromSignalDotMeHash,
parseUsernameFromSignalDotMeHash,
parseSignalHttpsLink,
generateUsernameLink,
rewriteSignalHrefsIfNecessary,
} from '../../util/sgnlHref';
@ -373,6 +375,48 @@ describe('sgnlHref', () => {
});
});
describe('parseUsernameFromSignalDotMeHash', () => {
it('returns undefined for invalid inputs', () => {
['', ' u/+18885551234', 'z/18885551234'].forEach(hash => {
assert.isUndefined(parseUsernameFromSignalDotMeHash(hash));
});
});
it('returns the username for valid inputs', () => {
assert.strictEqual(
parseUsernameFromSignalDotMeHash('u/signal.03'),
'signal.03'
);
assert.strictEqual(
parseUsernameFromSignalDotMeHash('u/signal%2F03'),
'signal/03'
);
});
});
describe('generateUsernameLink', () => {
it('generates regular link', () => {
assert.strictEqual(
generateUsernameLink('signal.03'),
'https://signal.me/#u/signal.03'
);
});
it('generates encoded link', () => {
assert.strictEqual(
generateUsernameLink('signal/03'),
'https://signal.me/#u/signal%2F03'
);
});
it('generates short link', () => {
assert.strictEqual(
generateUsernameLink('signal/03', { short: true }),
'signal.me/#u/signal%2F03'
);
});
});
describe('parseSignalHttpsLink', () => {
it('returns a null command for invalid URLs', () => {
['', 'https', 'https://example/?foo=bar'].forEach(href => {