Skip to content

Commit 735c7e6

Browse files
committed
fix: exclude pairing-only users from HackerRank review queue
Users who only opted into pairing sessions were still being sent HackerRank review requests. Now sortAndFilterUsers filters to only users with InterviewType.HACKERRANK before matching by language.
1 parent 86f9418 commit 735c7e6

3 files changed

Lines changed: 28 additions & 4 deletions

File tree

src/services/QueueService.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Time from '@/utils/time';
66
import { User } from '@models/User';
77
import { determineExpirationTime } from '@utils/reviewExpirationUtils';
88
import { containsAny } from '@utils/array';
9+
import { InterviewType } from '@bot/enums';
910

1011
export async function getInitialUsersForReview(
1112
languages: string[],
@@ -23,7 +24,10 @@ export function sortAndFilterUsers(
2324
excludedUserIds: Set<string> = new Set(),
2425
): User[] {
2526
const allowedUsers = users.filter(({ id }) => !excludedUserIds.has(id));
26-
const usersWithAMatchingLanguage = allowedUsers.filter(user =>
27+
const usersWithHackerRank = allowedUsers.filter(user =>
28+
user.interviewTypes.includes(InterviewType.HACKERRANK),
29+
);
30+
const usersWithAMatchingLanguage = usersWithHackerRank.filter(user =>
2731
containsAny(user.languages, languages),
2832
);
2933

src/services/__tests__/PositionInQueueService.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ describe('PositionInQueueService', () => {
88
languages: ['Java', 'C#'],
99
lastReviewedDate: 1,
1010
lastPairingReviewedDate: undefined,
11-
interviewTypes: [] as any,
11+
interviewTypes: ['hackerrank'] as any,
1212
formats: [] as any,
1313
};
1414
const user2 = {
@@ -17,7 +17,7 @@ describe('PositionInQueueService', () => {
1717
languages: ['Java', 'JavaScript'],
1818
lastReviewedDate: 2,
1919
lastPairingReviewedDate: undefined,
20-
interviewTypes: [] as any,
20+
interviewTypes: ['hackerrank'] as any,
2121
formats: [] as any,
2222
};
2323
const user3 = {
@@ -26,7 +26,7 @@ describe('PositionInQueueService', () => {
2626
languages: ['Java', 'C#', 'JavaScript'],
2727
lastReviewedDate: 3,
2828
lastPairingReviewedDate: undefined,
29-
interviewTypes: [] as any,
29+
interviewTypes: ['hackerrank'] as any,
3030
formats: [] as any,
3131
};
3232

src/services/__tests__/QueueService.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,26 @@ describe('Queue Service', () => {
159159
expect(actualUsers).toEqual([]);
160160
});
161161

162+
it('should not include users who do not have hackerrank in their interviewTypes', async () => {
163+
const pairingOnlyUser: User = {
164+
id: 'pairing-only',
165+
name: 'Pairing Only User',
166+
languages: ['Java', 'C#'],
167+
lastReviewedDate: 0,
168+
lastPairingReviewedDate: undefined,
169+
interviewTypes: ['pairing'] as any,
170+
formats: ['remote'] as any,
171+
};
172+
const users: User[] = [pairingOnlyUser, user1, user2];
173+
userRepo.listAll = jest.fn().mockResolvedValueOnce(users);
174+
175+
const actualUsers = await getInitialUsersForReview(['Java'], 5);
176+
177+
expect(actualUsers).not.toContainEqual(pairingOnlyUser);
178+
expect(actualUsers).toContainEqual(user1);
179+
expect(actualUsers).toContainEqual(user2);
180+
});
181+
162182
it('should not include any users that are pending on other active reviews', async () => {
163183
const activeReviews: ActiveReview[] = [
164184
{

0 commit comments

Comments
 (0)