blob: 5bd19249523ae54c9221bb81dc4da36588b7fec7 [file] [log] [blame]
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import '../test/common-test-setup';
import {
createAccountDetailWithIdNameAndEmail,
createAccountWithId,
createChange,
createComment,
createCommentThread,
createParsedChange,
createServerInfo,
} from '../test/test-data-generators';
import {
AccountId,
AccountInfo,
ChangeInfo,
EmailAddress,
ServerInfo,
} from '../types/common';
import {
getMentionedReason,
getReason,
hasAttention,
sortReviewers,
} from './attention-set-util';
import {DefaultDisplayNameConfig} from '../api/rest-api';
import {AccountsVisibility, AccountTag} from '../constants/constants';
import {assert} from '@open-wc/testing';
const KERMIT: AccountInfo = {
email: 'kermit@gmail.com' as EmailAddress,
username: 'kermit',
name: 'Kermit The Frog',
_account_id: 31415926535 as AccountId,
};
const OTHER_ACCOUNT: AccountInfo = {
email: 'other@gmail.com' as EmailAddress,
username: 'other',
name: 'Other User',
_account_id: 31415926536 as AccountId,
};
const MENTION_ACCOUNT: AccountInfo = {
email: 'mention@gmail.com' as EmailAddress,
username: 'mention',
name: 'Mention User',
_account_id: 31415926537 as AccountId,
};
const MENTION_ACCOUNT_2: AccountInfo = {
email: 'mention2@gmail.com' as EmailAddress,
username: 'mention2',
name: 'Mention2 User',
_account_id: 31415926538 as AccountId,
};
const change: ChangeInfo = {
...createChange(),
attention_set: {
'31415926535': {
account: KERMIT,
reason: 'a good reason',
},
'31415926536': {
account: OTHER_ACCOUNT,
reason: 'Added by <GERRIT_ACCOUNT_31415926535>',
reason_account: KERMIT,
},
'31415926537': {
account: MENTION_ACCOUNT,
reason: '<GERRIT_ACCOUNT_31415926535> replied on the change',
reason_account: KERMIT,
},
'31415926538': {
account: MENTION_ACCOUNT_2,
reason: 'Bot voted negatively on the change',
reason_account: KERMIT,
},
},
};
const config: ServerInfo = {
...createServerInfo(),
user: {
anonymous_coward_name: 'Unidentified User',
},
accounts: {
visibility: AccountsVisibility.ALL,
default_display_name: DefaultDisplayNameConfig.USERNAME,
},
};
suite('attention-set-util', () => {
test('hasAttention', () => {
assert.isTrue(hasAttention(KERMIT, change));
});
test('getReason', () => {
assert.equal(getReason(config, KERMIT, change), 'a good reason');
assert.equal(getReason(config, OTHER_ACCOUNT, change), 'Added by kermit');
});
test('sortReviewers', () => {
const a1 = createAccountWithId(1);
a1.tags = [AccountTag.SERVICE_USER];
const a2 = createAccountWithId(2);
a2.tags = [AccountTag.SERVICE_USER];
const a3 = createAccountWithId(3);
const a4 = createAccountWithId(4);
const a5 = createAccountWithId(5);
const a6 = createAccountWithId(6);
const a7 = createAccountWithId(7);
const reviewers = [a1, a2, a3, a4, a5, a6, a7];
const change = {
...createParsedChange(),
attention_set: {'6': {account: a6}},
labels: {
'Code-Review': {
all: [
{...a2, value: 1},
{...a4, value: 1},
{...a5, value: -1},
],
},
},
};
assert.sameOrderedMembers(
reviewers.sort((r1, r2) => sortReviewers(r1, r2, change, a7)),
[
a7, // self
a6, // is in the attention set
a5, // human user, has voted -1
a4, // human user, has voted +1
a3, // human user, has not voted
a2, // service user, has voted
a1, // service user, has not voted
]
);
});
test('getMentionReason', () => {
let comment = {
...createComment(),
message: `hey @${MENTION_ACCOUNT.email} take a look at this`,
unresolved: true,
author: {
...createAccountDetailWithIdNameAndEmail(1),
},
};
assert.equal(
getMentionedReason(
[createCommentThread([comment])],
KERMIT,
KERMIT,
config
),
'<GERRIT_ACCOUNT_31415926535> replied on the change'
);
assert.equal(
getMentionedReason(
[createCommentThread([comment])],
KERMIT,
MENTION_ACCOUNT,
config
),
'<GERRIT_ACCOUNT_31415926535> mentioned you in a comment'
);
// resolved mention hence does not change reason
comment = {
...createComment(),
message: `hey @${MENTION_ACCOUNT.email} take a look at this`,
unresolved: false,
author: {
...createAccountDetailWithIdNameAndEmail(1),
},
};
assert.equal(
getMentionedReason(
[createCommentThread([comment])],
KERMIT,
MENTION_ACCOUNT,
config
),
'<GERRIT_ACCOUNT_31415926535> replied on the change'
);
});
});