Skip to content

Commit dde171a

Browse files
authored
test: switch to vitest (#326)
1 parent 8b5cb2f commit dde171a

13 files changed

+835
-2575
lines changed

jest.config.js

Lines changed: 0 additions & 20 deletions
This file was deleted.

package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"start": "probot run ./lib/index.js",
1212
"prettier:write": "prettier --write \"{src,spec}/**/*.ts\"",
1313
"lint": "prettier --check \"{src,spec}/**/*.ts\"",
14-
"test": "jest --testPathIgnorePatterns=/working/ --testPathIgnorePatterns=/node_modules/",
14+
"test": "vitest run",
1515
"postinstall": "tsc",
1616
"prepare": "husky"
1717
},
@@ -27,7 +27,6 @@
2727
"yaml": "^2.3.1"
2828
},
2929
"devDependencies": {
30-
"@types/jest": "^29.5.14",
3130
"@types/node": "^22.9.0",
3231
"@types/node-fetch": "^2.6.11",
3332
"@types/pino-std-serializers": "^4.0.0",
@@ -38,13 +37,12 @@
3837
"eslint-plugin-n": "^15.0.0",
3938
"eslint-plugin-promise": "^6.0.0",
4039
"husky": "^9.1.6",
41-
"jest": "^29.7.0",
4240
"lint-staged": "^15.2.10",
4341
"nock": "^13.5.5",
4442
"prettier": "^3.3.3",
4543
"smee-client": "^2.0.4",
46-
"ts-jest": "^29.2.5",
47-
"typescript": "*"
44+
"typescript": "*",
45+
"vitest": "^3.0.2"
4846
},
4947
"lint-staged": {
5048
"{src,spec}/**/*.ts": "prettier --write **/*.ts"

spec/branch-util.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { describe, expect, it } from 'vitest';
2+
13
import { BranchMatcher, getBackportPattern } from '../src/utils/branch-util';
24

35
describe('getBackportPattern', () => {

spec/commands.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { describe, expect, it } from 'vitest';
2+
13
import * as commands from '../src/constants';
24

35
describe('commands', () => {

spec/index.spec.ts

Lines changed: 57 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { promises as fs } from 'fs';
2-
import * as nock from 'nock';
32
import { posix as path } from 'path';
3+
import { execSync } from 'child_process';
44

5+
import nock from 'nock';
56
import { Probot, ProbotOctokit } from 'probot';
7+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
68

79
import { SKIP_CHECK_LABEL } from '../src/constants';
810
import { CheckRunStatus, PRChange } from '../src/enums';
9-
import { ProbotHandler } from '../src/index';
11+
import { default as trop } from '../src/index';
1012
import {
1113
backportToBranch,
1214
backportToLabel,
@@ -16,8 +18,6 @@ import { updateManualBackport } from '../src/operations/update-manual-backport';
1618
import { labelClosedPR, getPRNumbersFromPRBody } from '../src/utils';
1719
import * as checkUtils from '../src/utils/checks-util';
1820

19-
const trop: ProbotHandler = require('../src/index');
20-
2121
// event fixtures
2222
const prClosedEvent = require('./fixtures/pull_request.closed.json');
2323
const issueCommentBackportCreatedEvent = require('./fixtures/issue_comment_backport.created.json');
@@ -53,51 +53,51 @@ const targetLabel = {
5353
color: 'fff',
5454
};
5555

56-
jest.mock('../src/utils', () => ({
57-
labelClosedPR: jest.fn(),
58-
isAuthorizedUser: jest.fn().mockResolvedValue([true]),
59-
getPRNumbersFromPRBody: jest.fn().mockReturnValue([12345]),
56+
vi.mock('../src/utils', () => ({
57+
labelClosedPR: vi.fn(),
58+
isAuthorizedUser: vi.fn().mockResolvedValue([true]),
59+
getPRNumbersFromPRBody: vi.fn().mockReturnValue([12345]),
6060
}));
6161

62-
jest.mock('../src/utils/env-util', () => ({
63-
getEnvVar: jest.fn(),
62+
vi.mock('../src/utils/env-util', () => ({
63+
getEnvVar: vi.fn(),
6464
}));
6565

66-
jest.mock('../src/operations/update-manual-backport', () => ({
67-
updateManualBackport: jest.fn(),
66+
vi.mock('../src/operations/update-manual-backport', () => ({
67+
updateManualBackport: vi.fn(),
6868
}));
6969

70-
jest.mock('../src/operations/backport-to-location', () => ({
71-
backportToBranch: jest.fn(),
72-
backportToLabel: jest.fn(),
70+
vi.mock('../src/operations/backport-to-location', () => ({
71+
backportToBranch: vi.fn(),
72+
backportToLabel: vi.fn(),
7373
}));
7474

75-
jest.mock('../src/utils/checks-util', () => ({
76-
updateBackportValidityCheck: jest.fn(),
77-
getBackportInformationCheck: jest.fn().mockResolvedValue({ status: 'thing' }),
78-
updateBackportInformationCheck: jest.fn().mockResolvedValue(undefined),
79-
queueBackportInformationCheck: jest.fn().mockResolvedValue(undefined),
75+
vi.mock('../src/utils/checks-util', () => ({
76+
updateBackportValidityCheck: vi.fn(),
77+
getBackportInformationCheck: vi.fn().mockResolvedValue({ status: 'thing' }),
78+
updateBackportInformationCheck: vi.fn().mockResolvedValue(undefined),
79+
queueBackportInformationCheck: vi.fn().mockResolvedValue(undefined),
8080
}));
8181

8282
describe('trop', () => {
8383
let robot: Probot;
8484
let octokit: any;
85-
process.env = { BOT_USER_NAME: 'trop[bot]' };
85+
process.env = { ...process.env, BOT_USER_NAME: 'trop[bot]' };
8686

8787
beforeEach(() => {
8888
nock.disableNetConnect();
8989
octokit = {
9090
repos: {
91-
getBranch: jest.fn().mockResolvedValue(undefined),
92-
listBranches: jest.fn().mockResolvedValue({
91+
getBranch: vi.fn().mockResolvedValue(undefined),
92+
listBranches: vi.fn().mockResolvedValue({
9393
data: [{ name: '8-x-y' }, { name: '7-1-x' }],
9494
}),
9595
},
9696
git: {
97-
deleteRef: jest.fn().mockResolvedValue(undefined),
97+
deleteRef: vi.fn().mockResolvedValue(undefined),
9898
},
9999
pulls: {
100-
get: jest.fn().mockResolvedValue({
100+
get: vi.fn().mockResolvedValue({
101101
data: {
102102
merged: true,
103103
head: {
@@ -114,11 +114,11 @@ describe('trop', () => {
114114
}),
115115
},
116116
issues: {
117-
addLabels: jest.fn().mockResolvedValue({}),
118-
removeLabel: jest.fn().mockResolvedValue({}),
119-
createLabel: jest.fn().mockResolvedValue({}),
120-
createComment: jest.fn().mockResolvedValue({}),
121-
listLabelsOnIssue: jest.fn().mockResolvedValue({
117+
addLabels: vi.fn().mockResolvedValue({}),
118+
removeLabel: vi.fn().mockResolvedValue({}),
119+
createLabel: vi.fn().mockResolvedValue({}),
120+
createComment: vi.fn().mockResolvedValue({}),
121+
listLabelsOnIssue: vi.fn().mockResolvedValue({
122122
data: [
123123
{
124124
id: 208045946,
@@ -131,8 +131,8 @@ describe('trop', () => {
131131
}),
132132
},
133133
checks: {
134-
listForRef: jest.fn().mockResolvedValue({ data: { check_runs: [] } }),
135-
create: jest.fn().mockResolvedValue({ data: jest.fn() }),
134+
listForRef: vi.fn().mockResolvedValue({ data: { check_runs: [] } }),
135+
create: vi.fn().mockResolvedValue({ data: vi.fn() }),
136136
},
137137
};
138138

@@ -163,7 +163,7 @@ describe('trop', () => {
163163
});
164164

165165
it('does not trigger the backport on comment if the PR is not merged', async () => {
166-
octokit.pulls.get = jest
166+
octokit.pulls.get = vi
167167
.fn()
168168
.mockResolvedValue({ data: { merged: false } });
169169

@@ -199,7 +199,7 @@ describe('trop', () => {
199199
});
200200

201201
it('does not trigger the backport on comment to a targeted branch if the branch does not exist', async () => {
202-
octokit.repos.getBranch = jest
202+
octokit.repos.getBranch = vi
203203
.fn()
204204
.mockReturnValue(Promise.reject(new Error('404')));
205205
await robot.receive(issueCommentBackportToCreatedEvent);
@@ -230,7 +230,7 @@ describe('trop', () => {
230230
});
231231

232232
it('fails the check if there is conflicting backport information in a new PR', async () => {
233-
jest.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
233+
vi.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
234234

235235
const event = JSON.parse(
236236
await fs.readFile(newPROpenedEventPath, 'utf-8'),
@@ -240,9 +240,8 @@ describe('trop', () => {
240240

241241
await robot.receive(event);
242242

243-
const updatePayload = jest.mocked(
244-
checkUtils.updateBackportInformationCheck,
245-
).mock.calls[0][2];
243+
const updatePayload = vi.mocked(checkUtils.updateBackportInformationCheck)
244+
.mock.calls[0][2];
246245

247246
expect(updatePayload).toMatchObject({
248247
title: 'Conflicting Backport Information',
@@ -253,7 +252,7 @@ describe('trop', () => {
253252
});
254253

255254
it('passes the check if there is a "no-backport" label and no "target/" label in a new PR', async () => {
256-
jest.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
255+
vi.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
257256

258257
const event = JSON.parse(
259258
await fs.readFile(newPROpenedEventPath, 'utf-8'),
@@ -263,9 +262,8 @@ describe('trop', () => {
263262

264263
await robot.receive(event);
265264

266-
const updatePayload = jest.mocked(
267-
checkUtils.updateBackportInformationCheck,
268-
).mock.calls[0][2];
265+
const updatePayload = vi.mocked(checkUtils.updateBackportInformationCheck)
266+
.mock.calls[0][2];
269267

270268
expect(updatePayload).toMatchObject({
271269
title: 'Backport Information Provided',
@@ -275,7 +273,7 @@ describe('trop', () => {
275273
});
276274

277275
it('passes the check if there is no "no-backport" label and a "target/" label in a new PR', async () => {
278-
jest.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
276+
vi.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
279277

280278
const event = JSON.parse(
281279
await fs.readFile(newPROpenedEventPath, 'utf-8'),
@@ -285,9 +283,8 @@ describe('trop', () => {
285283

286284
await robot.receive(event);
287285

288-
const updatePayload = jest.mocked(
289-
checkUtils.updateBackportInformationCheck,
290-
).mock.calls[0][2];
286+
const updatePayload = vi.mocked(checkUtils.updateBackportInformationCheck)
287+
.mock.calls[0][2];
291288

292289
expect(updatePayload).toMatchObject({
293290
title: 'Backport Information Provided',
@@ -334,7 +331,7 @@ Notes: <!-- One-line Change Summary Here-->`,
334331
},
335332
};
336333

337-
expect(jest.mocked(labelClosedPR)).toHaveBeenCalledWith(
334+
expect(vi.mocked(labelClosedPR)).toHaveBeenCalledWith(
338335
expect.anything(),
339336
pr,
340337
'5-0-x',
@@ -372,7 +369,7 @@ Notes: <!-- One-line Change Summary Here-->`,
372369
},
373370
};
374371

375-
expect(jest.mocked(labelClosedPR)).toHaveBeenCalledWith(
372+
expect(vi.mocked(labelClosedPR)).toHaveBeenCalledWith(
376373
expect.anything(),
377374
pr,
378375
'4-0-x',
@@ -418,7 +415,7 @@ Notes: <!-- One-line Change Summary Here-->`,
418415

419416
expect(updateManualBackport).toHaveBeenCalled();
420417

421-
expect(jest.mocked(labelClosedPR)).toHaveBeenCalledWith(
418+
expect(vi.mocked(labelClosedPR)).toHaveBeenCalledWith(
422419
expect.anything(),
423420
pr,
424421
'4-0-x',
@@ -464,7 +461,7 @@ Notes: <!-- One-line Change Summary Here-->`,
464461

465462
expect(updateManualBackport).toHaveBeenCalled();
466463

467-
expect(jest.mocked(labelClosedPR)).toHaveBeenCalledWith(
464+
expect(vi.mocked(labelClosedPR)).toHaveBeenCalledWith(
468465
expect.anything(),
469466
pr,
470467
'4-0-x',
@@ -475,7 +472,7 @@ Notes: <!-- One-line Change Summary Here-->`,
475472

476473
describe('updateBackportValidityCheck from pull_request events', () => {
477474
it('skips the backport validity check if there is skip check label in a new PR', async () => {
478-
jest.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
475+
vi.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
479476
octokit.issues.listLabelsOnIssue.mockResolvedValue({
480477
data: [
481478
{
@@ -490,7 +487,7 @@ Notes: <!-- One-line Change Summary Here-->`,
490487
event.payload.pull_request.base.ref = '30-x-y';
491488
await robot.receive(event);
492489

493-
const updatePayload = jest.mocked(checkUtils.updateBackportValidityCheck)
490+
const updatePayload = vi.mocked(checkUtils.updateBackportValidityCheck)
494491
.mock.calls[0][2];
495492

496493
expect(updatePayload).toMatchObject({
@@ -501,15 +498,15 @@ Notes: <!-- One-line Change Summary Here-->`,
501498
});
502499

503500
it('cancels the backport validity check if branch is targeting main', async () => {
504-
jest.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
501+
vi.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([]);
505502

506503
const event = JSON.parse(
507504
await fs.readFile(newPRBackportOpenedEventPath, 'utf-8'),
508505
);
509506

510507
await robot.receive(event);
511508

512-
const updatePayload = jest.mocked(checkUtils.updateBackportValidityCheck)
509+
const updatePayload = vi.mocked(checkUtils.updateBackportValidityCheck)
513510
.mock.calls[0][2];
514511

515512
expect(updatePayload).toMatchObject({
@@ -520,7 +517,7 @@ Notes: <!-- One-line Change Summary Here-->`,
520517
});
521518

522519
it('fails the backport validity check if old PR was not merged to a supported release branch', async () => {
523-
jest.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([1234]);
520+
vi.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([1234]);
524521
octokit.pulls.get.mockResolvedValueOnce({
525522
data: {
526523
merged: true,
@@ -536,7 +533,7 @@ Notes: <!-- One-line Change Summary Here-->`,
536533
event.payload.action = 'synchronize';
537534
await robot.receive(event);
538535

539-
const updatePayload = jest.mocked(checkUtils.updateBackportValidityCheck)
536+
const updatePayload = vi.mocked(checkUtils.updateBackportValidityCheck)
540537
.mock.calls[0][2];
541538

542539
expect(updatePayload).toMatchObject({
@@ -548,7 +545,7 @@ Notes: <!-- One-line Change Summary Here-->`,
548545
});
549546

550547
it('fails the backport validity check if old PR has not been merged yet', async () => {
551-
jest.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([1234]);
548+
vi.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([1234]);
552549
octokit.pulls.get.mockResolvedValueOnce({
553550
data: {
554551
merged: false,
@@ -564,7 +561,7 @@ Notes: <!-- One-line Change Summary Here-->`,
564561
event.payload.action = 'synchronize';
565562
await robot.receive(event);
566563

567-
const updatePayload = jest.mocked(checkUtils.updateBackportValidityCheck)
564+
const updatePayload = vi.mocked(checkUtils.updateBackportValidityCheck)
568565
.mock.calls[0][2];
569566

570567
expect(updatePayload).toMatchObject({
@@ -576,7 +573,7 @@ Notes: <!-- One-line Change Summary Here-->`,
576573
});
577574

578575
it('succeeds the backport validity check if all checks pass', async () => {
579-
jest.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([1234]);
576+
vi.mocked(getPRNumbersFromPRBody).mockReturnValueOnce([1234]);
580577
octokit.pulls.get.mockResolvedValueOnce({
581578
data: {
582579
merged: true,
@@ -592,7 +589,7 @@ Notes: <!-- One-line Change Summary Here-->`,
592589
event.payload.action = 'synchronize';
593590
await robot.receive(event);
594591

595-
const updatePayload = jest.mocked(checkUtils.updateBackportValidityCheck)
592+
const updatePayload = vi.mocked(checkUtils.updateBackportValidityCheck)
596593
.mock.calls[0][2];
597594

598595
expect(updatePayload).toMatchObject({

0 commit comments

Comments
 (0)