mirror of
https://github.com/actions/labeler.git
synced 2025-12-14 13:47:02 +00:00
Merge remote-tracking branch 'origin/main' into dot-option
This commit is contained in:
@@ -1,41 +1,41 @@
|
||||
import { checkGlobs } from "../src/labeler";
|
||||
import {checkGlobs} from '../src/labeler';
|
||||
|
||||
import * as core from "@actions/core";
|
||||
import * as core from '@actions/core';
|
||||
|
||||
jest.mock("@actions/core");
|
||||
jest.mock('@actions/core');
|
||||
|
||||
beforeAll(() => {
|
||||
jest.spyOn(core, "getInput").mockImplementation((name, options) => {
|
||||
return jest.requireActual("@actions/core").getInput(name, options);
|
||||
jest.spyOn(core, 'getInput').mockImplementation((name, options) => {
|
||||
return jest.requireActual('@actions/core').getInput(name, options);
|
||||
});
|
||||
});
|
||||
|
||||
const matchConfig = [{ any: ["*.txt"] }];
|
||||
const matchConfig = [{any: ['*.txt']}];
|
||||
|
||||
describe("checkGlobs", () => {
|
||||
it("returns true when our pattern does match changed files", () => {
|
||||
const changedFiles = ["foo.txt", "bar.txt"];
|
||||
describe('checkGlobs', () => {
|
||||
it('returns true when our pattern does match changed files', () => {
|
||||
const changedFiles = ['foo.txt', 'bar.txt'];
|
||||
const result = checkGlobs(changedFiles, matchConfig, false);
|
||||
|
||||
expect(result).toBeTruthy();
|
||||
});
|
||||
|
||||
it("returns false when our pattern does not match changed files", () => {
|
||||
const changedFiles = ["foo.docx"];
|
||||
it('returns false when our pattern does not match changed files', () => {
|
||||
const changedFiles = ['foo.docx'];
|
||||
const result = checkGlobs(changedFiles, matchConfig, false);
|
||||
|
||||
expect(result).toBeFalsy();
|
||||
});
|
||||
|
||||
it("returns false for a file starting with dot if `dot` option is false", () => {
|
||||
const changedFiles = [".foo.txt"];
|
||||
it('returns false for a file starting with dot if `dot` option is false', () => {
|
||||
const changedFiles = ['.foo.txt'];
|
||||
const result = checkGlobs(changedFiles, matchConfig, false);
|
||||
|
||||
expect(result).toBeFalsy();
|
||||
});
|
||||
|
||||
it("returns true for a file starting with dot if `dot` option is true", () => {
|
||||
const changedFiles = [".foo.txt"];
|
||||
it('returns true for a file starting with dot if `dot` option is true', () => {
|
||||
const changedFiles = ['.foo.txt'];
|
||||
const result = checkGlobs(changedFiles, matchConfig, true);
|
||||
|
||||
expect(result).toBeTruthy();
|
||||
|
||||
@@ -1,77 +1,77 @@
|
||||
import { run } from "../src/labeler";
|
||||
import * as github from "@actions/github";
|
||||
import * as core from "@actions/core";
|
||||
import {run} from '../src/labeler';
|
||||
import * as github from '@actions/github';
|
||||
import * as core from '@actions/core';
|
||||
|
||||
const fs = jest.requireActual("fs");
|
||||
const fs = jest.requireActual('fs');
|
||||
|
||||
jest.mock("@actions/core");
|
||||
jest.mock("@actions/github");
|
||||
jest.mock('@actions/core');
|
||||
jest.mock('@actions/github');
|
||||
|
||||
const gh = github.getOctokit("_");
|
||||
const addLabelsMock = jest.spyOn(gh.rest.issues, "addLabels");
|
||||
const removeLabelMock = jest.spyOn(gh.rest.issues, "removeLabel");
|
||||
const reposMock = jest.spyOn(gh.rest.repos, "getContent");
|
||||
const paginateMock = jest.spyOn(gh, "paginate");
|
||||
const getPullMock = jest.spyOn(gh.rest.pulls, "get");
|
||||
const gh = github.getOctokit('_');
|
||||
const addLabelsMock = jest.spyOn(gh.rest.issues, 'addLabels');
|
||||
const removeLabelMock = jest.spyOn(gh.rest.issues, 'removeLabel');
|
||||
const reposMock = jest.spyOn(gh.rest.repos, 'getContent');
|
||||
const paginateMock = jest.spyOn(gh, 'paginate');
|
||||
const getPullMock = jest.spyOn(gh.rest.pulls, 'get');
|
||||
|
||||
const yamlFixtures = {
|
||||
"only_pdfs.yml": fs.readFileSync("__tests__/fixtures/only_pdfs.yml"),
|
||||
'only_pdfs.yml': fs.readFileSync('__tests__/fixtures/only_pdfs.yml')
|
||||
};
|
||||
|
||||
const configureInput = (
|
||||
mockInput: Partial<{
|
||||
"repo-token": string;
|
||||
"configuration-path": string;
|
||||
"sync-labels": boolean;
|
||||
'repo-token': string;
|
||||
'configuration-path': string;
|
||||
'sync-labels': boolean;
|
||||
dot: boolean;
|
||||
}>
|
||||
) => {
|
||||
jest
|
||||
.spyOn(core, "getInput")
|
||||
.spyOn(core, 'getInput')
|
||||
.mockImplementation((name: string, ...opts) => mockInput[name]);
|
||||
};
|
||||
|
||||
afterAll(() => jest.restoreAllMocks());
|
||||
|
||||
describe("run", () => {
|
||||
it("(with dot: false) adds labels to PRs that match our glob patterns", async () => {
|
||||
describe('run', () => {
|
||||
it('(with dot: false) adds labels to PRs that match our glob patterns', async () => {
|
||||
configureInput({});
|
||||
usingLabelerConfigYaml("only_pdfs.yml");
|
||||
mockGitHubResponseChangedFiles("foo.pdf");
|
||||
usingLabelerConfigYaml('only_pdfs.yml');
|
||||
mockGitHubResponseChangedFiles('foo.pdf');
|
||||
|
||||
await run();
|
||||
|
||||
expect(removeLabelMock).toHaveBeenCalledTimes(0);
|
||||
expect(addLabelsMock).toHaveBeenCalledTimes(1);
|
||||
expect(addLabelsMock).toHaveBeenCalledWith({
|
||||
owner: "monalisa",
|
||||
repo: "helloworld",
|
||||
owner: 'monalisa',
|
||||
repo: 'helloworld',
|
||||
issue_number: 123,
|
||||
labels: ["touched-a-pdf-file"],
|
||||
labels: ['touched-a-pdf-file']
|
||||
});
|
||||
});
|
||||
|
||||
it("(with dot: true) adds labels to PRs that match our glob patterns", async () => {
|
||||
configureInput({ dot: true });
|
||||
usingLabelerConfigYaml("only_pdfs.yml");
|
||||
mockGitHubResponseChangedFiles(".foo.pdf");
|
||||
it('(with dot: true) adds labels to PRs that match our glob patterns', async () => {
|
||||
configureInput({dot: true});
|
||||
usingLabelerConfigYaml('only_pdfs.yml');
|
||||
mockGitHubResponseChangedFiles('.foo.pdf');
|
||||
|
||||
await run();
|
||||
|
||||
expect(removeLabelMock).toHaveBeenCalledTimes(0);
|
||||
expect(addLabelsMock).toHaveBeenCalledTimes(1);
|
||||
expect(addLabelsMock).toHaveBeenCalledWith({
|
||||
owner: "monalisa",
|
||||
repo: "helloworld",
|
||||
owner: 'monalisa',
|
||||
repo: 'helloworld',
|
||||
issue_number: 123,
|
||||
labels: ["touched-a-pdf-file"],
|
||||
labels: ['touched-a-pdf-file']
|
||||
});
|
||||
});
|
||||
|
||||
it("(with dot: false) does not add labels to PRs that do not match our glob patterns", async () => {
|
||||
it('(with dot: false) does not add labels to PRs that do not match our glob patterns', async () => {
|
||||
configureInput({});
|
||||
usingLabelerConfigYaml("only_pdfs.yml");
|
||||
mockGitHubResponseChangedFiles(".foo.pdf");
|
||||
usingLabelerConfigYaml('only_pdfs.yml');
|
||||
mockGitHubResponseChangedFiles('.foo.pdf');
|
||||
|
||||
await run();
|
||||
|
||||
@@ -79,10 +79,10 @@ describe("run", () => {
|
||||
expect(addLabelsMock).toHaveBeenCalledTimes(0);
|
||||
});
|
||||
|
||||
it("(with dot: true) does not add labels to PRs that do not match our glob patterns", async () => {
|
||||
configureInput({ dot: true });
|
||||
usingLabelerConfigYaml("only_pdfs.yml");
|
||||
mockGitHubResponseChangedFiles("foo.txt");
|
||||
it('(with dot: true) does not add labels to PRs that do not match our glob patterns', async () => {
|
||||
configureInput({dot: true});
|
||||
usingLabelerConfigYaml('only_pdfs.yml');
|
||||
mockGitHubResponseChangedFiles('foo.txt');
|
||||
|
||||
await run();
|
||||
|
||||
@@ -90,19 +90,19 @@ describe("run", () => {
|
||||
expect(addLabelsMock).toHaveBeenCalledTimes(0);
|
||||
});
|
||||
|
||||
it("(with sync-labels: true) it deletes preexisting PR labels that no longer match the glob pattern", async () => {
|
||||
it('(with sync-labels: true) it deletes preexisting PR labels that no longer match the glob pattern', async () => {
|
||||
configureInput({
|
||||
"repo-token": "foo",
|
||||
"configuration-path": "bar",
|
||||
"sync-labels": true,
|
||||
'repo-token': 'foo',
|
||||
'configuration-path': 'bar',
|
||||
'sync-labels': true
|
||||
});
|
||||
|
||||
usingLabelerConfigYaml("only_pdfs.yml");
|
||||
mockGitHubResponseChangedFiles("foo.txt");
|
||||
usingLabelerConfigYaml('only_pdfs.yml');
|
||||
mockGitHubResponseChangedFiles('foo.txt');
|
||||
getPullMock.mockResolvedValue(<any>{
|
||||
data: {
|
||||
labels: [{ name: "touched-a-pdf-file" }],
|
||||
},
|
||||
labels: [{name: 'touched-a-pdf-file'}]
|
||||
}
|
||||
});
|
||||
|
||||
await run();
|
||||
@@ -110,26 +110,26 @@ describe("run", () => {
|
||||
expect(addLabelsMock).toHaveBeenCalledTimes(0);
|
||||
expect(removeLabelMock).toHaveBeenCalledTimes(1);
|
||||
expect(removeLabelMock).toHaveBeenCalledWith({
|
||||
owner: "monalisa",
|
||||
repo: "helloworld",
|
||||
owner: 'monalisa',
|
||||
repo: 'helloworld',
|
||||
issue_number: 123,
|
||||
name: "touched-a-pdf-file",
|
||||
name: 'touched-a-pdf-file'
|
||||
});
|
||||
});
|
||||
|
||||
it("(with sync-labels: false) it issues no delete calls even when there are preexisting PR labels that no longer match the glob pattern", async () => {
|
||||
it('(with sync-labels: false) it issues no delete calls even when there are preexisting PR labels that no longer match the glob pattern', async () => {
|
||||
configureInput({
|
||||
"repo-token": "foo",
|
||||
"configuration-path": "bar",
|
||||
"sync-labels": false,
|
||||
'repo-token': 'foo',
|
||||
'configuration-path': 'bar',
|
||||
'sync-labels': false
|
||||
});
|
||||
|
||||
usingLabelerConfigYaml("only_pdfs.yml");
|
||||
mockGitHubResponseChangedFiles("foo.txt");
|
||||
usingLabelerConfigYaml('only_pdfs.yml');
|
||||
mockGitHubResponseChangedFiles('foo.txt');
|
||||
getPullMock.mockResolvedValue(<any>{
|
||||
data: {
|
||||
labels: [{ name: "touched-a-pdf-file" }],
|
||||
},
|
||||
labels: [{name: 'touched-a-pdf-file'}]
|
||||
}
|
||||
});
|
||||
|
||||
await run();
|
||||
@@ -141,11 +141,11 @@ describe("run", () => {
|
||||
|
||||
function usingLabelerConfigYaml(fixtureName: keyof typeof yamlFixtures): void {
|
||||
reposMock.mockResolvedValue(<any>{
|
||||
data: { content: yamlFixtures[fixtureName], encoding: "utf8" },
|
||||
data: {content: yamlFixtures[fixtureName], encoding: 'utf8'}
|
||||
});
|
||||
}
|
||||
|
||||
function mockGitHubResponseChangedFiles(...files: string[]): void {
|
||||
const returnValue = files.map((f) => ({ filename: f }));
|
||||
const returnValue = files.map(f => ({filename: f}));
|
||||
paginateMock.mockReturnValue(<any>returnValue);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user