forked from ytanikin/PRConventionalCommits
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.test.js
131 lines (112 loc) · 4.34 KB
/
index.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
const { getInput, setFailed } = require('@actions/core');
const { getOctokit, context } = require('@actions/github');
const parser = require('conventional-commits-parser');
jest.mock('@actions/core');
jest.mock('@actions/github');
jest.mock('conventional-commits-parser');
const myModule = require('./index');
beforeEach(() => {
jest.resetAllMocks();
});
let logMock;
beforeEach(() => {
logMock = jest.spyOn(console, 'log');
logMock.mockImplementation(() => {});
});
afterEach(() => {
logMock.mockRestore();
});
describe('checkConventionalCommits', () => {
it('should fail when task_types input is missing', async () => {
getInput.mockReturnValue('');
await myModule.checkConventionalCommits();
expect(setFailed).toHaveBeenCalledWith('Missing required input: task_types');
});
it('should fail when task_types input is invalid JSON', async () => {
getInput.mockReturnValue('invalid JSON');
await myModule.checkConventionalCommits();
expect(setFailed).toHaveBeenCalledWith('Invalid task_types input. Expecting a JSON array.');
});
// ... add more tests as required
});
describe('checkTicketNumber', () => {
it('should fail when ticket number is missing or invalid', async () => {
getInput.mockReturnValue('\\d+');
context.payload = {
pull_request: { title: 'no number here' }
};
await myModule.checkTicketNumber();
expect(setFailed).toHaveBeenCalledWith('Invalid or missing task number: \'\'. Must match: \\d+');
});
// ... add more tests as required
});
describe('applyLabel', () => {
it('should skip label addition if add_label is set to false', async () => {
getInput.mockReturnValue('false');
await myModule.applyLabel({}, {});
expect(setFailed).not.toHaveBeenCalled();
expect(console.log).toHaveBeenCalledWith('Skipping label addition as add_label is set to false.');
});
it('should fail if custom_labels input is invalid JSON', async () => {
getInput.mockReturnValueOnce('true').mockReturnValueOnce('invalid JSON');
await myModule.applyLabel({}, {});
expect(setFailed).toHaveBeenCalledWith('Invalid custom_labels input. Unable to parse JSON.');
});
// ... add more tests as required
});
describe('updateLabels', () => {
let octokit;
beforeEach(() => {
octokit = {
rest: {
issues: {
listLabelsOnIssue: jest.fn(),
removeLabel: jest.fn(),
getLabel: jest.fn(),
createLabel: jest.fn(),
addLabels: jest.fn()
}
}
};
getOctokit.mockReturnValue(octokit);
});
it('should remove all existing labels and add new labels', async () => {
getInput.mockReturnValue('myToken');
context.repo = { owner: 'myOwner', repo: 'myRepo' };
octokit.rest.issues.listLabelsOnIssue.mockResolvedValue({ data: [{ name: 'oldLabel' }] });
octokit.rest.issues.getLabel.mockRejectedValue(new Error());
const pr = { number: 123 };
const cc = { type: 'myType', breaking: false };
const customLabels = {};
await myModule.updateLabels(pr, cc, customLabels);
expect(octokit.rest.issues.removeLabel).toHaveBeenCalledWith({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
name: 'oldLabel'
});
expect(octokit.rest.issues.createLabel).toHaveBeenCalledWith({
owner: context.repo.owner,
repo: context.repo.repo,
name: 'myType',
color: expect.any(String)
});
expect(octokit.rest.issues.addLabels).toHaveBeenCalledWith({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
labels: ['myType']
});
});
// ... add more tests as required
});
describe('generateColor', () => {
it('should return a string', () => {
expect(typeof myModule.generateColor('test')).toBe('string');
});
it('should generate different colors for different inputs', () => {
const color1 = myModule.generateColor('test1');
const color2 = myModule.generateColor('test2');
expect(color1).not.toEqual(color2);
});
});