Skip to content

Commit e5f4a1e

Browse files
sispviceice
andauthored
test(git): enhance commit signing tests (#30396)
Co-authored-by: Michael Kriese <[email protected]>
1 parent d439f84 commit e5f4a1e

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

lib/util/git/private-key.spec.ts

+34-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { mocked } from '../../../test/util';
1+
import os from 'node:os';
2+
import { any, mockDeep } from 'jest-mock-extended';
3+
import upath from 'upath';
4+
import { mockedExtended } from '../../../test/util';
25
import * as exec_ from '../exec';
36
import { configSigningKey, writePrivateKey } from './private-key';
47
import { setPrivateKey } from '.';
@@ -10,9 +13,9 @@ jest.mock('fs-extra', () =>
1013
>('../../../test/fixtures')
1114
.fsExtra(),
1215
);
13-
jest.mock('../exec');
16+
jest.mock('../exec', () => mockDeep());
1417

15-
const exec = mocked(exec_);
18+
const exec = mockedExtended(exec_);
1619

1720
describe('util/git/private-key', () => {
1821
describe('writePrivateKey()', () => {
@@ -23,21 +26,40 @@ describe('util/git/private-key', () => {
2326

2427
it('throws error if failing', async () => {
2528
setPrivateKey('some-key');
26-
exec.exec.mockRejectedValueOnce({
27-
stderr: `something wrong`,
28-
stdout: '',
29-
});
29+
exec.exec.calledWith(any()).mockResolvedValue({ stdout: '', stderr: '' });
30+
exec.exec
31+
.calledWith(
32+
`gpg --import ${upath.join(os.tmpdir() + '/git-private-gpg.key')}`,
33+
)
34+
.mockRejectedValueOnce({
35+
stderr: `something wrong`,
36+
stdout: '',
37+
});
3038
await expect(writePrivateKey()).rejects.toThrow();
3139
});
3240

3341
it('imports the private key', async () => {
42+
const publicKey = 'BADC0FFEE';
43+
const repoDir = '/tmp/some-repo';
44+
exec.exec.calledWith(any()).mockResolvedValue({ stdout: '', stderr: '' });
45+
exec.exec
46+
.calledWith(
47+
`gpg --import ${upath.join(os.tmpdir() + '/git-private-gpg.key')}`,
48+
)
49+
.mockResolvedValueOnce({
50+
stderr: `gpg: key ${publicKey}: secret key imported\nfoo\n`,
51+
stdout: '',
52+
});
3453
setPrivateKey('some-key');
35-
exec.exec.mockResolvedValueOnce({
36-
stderr: `gpg: key BADC0FFEE: secret key imported\nfoo\n`,
37-
stdout: '',
38-
});
3954
await expect(writePrivateKey()).resolves.not.toThrow();
40-
await expect(configSigningKey('/tmp/some-repo')).resolves.not.toThrow();
55+
await expect(configSigningKey(repoDir)).resolves.not.toThrow();
56+
expect(exec.exec).toHaveBeenCalledWith(
57+
`git config user.signingkey ${publicKey}`,
58+
{ cwd: repoDir },
59+
);
60+
expect(exec.exec).toHaveBeenCalledWith('git config commit.gpgsign true', {
61+
cwd: repoDir,
62+
});
4163
});
4264

4365
it('does not import the key again', async () => {

test/util.ts

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import crypto from 'node:crypto';
22
import { expect, jest } from '@jest/globals';
3+
import type { DeepMockProxy } from 'jest-mock-extended';
34
import type { Plugin } from 'pretty-format';
45
import upath from 'upath';
56
import type { RenovateConfig } from '../lib/config/types';
@@ -20,6 +21,14 @@ export function mocked<T extends object>(module: T): jest.Mocked<T> {
2021
return jest.mocked(module);
2122
}
2223

24+
/**
25+
* Simple wrapper for getting mocked version of a module
26+
* @param module module which is mocked by `jest-mock-extended.mockDeep`
27+
*/
28+
export function mockedExtended<T extends object>(module: T): DeepMockProxy<T> {
29+
return module as DeepMockProxy<T>;
30+
}
31+
2332
/**
2433
* Simple wrapper for getting mocked version of a function
2534
* @param func function which is mocked by `jest.mock`

0 commit comments

Comments
 (0)