blob: 899b0519c1f2eb0cf98de7ff8de30fb83132ad06 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var assert = require("assert");
const { ReviewersForLabel } = require("../shared/reviewersForLabel");
describe("ReviewersForLabel", function () {
describe("assignNextReviewer()", function () {
it("should repeatedly assign the reviewer who reviewed least recently", function () {
const dateOfLastReviewAssignment = {
testReviewer1: 1,
testReviewer2: 3,
testReviewer3: 4,
testReviewer4: 2,
};
let reviewersForGo = new ReviewersForLabel("Go", {
dateOfLastReviewAssignment: dateOfLastReviewAssignment,
});
assert.equal(
"testReviewer1",
reviewersForGo.assignNextReviewer([
"testReviewer1",
"testReviewer2",
"testReviewer3",
"testReviewer4",
])
);
assert.equal(
"testReviewer4",
reviewersForGo.assignNextReviewer([
"testReviewer1",
"testReviewer2",
"testReviewer3",
"testReviewer4",
])
);
assert.equal(
"testReviewer2",
reviewersForGo.assignNextReviewer([
"testReviewer1",
"testReviewer2",
"testReviewer3",
"testReviewer4",
])
);
assert.equal(
"testReviewer3",
reviewersForGo.assignNextReviewer([
"testReviewer1",
"testReviewer2",
"testReviewer3",
"testReviewer4",
])
);
assert.equal(
"testReviewer1",
reviewersForGo.assignNextReviewer([
"testReviewer1",
"testReviewer2",
"testReviewer3",
"testReviewer4",
])
);
});
it("should assign a reviewer who hasnt reviewed before", function () {
const dateOfLastReviewAssignment = {
testReviewer1: 1,
testReviewer2: 2,
testReviewer3: 3,
testReviewer4: 4,
};
let reviewersForGo = new ReviewersForLabel("Go", {
dateOfLastReviewAssignment: dateOfLastReviewAssignment,
});
assert.equal(
"testReviewer5",
reviewersForGo.assignNextReviewer([
"testReviewer1",
"testReviewer2",
"testReviewer3",
"testReviewer4",
"testReviewer5",
])
);
});
it("should only assign reviewers in the availableReviewers list", function () {
const dateOfLastReviewAssignment = {
testReviewer1: 1,
testReviewer2: 2,
testReviewer3: 3,
testReviewer4: 4,
};
let reviewersForGo = new ReviewersForLabel("Go", {
dateOfLastReviewAssignment: dateOfLastReviewAssignment,
});
assert.equal(
"testReviewer2",
reviewersForGo.assignNextReviewer(["testReviewer4", "testReviewer2"])
);
});
it("should throw if no reviewer available", function () {
const dateOfLastReviewAssignment = {
testReviewer1: 1,
testReviewer2: 2,
testReviewer3: 3,
testReviewer4: 4,
};
let reviewersForGo = new ReviewersForLabel("Go", {
dateOfLastReviewAssignment: dateOfLastReviewAssignment,
});
assert.throws(() => reviewersForGo.assignNextReviewer([]));
});
});
describe("getBackupReviewer()", function () {
it("should pick the next least recently assigned reviewer from the label without updating timestamps", function () {
const dateOfLastReviewAssignment = {
testReviewer1: 10,
testReviewer2: 20,
testReviewer3: 30,
};
let reviewersForGo = new ReviewersForLabel("Go", {
dateOfLastReviewAssignment: { ...dateOfLastReviewAssignment },
});
const backup = reviewersForGo.getBackupReviewer(
["testReviewer1", "testReviewer2", "testReviewer3"],
"testReviewer1",
["fallback1"]
);
assert.equal(backup, "testReviewer2");
assert.deepEqual(
reviewersForGo.dateOfLastReviewAssignment,
dateOfLastReviewAssignment
);
});
it("should fall back to fallbackReviewers when label only has one available reviewer", function () {
const dateOfLastReviewAssignment = {
testReviewer1: 10,
fallback1: 50,
fallback2: 15,
};
let reviewersForSpanner = new ReviewersForLabel("spanner", {
dateOfLastReviewAssignment: { ...dateOfLastReviewAssignment },
});
const backup = reviewersForSpanner.getBackupReviewer(
["testReviewer1"],
"testReviewer1",
["testReviewer1", "fallback1", "fallback2"]
);
assert.equal(backup, "fallback2");
assert.deepEqual(
reviewersForSpanner.dateOfLastReviewAssignment,
dateOfLastReviewAssignment
);
});
});
});