blob: bed93764e003429380c0d1753e6c2f7c9d2ac307 [file] [log] [blame]
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {
getCodeReviewVotesFromMessage,
getRevertCreatedChangeIds,
} from './message-util';
import {assert} from '@open-wc/testing';
import {MessageTag} from '../constants/constants';
import {
AccountInfo,
ChangeId,
ChangeInfo,
ChangeMessageInfo,
LabelNameToInfoMap,
PatchSetNum,
ReviewInputTag,
} from '../api/rest-api';
import {
createAccountWithId,
createChange,
createChangeMessage,
createDetailedLabelInfo,
} from '../test/test-data-generators';
suite('message-util tests', () => {
suite('getRevertCreatedChangeIds', () => {
test('getRevertCreatedChangeIds', () => {
const messages = [
{
...createChangeMessage(),
message:
'Created a revert of this change as If02ca1cd494579d6bb92a157bf1819e3689cd6b1',
tag: MessageTag.TAG_REVERT as ReviewInputTag,
},
{
...createChangeMessage(),
message: 'Created a revert of this change as abc',
tag: undefined,
},
];
assert.deepEqual(getRevertCreatedChangeIds(messages), [
'If02ca1cd494579d6bb92a157bf1819e3689cd6b1' as ChangeId,
]);
});
test('getRevertCreatedChangeIds with extra spam', () => {
const messages = [
{
...createChangeMessage(),
message:
'Created a revert of this change as IIf02ca1cd494579d6bb92a157bf1819e3689cd6b1',
tag: MessageTag.TAG_REVERT as ReviewInputTag,
},
{
...createChangeMessage(),
message: 'Created a revert of this change as abc',
tag: undefined,
},
];
assert.deepEqual(getRevertCreatedChangeIds(messages), [
'If02ca1cd494579d6bb92a157bf1819e3689cd6b1' as ChangeId,
]);
});
});
suite('getCodeReviewVotesFromMessage', () => {
const account1: AccountInfo = {
...createAccountWithId(1),
};
const account2: AccountInfo = {
...createAccountWithId(2),
};
const labels: LabelNameToInfoMap = {
'Code-Review': createDetailedLabelInfo(),
};
function createMessage(
author: AccountInfo,
message: string,
ps: number
): ChangeMessageInfo {
return {
...createChangeMessage(),
author,
message,
_revision_number: ps as PatchSetNum,
};
}
test('no messages', () => {
const change: ChangeInfo = {
...createChange(),
messages: [],
labels,
};
const actual = getCodeReviewVotesFromMessage(change, account1);
assert.equal(actual.size, 0);
});
test('no messages from account', () => {
const change: ChangeInfo = {
...createChange(),
messages: [createMessage(account2, 'Patch Set 1: Code-Review+1', 1)],
labels,
};
const actual = getCodeReviewVotesFromMessage(change, account1);
assert.equal(actual.size, 0);
});
test('one message with code review vote', () => {
const change: ChangeInfo = {
...createChange(),
messages: [createMessage(account1, 'Patch Set 1: Code-Review+1', 1)],
labels,
};
const actual = getCodeReviewVotesFromMessage(change, account1);
assert.deepEqual(
actual,
new Map([[1 as PatchSetNum, {label: 'Code-Review', value: '+1'}]])
);
});
test('vote reset', () => {
const change: ChangeInfo = {
...createChange(),
messages: [createMessage(account1, 'Patch Set 1: Code-Review-1', 1)],
labels,
};
const actual = getCodeReviewVotesFromMessage(change, account1);
assert.deepEqual(
actual,
new Map([[1 as PatchSetNum, {label: 'Code-Review', value: '-1'}]])
);
});
test('latest message wins for same patchset', () => {
const change: ChangeInfo = {
...createChange(),
messages: [
createMessage(account1, 'Patch Set 1: Code-Review-1', 1),
createMessage(account1, 'Patch Set 1: Code-Review+1', 1),
],
labels,
};
const actual = getCodeReviewVotesFromMessage(change, account1);
assert.deepEqual(
actual,
new Map([[1 as PatchSetNum, {label: 'Code-Review', value: '+1'}]])
);
});
test('messages from different users', () => {
const change: ChangeInfo = {
...createChange(),
messages: [
createMessage(account1, 'Patch Set 1: Code-Review+1', 1),
createMessage(account2, 'Patch Set 1: Code-Review-1', 1),
],
labels,
};
const actual = getCodeReviewVotesFromMessage(change, account1);
assert.deepEqual(
actual,
new Map([[1 as PatchSetNum, {label: 'Code-Review', value: '+1'}]])
);
});
test('messages for different patchsets', () => {
const change: ChangeInfo = {
...createChange(),
messages: [
createMessage(account1, 'Patch Set 1: Code-Review-1', 1),
createMessage(account1, 'Patch Set 2: Code-Review+1', 2),
],
labels,
};
const actual = getCodeReviewVotesFromMessage(change, account1);
assert.deepEqual(
actual,
new Map([
[1 as PatchSetNum, {label: 'Code-Review', value: '-1'}],
[2 as PatchSetNum, {label: 'Code-Review', value: '+1'}],
])
);
});
});
});