-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcwd.test.ts
More file actions
77 lines (63 loc) · 3.02 KB
/
Copy pathcwd.test.ts
File metadata and controls
77 lines (63 loc) · 3.02 KB
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
import { test, expect, describe } from 'bun:test';
import { extractCwdFlag, pullRequestTargetCwdError } from '../../src/utils/cwd.ts';
describe('extractCwdFlag', () => {
test('absent flag returns args unchanged', () => {
const { cwd, rest } = extractCwdFlag(['ci', 'check']);
expect(cwd).toBeUndefined();
expect(rest).toEqual(['ci', 'check']);
});
test('--cwd <dir> form is extracted and stripped', () => {
const { cwd, rest } = extractCwdFlag(['ci', 'check', '--cwd', './pr']);
expect(cwd).toBe('./pr');
expect(rest).toEqual(['ci', 'check']);
});
test('--cwd=<dir> form is extracted and stripped', () => {
const { cwd, rest } = extractCwdFlag(['--cwd=/tmp/pr', 'ci', 'check']);
expect(cwd).toBe('/tmp/pr');
expect(rest).toEqual(['ci', 'check']);
});
test('flag can appear before the command', () => {
const { cwd, rest } = extractCwdFlag(['--cwd', './pr', 'status', '--json']);
expect(cwd).toBe('./pr');
expect(rest).toEqual(['status', '--json']);
});
test('other flags are preserved', () => {
const { cwd, rest } = extractCwdFlag(['ci', 'release', '--cwd', './pr', '--expect-mode', 'publish']);
expect(cwd).toBe('./pr');
expect(rest).toEqual(['ci', 'release', '--expect-mode', 'publish']);
});
test('throws when --cwd has no value', () => {
expect(() => extractCwdFlag(['ci', 'check', '--cwd'])).toThrow('--cwd requires a directory argument');
});
test('throws when --cwd is followed by another flag', () => {
expect(() => extractCwdFlag(['--cwd', '--json', 'status'])).toThrow('--cwd requires a directory argument');
});
test('throws on empty --cwd= value', () => {
expect(() => extractCwdFlag(['--cwd=', 'status'])).toThrow('--cwd requires a directory argument');
});
test('a literal "--cwd" value works (not confused with the flag)', () => {
// `--cwd ./--cwd` — directory literally named that; only the first token is the flag
const { cwd, rest } = extractCwdFlag(['add', '--cwd', './--cwd-dir']);
expect(cwd).toBe('./--cwd-dir');
expect(rest).toEqual(['add']);
});
});
describe('pullRequestTargetCwdError', () => {
test('errors under pull_request_target without --cwd', () => {
const err = pullRequestTargetCwdError({ eventName: 'pull_request_target', cwdProvided: false });
expect(err).toContain('pull_request_target');
expect(err).toContain('--cwd ./pr');
});
test('no error when --cwd is provided (even just `--cwd .`)', () => {
expect(pullRequestTargetCwdError({ eventName: 'pull_request_target', cwdProvided: true })).toBeNull();
});
test('no error for a plain pull_request event (non-privileged)', () => {
expect(pullRequestTargetCwdError({ eventName: 'pull_request', cwdProvided: false })).toBeNull();
});
test('no error for push events', () => {
expect(pullRequestTargetCwdError({ eventName: 'push', cwdProvided: false })).toBeNull();
});
test('no error outside CI (no event name)', () => {
expect(pullRequestTargetCwdError({ eventName: undefined, cwdProvided: false })).toBeNull();
});
});