Skip to content

Commit 65ea5fb

Browse files
authored
Only open experiments webview in integration tests when necessary (#4434)
1 parent 8bcfd60 commit 65ea5fb

File tree

7 files changed

+117
-97
lines changed

7 files changed

+117
-97
lines changed

extension/src/test/suite/experiments/columns/tree.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
appendColumnToPath,
1111
buildMetricOrParamPath
1212
} from '../../../../experiments/columns/paths'
13-
import { buildExperiments, stubWorkspaceExperimentsGetters } from '../util'
13+
import { buildExperiments, stubWorkspaceGetters } from '../util'
1414
import { Status } from '../../../../path/selection/model'
1515
import { ColumnType } from '../../../../experiments/webview/contract'
1616
import {
@@ -356,8 +356,9 @@ suite('Experiments Columns Tree Test Suite', () => {
356356
})
357357

358358
it('should be able to display selected columns first with dvc.views.experiments.selectFirstColumns', async () => {
359-
const { columnsModel, experiments } =
360-
await stubWorkspaceExperimentsGetters(disposable)
359+
const { columnsModel, experiments } = await stubWorkspaceGetters(
360+
disposable
361+
)
361362

362363
const columnsOrder = columnsModel.getColumnOrder()
363364

extension/src/test/suite/experiments/index.test.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
DEFAULT_EXPERIMENTS_OUTPUT,
2020
buildExperiments,
2121
buildExperimentsWebview,
22-
stubWorkspaceExperimentsGetters
22+
stubWorkspaceGettersWebview
2323
} from './util'
2424
import { Disposable } from '../../../extension'
2525
import expShowFixture from '../../fixtures/expShow/base/output'
@@ -469,7 +469,7 @@ suite('Experiments Test Suite', () => {
469469
}).timeout(WEBVIEW_TEST_TIMEOUT)
470470

471471
it('should be able to handle a message to apply an experiment', async () => {
472-
const { mockMessageReceived } = await stubWorkspaceExperimentsGetters(
472+
const { mockMessageReceived } = await stubWorkspaceGettersWebview(
473473
disposable
474474
)
475475

@@ -493,7 +493,7 @@ suite('Experiments Test Suite', () => {
493493
}).timeout(WEBVIEW_TEST_TIMEOUT)
494494

495495
it('should be able to handle a message to create a branch from an experiment', async () => {
496-
const { mockMessageReceived } = await stubWorkspaceExperimentsGetters(
496+
const { mockMessageReceived } = await stubWorkspaceGettersWebview(
497497
disposable
498498
)
499499

@@ -556,7 +556,7 @@ suite('Experiments Test Suite', () => {
556556

557557
it('should handle a message to push an experiment', async () => {
558558
const { experiments, mockMessageReceived } =
559-
await stubWorkspaceExperimentsGetters(disposable)
559+
await stubWorkspaceGettersWebview(disposable)
560560

561561
const mockExpId = 'exp-e7a67'
562562

@@ -643,7 +643,7 @@ suite('Experiments Test Suite', () => {
643643

644644
it('should be able to handle a message to modify the workspace params and queue an experiment', async () => {
645645
const { experiments, dvcExecutor, mockMessageReceived } =
646-
await stubWorkspaceExperimentsGetters(disposable)
646+
await stubWorkspaceGettersWebview(disposable)
647647

648648
const mockModifiedParams = [
649649
'-S',
@@ -672,7 +672,7 @@ suite('Experiments Test Suite', () => {
672672

673673
it('should be able to handle a message to modify the workspace params and run a new experiment', async () => {
674674
const { experiments, dvcRunner, mockMessageReceived } =
675-
await stubWorkspaceExperimentsGetters(disposable)
675+
await stubWorkspaceGettersWebview(disposable)
676676

677677
const mockModifiedParams = [
678678
'-S',
@@ -702,7 +702,7 @@ suite('Experiments Test Suite', () => {
702702

703703
it('should be able to handle a message to modify the workspace params, reset and run a new experiment', async () => {
704704
const { experiments, dvcRunner, mockMessageReceived } =
705-
await stubWorkspaceExperimentsGetters(disposable)
705+
await stubWorkspaceGettersWebview(disposable)
706706

707707
const mockModifiedParams = [
708708
'-S',
@@ -757,8 +757,8 @@ suite('Experiments Test Suite', () => {
757757
}).timeout(WEBVIEW_TEST_TIMEOUT)
758758

759759
it("should be able to handle a message to toggle an experiment's status", async () => {
760-
const { experiments, experimentsModel } =
761-
await stubWorkspaceExperimentsGetters(disposable)
760+
const { experimentsModel, mockMessageReceived } =
761+
await stubWorkspaceGettersWebview(disposable)
762762

763763
const idToToggle = 'test-branch'
764764
const runningInQueueId = 'exp-e7a67'
@@ -782,8 +782,6 @@ suite('Experiments Test Suite', () => {
782782
'queued experiment cannot be selected'
783783
).to.be.false
784784

785-
const webview = await experiments.showWebview()
786-
const mockMessageReceived = getMessageReceivedEmitter(webview)
787785
const toggleSpy = spy(experimentsModel, 'toggleStatus')
788786

789787
mockMessageReceived.fire({
@@ -1178,7 +1176,7 @@ suite('Experiments Test Suite', () => {
11781176

11791177
it('should be able to handle a message to select experiments for plotting', async () => {
11801178
const { experiments, experimentsModel, mockMessageReceived } =
1181-
await stubWorkspaceExperimentsGetters(disposable)
1179+
await stubWorkspaceGettersWebview(disposable)
11821180

11831181
const queuedId = '90aea7f'
11841182
const runningInQueueId = 'exp-e7a67'
@@ -1210,8 +1208,8 @@ suite('Experiments Test Suite', () => {
12101208
dvc: true,
12111209
experiments: true
12121210
})
1213-
const { experiments, experimentsModel } =
1214-
await stubWorkspaceExperimentsGetters(disposable)
1211+
const { experiments, experimentsModel, mockMessageReceived } =
1212+
await stubWorkspaceGettersWebview(disposable)
12151213
const mockShowPlots = stub(WorkspacePlots.prototype, 'showWebview')
12161214

12171215
const dataSent = new Promise(resolve =>
@@ -1221,8 +1219,6 @@ suite('Experiments Test Suite', () => {
12211219
})
12221220
)
12231221

1224-
const webview = await experiments.showWebview()
1225-
const mockMessageReceived = getMessageReceivedEmitter(webview)
12261222
const runningInQueueId = 'exp-e7a67'
12271223
const mockExperimentIds = ['main', 'test-branch', runningInQueueId]
12281224

@@ -1293,7 +1289,7 @@ suite('Experiments Test Suite', () => {
12931289

12941290
it('should handle a message to stop experiments running', async () => {
12951291
const { dvcExecutor, mockMessageReceived } =
1296-
await stubWorkspaceExperimentsGetters(disposable)
1292+
await stubWorkspaceGettersWebview(disposable)
12971293

12981294
const mockQueueKill = stub(dvcExecutor, 'queueKill')
12991295
const mockStopProcesses = stub(ProcessExecution, 'stopProcesses')

extension/src/test/suite/experiments/model/filterBy/tree.test.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ import {
2323
} from '../../../util'
2424
import { buildMetricOrParamPath } from '../../../../../experiments/columns/paths'
2525
import { RegisteredCommands } from '../../../../../commands/external'
26-
import { buildExperiments, stubWorkspaceExperimentsGetters } from '../../util'
26+
import {
27+
buildExperiments,
28+
stubWorkspaceGetters,
29+
stubWorkspaceGettersWebview
30+
} from '../../util'
2731
import {
2832
ColumnType,
2933
TableData
@@ -61,7 +65,7 @@ suite('Experiments Filter By Tree Test Suite', () => {
6165
})
6266

6367
it('should be able to update the table data by adding and removing a filter', async () => {
64-
const { experiments, messageSpy } = await stubWorkspaceExperimentsGetters(
68+
const { experiments, messageSpy } = await stubWorkspaceGettersWebview(
6569
disposable
6670
)
6771

@@ -131,7 +135,7 @@ suite('Experiments Filter By Tree Test Suite', () => {
131135
}).timeout(WEBVIEW_TEST_TIMEOUT)
132136

133137
it('should be able to remove all filters with dvc.views.experimentsFilterByTree.removeAllFilters', async () => {
134-
const { experiments } = await stubWorkspaceExperimentsGetters(disposable)
138+
const { experiments } = await stubWorkspaceGetters(disposable)
135139

136140
const mockShowQuickPick = stub(window, 'showQuickPick')
137141
const mockShowInputBox = stub(window, 'showInputBox')
@@ -336,7 +340,7 @@ suite('Experiments Filter By Tree Test Suite', () => {
336340

337341
it('should be able to filter to starred experiments', async () => {
338342
const { experiments, experimentsModel, messageSpy } =
339-
await stubWorkspaceExperimentsGetters(disposable)
343+
await stubWorkspaceGettersWebview(disposable)
340344

341345
experimentsModel.toggleStars(['main'])
342346

@@ -364,9 +368,7 @@ suite('Experiments Filter By Tree Test Suite', () => {
364368
}).timeout(WEBVIEW_TEST_TIMEOUT)
365369

366370
it('should provide a shortcut to filter to starred experiments', async () => {
367-
const { experimentsModel } = await stubWorkspaceExperimentsGetters(
368-
disposable
369-
)
371+
const { experimentsModel } = await stubWorkspaceGetters(disposable)
370372

371373
const mockAddFilter = stub(experimentsModel, 'addFilter')
372374

extension/src/test/suite/experiments/model/sortBy/tree.test.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@ import {
1111
ColumnType
1212
} from '../../../../../experiments/webview/contract'
1313
import { QuickPickItemWithValue } from '../../../../../vscode/quickPick'
14-
import {
15-
buildExperimentsWebview,
16-
stubWorkspaceExperimentsGetters
17-
} from '../../util'
14+
import { buildExperimentsWebview, stubWorkspaceGetters } from '../../util'
1815
import { experimentsUpdatedEvent } from '../../../util'
1916
import { dvcDemoPath } from '../../../../util'
2017
import { generateTestExpShowOutput } from '../../../../util/experiments'
@@ -287,9 +284,7 @@ suite('Experiments Sort By Tree Test Suite', () => {
287284
}).timeout(WEBVIEW_TEST_TIMEOUT)
288285

289286
it('should provide a shortcut to sort by starred experiments', async () => {
290-
const { experimentsModel } = await stubWorkspaceExperimentsGetters(
291-
disposable
292-
)
287+
const { experimentsModel } = await stubWorkspaceGetters(disposable)
293288

294289
const mockAddSort = stub(experimentsModel, 'addSort')
295290

extension/src/test/suite/experiments/model/tree.test.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ import {
2626
} from '../../../../commands/external'
2727
import { buildPlots, buildPlotsWebview } from '../../plots/util'
2828
import { ExperimentsTree } from '../../../../experiments/model/tree'
29-
import { buildExperiments, stubWorkspaceExperimentsGetters } from '../util'
29+
import {
30+
buildExperiments,
31+
stubWorkspaceGetters,
32+
stubWorkspaceGettersWebview
33+
} from '../util'
3034
import { WEBVIEW_TEST_TIMEOUT } from '../../timeouts'
3135
import {
3236
QuickPickItemWithValue,
@@ -331,7 +335,7 @@ suite('Experiments Tree Test Suite', () => {
331335

332336
it('should be able to push an experiment with dvc.views.experimentsTree.pushExperiment', async () => {
333337
bypassProgressCloseDelay()
334-
const { experiments } = await stubWorkspaceExperimentsGetters(disposable)
338+
const { experiments } = await stubWorkspaceGettersWebview(disposable)
335339

336340
const mockUpdate = stub(experiments, 'update').resolves(undefined)
337341

@@ -360,9 +364,9 @@ suite('Experiments Tree Test Suite', () => {
360364

361365
it('should be able to push the provided experiment with dvc.views.experimentsTree.pushExperiment (if no experiments are selected)', async () => {
362366
bypassProgressCloseDelay()
363-
const mockExperiment = 'exp-to-push'
367+
const { experiments } = await stubWorkspaceGetters(disposable)
364368

365-
const { experiments } = await stubWorkspaceExperimentsGetters(disposable)
369+
const mockExperiment = 'exp-to-push'
366370

367371
const mockUpdate = stub(experiments, 'update').resolves(undefined)
368372

@@ -388,12 +392,12 @@ suite('Experiments Tree Test Suite', () => {
388392

389393
it('should be able to push multiple experiments with dvc.views.experimentsTree.pushExperiment', async () => {
390394
bypassProgressCloseDelay()
395+
const { experiments } = await stubWorkspaceGetters(disposable)
396+
391397
const mockFirstExperimentId = 'first-exp-pushed'
392398
const mockSecondExperimentId = 'second-exp-pushed'
393399
const mockQueuedExperimentLabel = 'queued-excluded'
394400

395-
const { experiments } = await stubWorkspaceExperimentsGetters(disposable)
396-
397401
const mockUpdate = stub(experiments, 'update').resolves(undefined)
398402

399403
const mockExpPush = stub(DvcExecutor.prototype, 'expPush').resolves('')
@@ -571,7 +575,7 @@ suite('Experiments Tree Test Suite', () => {
571575

572576
it('should be able to queue an experiment from an existing one with dvc.views.experiments.queueExperiment', async () => {
573577
const { dvcExecutor, experimentsModel, mockGetOnlyOrPickProject } =
574-
await stubWorkspaceExperimentsGetters(disposable)
578+
await stubWorkspaceGetters(disposable)
575579

576580
const mockExperimentRunQueue = stub(dvcExecutor, 'expRunQueue').resolves(
577581
'true'
@@ -622,7 +626,7 @@ suite('Experiments Tree Test Suite', () => {
622626

623627
it('should be able to run a new experiment from an existing one with dvc.views.experiments.runExperiment', async () => {
624628
const { dvcRunner, experimentsModel, mockGetOnlyOrPickProject } =
625-
await stubWorkspaceExperimentsGetters(disposable)
629+
await stubWorkspaceGetters(disposable)
626630

627631
const mockRunExperiment = stub(dvcRunner, 'runExperiment').resolves(
628632
undefined
@@ -670,7 +674,7 @@ suite('Experiments Tree Test Suite', () => {
670674

671675
it('should be able to reset and run a new checkpoint experiment from an existing one with dvc.views.experiments.resetAndRunCheckpointExperiment', async () => {
672676
const { dvcRunner, experimentsModel, mockGetOnlyOrPickProject } =
673-
await stubWorkspaceExperimentsGetters(disposable)
677+
await stubWorkspaceGetters(disposable)
674678

675679
const mockRunExperimentReset = stub(
676680
dvcRunner,

extension/src/test/suite/experiments/util.ts

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { DEFAULT_CURRENT_BRANCH_COMMITS_TO_SHOW } from '../../../cli/dvc/constan
2222
import { PersistenceKey } from '../../../persistence/constants'
2323
import { ExpShowOutput } from '../../../cli/dvc/contract'
2424
import { buildExperimentsPipeline } from '../pipeline/util'
25+
import { Setup } from '../../../setup'
2526

2627
export const DEFAULT_EXPERIMENTS_OUTPUT = {
2728
availableNbCommits: { main: 5 },
@@ -284,7 +285,53 @@ export const buildExperimentsData = (
284285
}
285286
}
286287

287-
export const stubWorkspaceExperimentsGetters = async (
288+
const stubWorkspaceExperiments = (
289+
dvcRoot: string,
290+
experiments: Experiments
291+
) => {
292+
const mockGetOnlyOrPickProject = stub(
293+
WorkspaceExperiments.prototype,
294+
'getOnlyOrPickProject'
295+
).resolves(dvcRoot)
296+
297+
const mockGetRepository = stub(
298+
WorkspaceExperiments.prototype,
299+
'getRepository'
300+
).returns(experiments)
301+
302+
return { mockGetOnlyOrPickProject, mockGetRepository }
303+
}
304+
305+
export const stubWorkspaceGetters = async (
306+
disposer: Disposer,
307+
dvcRoot = dvcDemoPath
308+
) => {
309+
const {
310+
columnsModel,
311+
dvcExecutor,
312+
dvcRunner,
313+
experiments,
314+
experimentsModel
315+
} = buildExperiments({ disposer })
316+
317+
await experiments.isReady()
318+
319+
stub(Setup.prototype, 'shouldBeShown').returns({
320+
dvc: true,
321+
experiments: true
322+
})
323+
324+
return {
325+
columnsModel,
326+
dvcExecutor,
327+
dvcRunner,
328+
experiments,
329+
experimentsModel,
330+
...stubWorkspaceExperiments(dvcRoot, experiments)
331+
}
332+
}
333+
334+
export const stubWorkspaceGettersWebview = async (
288335
disposer: Disposer,
289336
dvcRoot = dvcDemoPath
290337
) => {
@@ -298,25 +345,14 @@ export const stubWorkspaceExperimentsGetters = async (
298345
mockMessageReceived
299346
} = await buildExperimentsWebview({ disposer })
300347

301-
const mockGetOnlyOrPickProject = stub(
302-
WorkspaceExperiments.prototype,
303-
'getOnlyOrPickProject'
304-
).resolves(dvcRoot)
305-
306-
const mockGetRepository = stub(
307-
WorkspaceExperiments.prototype,
308-
'getRepository'
309-
).returns(experiments)
310-
311348
return {
312349
columnsModel,
313350
dvcExecutor,
314351
dvcRunner,
315352
experiments,
316353
experimentsModel,
317354
messageSpy,
318-
mockGetOnlyOrPickProject,
319-
mockGetRepository,
355+
...stubWorkspaceExperiments(dvcRoot, experiments),
320356
mockMessageReceived
321357
}
322358
}

0 commit comments

Comments
 (0)