-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
verifyConditions.test.ts
85 lines (64 loc) · 2.35 KB
/
verifyConditions.test.ts
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
import SemanticReleaseError from '@semantic-release/error';
import { execa } from 'execa';
import { VerifyConditionsContext } from 'semantic-release';
import { Signale } from 'signale';
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
import { mock } from 'vitest-mock-extended';
import { PluginConfig, verifyConditions } from '../src/index.js';
import { getConfig, getGoogleIdentityToken } from '../src/utils.js';
vi.mock('execa');
vi.mock('google-auth-library');
vi.mock('../src/utils');
describe('verifyConditions', () => {
const cli = 'dart';
const serviceAccount = 'serviceAccount';
const idToken = 'idToken';
const config: PluginConfig = { cli, publishPub: true };
const logger = mock<Signale>();
const context = mock<VerifyConditionsContext>();
beforeEach(() => {
context.logger = logger;
vi.mocked(getConfig).mockReturnValue(config);
vi.mocked(getGoogleIdentityToken).mockResolvedValue(idToken);
});
afterEach(() => {
vi.unstubAllEnvs();
vi.restoreAllMocks();
});
test('success', async () => {
stubEnv();
await verifyConditions(config, context);
expect(execa).toBeCalledWith(cli);
expectGetGoogleIdentityTokenCalled();
});
test('success with publishPub=false', async () => {
const config: PluginConfig = { cli, publishPub: false };
vi.mocked(getConfig).mockReturnValue(config);
await verifyConditions(config, context);
expect(getGoogleIdentityToken).toBeCalledTimes(0);
expect(execa).toBeCalledTimes(0);
});
test('error due to missing environment variable', async () => {
await expectSemanticReleaseError();
expect(execa).toBeCalledTimes(0);
expect(getGoogleIdentityToken).toBeCalledTimes(0);
});
test('error due to execa', async () => {
stubEnv();
vi.mocked(execa).mockImplementation(() => {
throw new Error();
});
await expectSemanticReleaseError();
expect(execa).toBeCalledWith(cli);
expectGetGoogleIdentityTokenCalled();
});
const stubEnv = () =>
vi.stubEnv('GOOGLE_SERVICE_ACCOUNT_KEY', serviceAccount);
const expectGetGoogleIdentityTokenCalled = () =>
expect(getGoogleIdentityToken).toHaveBeenNthCalledWith(1, serviceAccount);
const expectSemanticReleaseError = async () => {
await expect(() => verifyConditions(config, context)).rejects.toThrowError(
SemanticReleaseError
);
};
});