Skip to content

Commit 1406acd

Browse files
committed
test: add isCI tests
1 parent b542362 commit 1406acd

File tree

2 files changed

+200
-83
lines changed

2 files changed

+200
-83
lines changed

packages/prompts/src/__snapshots__/index.test.ts.snap

Lines changed: 112 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

3-
exports[`spinner > message > sets message for next frame 1`] = `
3+
exports[`isCI = false > spinner > message > sets message for next frame 1`] = `
44
[
55
"[?25l",
66
"│
@@ -12,7 +12,7 @@ exports[`spinner > message > sets message for next frame 1`] = `
1212
]
1313
`;
1414

15-
exports[`spinner > start > renders frames at interval 1`] = `
15+
exports[`isCI = false > spinner > start > renders frames at interval 1`] = `
1616
[
1717
"[?25l",
1818
"│
@@ -30,7 +30,7 @@ exports[`spinner > start > renders frames at interval 1`] = `
3030
]
3131
`;
3232

33-
exports[`spinner > start > renders message 1`] = `
33+
exports[`isCI = false > spinner > start > renders message 1`] = `
3434
[
3535
"[?25l",
3636
"│
@@ -39,7 +39,7 @@ exports[`spinner > start > renders message 1`] = `
3939
]
4040
`;
4141

42-
exports[`spinner > start > renders timer when indicator is "timer" 1`] = `
42+
exports[`isCI = false > spinner > start > renders timer when indicator is "timer" 1`] = `
4343
[
4444
"[?25l",
4545
"│
@@ -48,7 +48,7 @@ exports[`spinner > start > renders timer when indicator is "timer" 1`] = `
4848
]
4949
`;
5050

51-
exports[`spinner > stop > renders cancel symbol if code = 1 1`] = `
51+
exports[`isCI = false > spinner > stop > renders cancel symbol if code = 1 1`] = `
5252
[
5353
"[?25l",
5454
"│
@@ -62,7 +62,7 @@ exports[`spinner > stop > renders cancel symbol if code = 1 1`] = `
6262
]
6363
`;
6464

65-
exports[`spinner > stop > renders error symbol if code > 1 1`] = `
65+
exports[`isCI = false > spinner > stop > renders error symbol if code > 1 1`] = `
6666
[
6767
"[?25l",
6868
"│
@@ -76,7 +76,7 @@ exports[`spinner > stop > renders error symbol if code > 1 1`] = `
7676
]
7777
`;
7878

79-
exports[`spinner > stop > renders message 1`] = `
79+
exports[`isCI = false > spinner > stop > renders message 1`] = `
8080
[
8181
"[?25l",
8282
"│
@@ -90,7 +90,111 @@ exports[`spinner > stop > renders message 1`] = `
9090
]
9191
`;
9292

93-
exports[`spinner > stop > renders submit symbol and stops spinner 1`] = `
93+
exports[`isCI = false > spinner > stop > renders submit symbol and stops spinner 1`] = `
94+
[
95+
"[?25l",
96+
"│
97+
",
98+
"◒ ",
99+
"",
100+
"",
101+
"◇
102+
",
103+
"[?25h",
104+
]
105+
`;
106+
107+
exports[`isCI = true > spinner > message > sets message for next frame 1`] = `
108+
[
109+
"[?25l",
110+
"│
111+
",
112+
"◒ ",
113+
"",
114+
"",
115+
"◐ foo",
116+
]
117+
`;
118+
119+
exports[`isCI = true > spinner > start > renders frames at interval 1`] = `
120+
[
121+
"[?25l",
122+
"│
123+
",
124+
"◒ ",
125+
"",
126+
"",
127+
"◐ ",
128+
"",
129+
"",
130+
"◓ ",
131+
"",
132+
"",
133+
"◑ ",
134+
]
135+
`;
136+
137+
exports[`isCI = true > spinner > start > renders message 1`] = `
138+
[
139+
"[?25l",
140+
"│
141+
",
142+
"◒ foo",
143+
]
144+
`;
145+
146+
exports[`isCI = true > spinner > start > renders timer when indicator is "timer" 1`] = `
147+
[
148+
"[?25l",
149+
"│
150+
",
151+
"◒ [0s]",
152+
]
153+
`;
154+
155+
exports[`isCI = true > spinner > stop > renders cancel symbol if code = 1 1`] = `
156+
[
157+
"[?25l",
158+
"│
159+
",
160+
"◒ ",
161+
"",
162+
"",
163+
"■
164+
",
165+
"[?25h",
166+
]
167+
`;
168+
169+
exports[`isCI = true > spinner > stop > renders error symbol if code > 1 1`] = `
170+
[
171+
"[?25l",
172+
"│
173+
",
174+
"◒ ",
175+
"",
176+
"",
177+
"▲
178+
",
179+
"[?25h",
180+
]
181+
`;
182+
183+
exports[`isCI = true > spinner > stop > renders message 1`] = `
184+
[
185+
"[?25l",
186+
"│
187+
",
188+
"◒ ",
189+
"",
190+
"",
191+
"◇ foo
192+
",
193+
"[?25h",
194+
]
195+
`;
196+
197+
exports[`isCI = true > spinner > stop > renders submit symbol and stops spinner 1`] = `
94198
[
95199
"[?25l",
96200
"│

packages/prompts/src/index.test.ts

Lines changed: 88 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Writable } from 'node:stream';
2-
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
2+
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test, vi } from 'vitest';
33
import * as prompts from './index.js';
44

55
// TODO (43081j): move this into a util?
@@ -16,127 +16,140 @@ class MockWritable extends Writable {
1616
}
1717
}
1818

19-
describe('spinner', () => {
20-
let output: MockWritable;
19+
describe.each(['true', 'false'])('isCI = %s', (isCI) => {
20+
let originalIsCI: string | undefined;
2121

22-
beforeEach(() => {
23-
vi.useFakeTimers();
24-
output = new MockWritable();
22+
beforeAll(() => {
23+
originalIsCI = process.env.isCI;
24+
process.env.isCI = isCI;
2525
});
2626

27-
afterEach(() => {
28-
vi.restoreAllMocks();
29-
vi.useRealTimers();
27+
afterAll(() => {
28+
process.env.isCI = originalIsCI;
3029
});
3130

32-
test('returns spinner API', () => {
33-
const api = prompts.spinner({ output });
31+
describe('spinner', () => {
32+
let output: MockWritable;
3433

35-
expect(api.stop).toBeTypeOf('function');
36-
expect(api.start).toBeTypeOf('function');
37-
expect(api.message).toBeTypeOf('function');
38-
});
39-
40-
describe('start', () => {
41-
test('renders frames at interval', () => {
42-
const result = prompts.spinner({ output });
34+
beforeEach(() => {
35+
vi.useFakeTimers();
36+
output = new MockWritable();
37+
});
4338

44-
result.start();
39+
afterEach(() => {
40+
vi.restoreAllMocks();
41+
vi.useRealTimers();
42+
});
4543

46-
// there are 4 frames
47-
for (let i = 0; i < 4; i++) {
48-
vi.advanceTimersByTime(80);
49-
}
44+
test('returns spinner API', () => {
45+
const api = prompts.spinner({ output });
5046

51-
expect(output.buffer).toMatchSnapshot();
47+
expect(api.stop).toBeTypeOf('function');
48+
expect(api.start).toBeTypeOf('function');
49+
expect(api.message).toBeTypeOf('function');
5250
});
5351

54-
test('renders message', () => {
55-
const result = prompts.spinner({ output });
52+
describe('start', () => {
53+
test('renders frames at interval', () => {
54+
const result = prompts.spinner({ output });
5655

57-
result.start('foo');
56+
result.start();
5857

59-
vi.advanceTimersByTime(80);
58+
// there are 4 frames
59+
for (let i = 0; i < 4; i++) {
60+
vi.advanceTimersByTime(80);
61+
}
6062

61-
expect(output.buffer).toMatchSnapshot();
62-
});
63+
expect(output.buffer).toMatchSnapshot();
64+
});
6365

64-
test('renders timer when indicator is "timer"', () => {
65-
const result = prompts.spinner({ output, indicator: 'timer' });
66+
test('renders message', () => {
67+
const result = prompts.spinner({ output });
6668

67-
result.start();
69+
result.start('foo');
6870

69-
vi.advanceTimersByTime(80);
71+
vi.advanceTimersByTime(80);
72+
73+
expect(output.buffer).toMatchSnapshot();
74+
});
75+
76+
test('renders timer when indicator is "timer"', () => {
77+
const result = prompts.spinner({ output, indicator: 'timer' });
78+
79+
result.start();
80+
81+
vi.advanceTimersByTime(80);
7082

71-
expect(output.buffer).toMatchSnapshot();
83+
expect(output.buffer).toMatchSnapshot();
84+
});
7285
});
73-
});
7486

75-
describe('stop', () => {
76-
test('renders submit symbol and stops spinner', () => {
77-
const result = prompts.spinner({ output });
87+
describe('stop', () => {
88+
test('renders submit symbol and stops spinner', () => {
89+
const result = prompts.spinner({ output });
7890

79-
result.start();
91+
result.start();
8092

81-
vi.advanceTimersByTime(80);
93+
vi.advanceTimersByTime(80);
8294

83-
result.stop();
95+
result.stop();
8496

85-
vi.advanceTimersByTime(80);
97+
vi.advanceTimersByTime(80);
8698

87-
expect(output.buffer).toMatchSnapshot();
88-
});
99+
expect(output.buffer).toMatchSnapshot();
100+
});
89101

90-
test('renders cancel symbol if code = 1', () => {
91-
const result = prompts.spinner({ output });
102+
test('renders cancel symbol if code = 1', () => {
103+
const result = prompts.spinner({ output });
92104

93-
result.start();
105+
result.start();
94106

95-
vi.advanceTimersByTime(80);
107+
vi.advanceTimersByTime(80);
96108

97-
result.stop('', 1);
109+
result.stop('', 1);
98110

99-
expect(output.buffer).toMatchSnapshot();
100-
});
111+
expect(output.buffer).toMatchSnapshot();
112+
});
101113

102-
test('renders error symbol if code > 1', () => {
103-
const result = prompts.spinner({ output });
114+
test('renders error symbol if code > 1', () => {
115+
const result = prompts.spinner({ output });
104116

105-
result.start();
117+
result.start();
106118

107-
vi.advanceTimersByTime(80);
119+
vi.advanceTimersByTime(80);
108120

109-
result.stop('', 2);
121+
result.stop('', 2);
110122

111-
expect(output.buffer).toMatchSnapshot();
112-
});
123+
expect(output.buffer).toMatchSnapshot();
124+
});
113125

114-
test('renders message', () => {
115-
const result = prompts.spinner({ output });
126+
test('renders message', () => {
127+
const result = prompts.spinner({ output });
116128

117-
result.start();
129+
result.start();
118130

119-
vi.advanceTimersByTime(80);
131+
vi.advanceTimersByTime(80);
120132

121-
result.stop('foo');
133+
result.stop('foo');
122134

123-
expect(output.buffer).toMatchSnapshot();
135+
expect(output.buffer).toMatchSnapshot();
136+
});
124137
});
125-
});
126138

127-
describe('message', () => {
128-
test('sets message for next frame', () => {
129-
const result = prompts.spinner({ output });
139+
describe('message', () => {
140+
test('sets message for next frame', () => {
141+
const result = prompts.spinner({ output });
130142

131-
result.start();
143+
result.start();
132144

133-
vi.advanceTimersByTime(80);
145+
vi.advanceTimersByTime(80);
134146

135-
result.message('foo');
147+
result.message('foo');
136148

137-
vi.advanceTimersByTime(80);
149+
vi.advanceTimersByTime(80);
138150

139-
expect(output.buffer).toMatchSnapshot();
151+
expect(output.buffer).toMatchSnapshot();
152+
});
140153
});
141154
});
142155
});

0 commit comments

Comments
 (0)