Skip to content

Commit 8f870f9

Browse files
committed
test(results): add test for selection mode
1 parent 6c53d98 commit 8f870f9

1 file changed

Lines changed: 191 additions & 0 deletions

File tree

tests/cli/ui/results.ui.test.ts

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,195 @@ describe('ResultsUi', () => {
9797
);
9898
});
9999
});
100+
101+
describe('selection mode', () => {
102+
let folders: CliScanFoundFolder[];
103+
104+
beforeEach(() => {
105+
folders = [
106+
{ path: 'folder/1', size: 1, status: 'live' } as CliScanFoundFolder,
107+
{ path: 'folder/2', size: 1, status: 'live' } as CliScanFoundFolder,
108+
{ path: 'folder/3', size: 1, status: 'live' } as CliScanFoundFolder,
109+
];
110+
111+
resultsServiceMock.results = folders;
112+
resultsUi = new ResultsUi(resultsServiceMock, consoleServiceMock);
113+
});
114+
115+
it('should toggle select mode on and off with "t"', () => {
116+
expect(resultsUi['selectMode']).toBe(false);
117+
118+
resultsUi.onKeyInput({
119+
name: 't',
120+
meta: false,
121+
ctrl: false,
122+
shift: false,
123+
sequence: 't',
124+
});
125+
expect(resultsUi['selectMode']).toBe(true);
126+
127+
resultsUi.onKeyInput({
128+
name: 't',
129+
meta: false,
130+
ctrl: false,
131+
shift: false,
132+
sequence: 't',
133+
});
134+
expect(resultsUi['selectMode']).toBe(false);
135+
expect(resultsUi['selectedFolders'].size).toBe(0);
136+
});
137+
138+
it('should select and unselect folder with space', () => {
139+
resultsUi.onKeyInput({
140+
name: 't',
141+
meta: false,
142+
ctrl: false,
143+
shift: false,
144+
sequence: 't',
145+
}); // enable select mode
146+
147+
resultsUi.onKeyInput({
148+
name: 'space',
149+
meta: false,
150+
ctrl: false,
151+
shift: false,
152+
sequence: ' ',
153+
});
154+
expect(resultsUi['selectedFolders'].has('folder/1')).toBe(true);
155+
156+
resultsUi.onKeyInput({
157+
name: 'space',
158+
meta: false,
159+
ctrl: false,
160+
shift: false,
161+
sequence: ' ',
162+
});
163+
expect(resultsUi['selectedFolders'].has('folder/1')).toBe(false);
164+
});
165+
166+
it('should start and end range selection with "v"', () => {
167+
resultsUi.onKeyInput({
168+
name: 't',
169+
meta: false,
170+
ctrl: false,
171+
shift: false,
172+
sequence: 't',
173+
}); // select mode on
174+
175+
resultsUi.onKeyInput({
176+
name: 'v',
177+
meta: false,
178+
ctrl: false,
179+
shift: false,
180+
sequence: 'v',
181+
}); // start range
182+
expect(resultsUi['isRangeSelectionMode']).toBe(true);
183+
expect(resultsUi['rangeSelectionStart']).toBe(0);
184+
185+
resultsUi.onKeyInput({
186+
name: 'down',
187+
meta: false,
188+
ctrl: false,
189+
shift: false,
190+
sequence: '\u001b[B',
191+
}); // move to folder/2
192+
expect(resultsUi['selectedFolders'].has('folder/1')).toBe(true);
193+
expect(resultsUi['selectedFolders'].has('folder/2')).toBe(true);
194+
195+
resultsUi.onKeyInput({
196+
name: 'v',
197+
meta: false,
198+
ctrl: false,
199+
shift: false,
200+
sequence: 'v',
201+
}); // end range
202+
expect(resultsUi['isRangeSelectionMode']).toBe(false);
203+
expect(resultsUi['rangeSelectionStart']).toBe(null);
204+
});
205+
206+
it('should delete all selected folders on enter', () => {
207+
const spy = jest.spyOn(resultsUi['delete$'], 'next');
208+
209+
resultsUi.onKeyInput({
210+
name: 't',
211+
meta: false,
212+
ctrl: false,
213+
shift: false,
214+
sequence: 't',
215+
}); // selection mode
216+
resultsUi.onKeyInput({
217+
name: 'space',
218+
meta: false,
219+
ctrl: false,
220+
shift: false,
221+
sequence: ' ',
222+
}); // select folder/1
223+
resultsUi.onKeyInput({
224+
name: 'down',
225+
meta: false,
226+
ctrl: false,
227+
shift: false,
228+
sequence: '\u001b[B',
229+
});
230+
resultsUi.onKeyInput({
231+
name: 'space',
232+
meta: false,
233+
ctrl: false,
234+
shift: false,
235+
sequence: ' ',
236+
}); // select folder/2
237+
238+
resultsUi.onKeyInput({
239+
name: 'enter',
240+
meta: false,
241+
ctrl: false,
242+
shift: false,
243+
sequence: '\r',
244+
});
245+
246+
expect(spy).toHaveBeenCalledTimes(2);
247+
expect(spy).toHaveBeenCalledWith(folders[0]);
248+
expect(spy).toHaveBeenCalledWith(folders[1]);
249+
250+
expect(resultsUi['selectedFolders'].size).toBe(0);
251+
});
252+
253+
it('should clear range selection when toggling mode off', () => {
254+
resultsUi.onKeyInput({
255+
name: 't',
256+
meta: false,
257+
ctrl: false,
258+
shift: false,
259+
sequence: 't',
260+
}); // selection mode on
261+
resultsUi.onKeyInput({
262+
name: 'v',
263+
meta: false,
264+
ctrl: false,
265+
shift: false,
266+
sequence: 'v',
267+
}); // start range
268+
resultsUi.onKeyInput({
269+
name: 'down',
270+
meta: false,
271+
ctrl: false,
272+
shift: false,
273+
sequence: '\u001b[B',
274+
}); // move and apply range
275+
276+
expect(resultsUi['selectedFolders'].size).toBe(2);
277+
expect(resultsUi['isRangeSelectionMode']).toBe(true);
278+
279+
resultsUi.onKeyInput({
280+
name: 't',
281+
meta: false,
282+
ctrl: false,
283+
shift: false,
284+
sequence: 't',
285+
}); // toggle mode off
286+
expect(resultsUi['selectMode']).toBe(false);
287+
expect(resultsUi['selectedFolders'].size).toBe(0);
288+
expect(resultsUi['rangeSelectionStart']).toBe(null);
289+
});
290+
});
100291
});

0 commit comments

Comments
 (0)