diff --git a/packages/salesforcedx-vscode-apex/package.json b/packages/salesforcedx-vscode-apex/package.json index cd9f47481b..61dcb6241e 100644 --- a/packages/salesforcedx-vscode-apex/package.json +++ b/packages/salesforcedx-vscode-apex/package.json @@ -140,12 +140,17 @@ { "command": "sf.test.view.run", "when": "view == sf.test.view", - "group": "navigation" + "group": "navigation@1" }, { "command": "sf.test.view.refresh", "when": "view == sf.test.view", - "group": "navigation" + "group": "navigation@2" + }, + { + "command": "sf.test.view.collapseAll", + "when": "view == sf.test.view", + "group": "navigation@3" } ], "view/item/context": [ @@ -276,6 +281,14 @@ "dark": "resources/dark/play-button.svg" } }, + { + "command": "sf.test.view.collapseAll", + "title": "%collapse_tests_title%", + "icon": { + "light": "resources/light/collapse-all.svg", + "dark": "resources/dark/collapse-all.svg" + } + }, { "command": "sf.test.view.refresh", "title": "%refresh_test_title%", diff --git a/packages/salesforcedx-vscode-apex/package.nls.ja.json b/packages/salesforcedx-vscode-apex/package.nls.ja.json index 46208eead2..3ce21ea685 100644 --- a/packages/salesforcedx-vscode-apex/package.nls.ja.json +++ b/packages/salesforcedx-vscode-apex/package.nls.ja.json @@ -18,6 +18,7 @@ "apex_trace_server_description": "Controls the level of detail for trace logs in the Apex Language Server", "apex_verbose_level_trace_description": "Output everything, including details about notifications and responses received by the client, and requests sent by the server.", "configuration_title": "Salesforce Apex Configuration", + "collapse_tests_title": "SFDX: Apex テストを隠す", "go_to_definition_title": "定義に移動", "java_home_description": "Apex 言語サーバの起動に使用される Java 8 または Java 11 ランタイムのフォルダパスを指定します。(例: /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home)", "java_memory_description": "Apex 言語サーバへのメモリ割り当て量を MB 単位で指定します。空の場合はシステムのデフォルト値を使用します。", diff --git a/packages/salesforcedx-vscode-apex/package.nls.json b/packages/salesforcedx-vscode-apex/package.nls.json index 95e32f9b3e..abceb70277 100644 --- a/packages/salesforcedx-vscode-apex/package.nls.json +++ b/packages/salesforcedx-vscode-apex/package.nls.json @@ -18,6 +18,7 @@ "apex_trace_server_description": "Controls the level of detail for trace logs in the Apex Language Server", "apex_verbose_level_trace_description": "Output everything, including details about notifications and responses received by the client, and requests sent by the server.", "configuration_title": "Salesforce Apex Configuration", + "collapse_tests_title": "SFDX: Collapse All Apex Tests", "go_to_definition_title": "Go to Definition", "java_home_description": "Specifies the folder path to the Java 11 or Java 17 runtime used to launch the Apex Language Server. Note on Windows the backslashes must be escaped.\n\nMac Example: `/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home`\n\nWindows Example: `C:\\\\Program Files\\\\Zulu\\\\zulu-17`\n\nLinux Example: `/usr/lib/jvm/java-17-openjdk-amd64`", "java_memory_description": "Specifies the amount of memory allocation to the Apex Language Server in MB, or null to use the system default value.", diff --git a/packages/salesforcedx-vscode-apex/resources/dark/collapse-all.svg b/packages/salesforcedx-vscode-apex/resources/dark/collapse-all.svg new file mode 100644 index 0000000000..65c6f5149c --- /dev/null +++ b/packages/salesforcedx-vscode-apex/resources/dark/collapse-all.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/salesforcedx-vscode-apex/resources/light/collapse-all.svg b/packages/salesforcedx-vscode-apex/resources/light/collapse-all.svg new file mode 100644 index 0000000000..b70b6d5c96 --- /dev/null +++ b/packages/salesforcedx-vscode-apex/resources/light/collapse-all.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/salesforcedx-vscode-apex/src/index.ts b/packages/salesforcedx-vscode-apex/src/index.ts index 07443d1e15..7e3e9d6231 100644 --- a/packages/salesforcedx-vscode-apex/src/index.ts +++ b/packages/salesforcedx-vscode-apex/src/index.ts @@ -47,7 +47,7 @@ import { import { nls } from './messages'; import { retrieveEnableSyncInitJobs } from './settings'; import { telemetryService } from './telemetry'; -import { getTestOutlineProvider } from './views/testOutlineProvider'; +import { getTestOutlineProvider, TestNode } from './views/testOutlineProvider'; import { ApexTestRunner, TestRunType } from './views/testRunner'; export const activate = async (extensionContext: vscode.ExtensionContext) => { @@ -229,48 +229,64 @@ const registerTestView = (): vscode.Disposable => { const testViewItems = new Array(); const testProvider = vscode.window.registerTreeDataProvider( - 'sf.test.view', + testOutlineProvider.getId(), testOutlineProvider ); testViewItems.push(testProvider); // Run Test Button on Test View command testViewItems.push( - vscode.commands.registerCommand('sf.test.view.run', () => + vscode.commands.registerCommand(`${testOutlineProvider.getId()}.run`, () => testRunner.runAllApexTests() ) ); // Show Error Message command testViewItems.push( - vscode.commands.registerCommand('sf.test.view.showError', test => - testRunner.showErrorMessage(test) + vscode.commands.registerCommand( + `${testOutlineProvider.getId()}.showError`, + (test: TestNode) => testRunner.showErrorMessage(test) ) ); // Show Definition command testViewItems.push( - vscode.commands.registerCommand('sf.test.view.goToDefinition', test => - testRunner.showErrorMessage(test) + vscode.commands.registerCommand( + `${testOutlineProvider.getId()}.goToDefinition`, + (test: TestNode) => testRunner.showErrorMessage(test) ) ); // Run Class Tests command testViewItems.push( - vscode.commands.registerCommand('sf.test.view.runClassTests', test => - testRunner.runApexTests([test.name], TestRunType.Class) + vscode.commands.registerCommand( + `${testOutlineProvider.getId()}.runClassTests`, + (test: TestNode) => + testRunner.runApexTests([test.name], TestRunType.Class) ) ); // Run Single Test command testViewItems.push( - vscode.commands.registerCommand('sf.test.view.runSingleTest', test => - testRunner.runApexTests([test.name], TestRunType.Method) + vscode.commands.registerCommand( + `${testOutlineProvider.getId()}.runSingleTest`, + (test: TestNode) => + testRunner.runApexTests([test.name], TestRunType.Method) ) ); // Refresh Test View command testViewItems.push( - vscode.commands.registerCommand('sf.test.view.refresh', () => { - if (languageClientUtils.getStatus().isReady()) { - return testOutlineProvider.refresh(); + vscode.commands.registerCommand( + `${testOutlineProvider.getId()}.refresh`, + () => { + if (languageClientUtils.getStatus().isReady()) { + return testOutlineProvider.refresh(); + } } - }) + ) + ); + // Collapse All Apex Tests command + testViewItems.push( + vscode.commands.registerCommand( + `${testOutlineProvider.getId()}.collapseAll`, + () => testOutlineProvider.collapseAll() + ) ); return vscode.Disposable.from(...testViewItems); @@ -297,16 +313,19 @@ const createLanguageClient = async ( const languageClient = languageClientUtils.getClientInstance(); if (languageClient) { - languageClient.errorHandler?.addListener('error', message => { + languageClient.errorHandler?.addListener('error', (message: string) => { languageServerStatusBarItem.error(message); }); - languageClient.errorHandler?.addListener('restarting', count => { - languageServerStatusBarItem.error( - nls - .localize('apex_language_server_quit_and_restarting') - .replace('$N', count) - ); - }); + languageClient.errorHandler?.addListener( + 'restarting', + (count: number) => { + languageServerStatusBarItem.error( + nls + .localize('apex_language_server_quit_and_restarting') + .replace('$N', `${count}`) + ); + } + ); languageClient.errorHandler?.addListener('startFailed', () => { languageServerStatusBarItem.error( nls.localize('apex_language_server_failed_activate') @@ -343,17 +362,25 @@ const createLanguageClient = async ( ); } } catch (e) { - languageClientUtils.setStatus(ClientStatus.Error, e); - let eMsg = - typeof e === 'string' ? e : e.message ?? nls.localize('unknown_error'); + let errorMessage = ''; + if (typeof e === 'string') { + errorMessage = e; + } else if (e instanceof Error) { + errorMessage = e.message ?? nls.localize('unknown_error'); + } if ( - eMsg.includes(nls.localize('wrong_java_version_text', SET_JAVA_DOC_LINK)) + errorMessage.includes( + nls.localize('wrong_java_version_text', SET_JAVA_DOC_LINK) + ) ) { - eMsg = nls.localize('wrong_java_version_short'); + errorMessage = nls.localize('wrong_java_version_short'); } + languageClientUtils.setStatus(ClientStatus.Error, errorMessage); languageServerStatusBarItem.error( // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - `${nls.localize('apex_language_server_failed_activate')} - ${eMsg}` + `${nls.localize( + 'apex_language_server_failed_activate' + )} - ${errorMessage}` ); } }; diff --git a/packages/salesforcedx-vscode-apex/src/views/testOutlineProvider.ts b/packages/salesforcedx-vscode-apex/src/views/testOutlineProvider.ts index 734ba4ae68..1e2534b316 100644 --- a/packages/salesforcedx-vscode-apex/src/views/testOutlineProvider.ts +++ b/packages/salesforcedx-vscode-apex/src/views/testOutlineProvider.ts @@ -20,13 +20,17 @@ import { nls } from '../messages'; import { IconsEnum, iconHelpers } from './icons'; import { ApexTestMethod } from './lspConverter'; +// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access +const safeLocalize = (val: string) => nls.localize(val); + // Message -const LOADING_MESSAGE = nls.localize('test_view_loading_message'); -const NO_TESTS_MESSAGE = nls.localize('test_view_no_tests_message'); -const NO_TESTS_DESCRIPTION = nls.localize('test_view_no_tests_description'); +const LOADING_MESSAGE = safeLocalize('test_view_loading_message'); +const NO_TESTS_MESSAGE = safeLocalize('test_view_no_tests_message'); +const NO_TESTS_DESCRIPTION = safeLocalize('test_view_no_tests_description'); const TEST_RUN_ID_FILE = 'test-run-id.txt'; const TEST_RESULT_JSON_FILE = 'test-result.json'; +const BASE_ID = 'sf.test.view'; export class ApexTestOutlineProvider implements vscode.TreeDataProvider @@ -56,6 +60,10 @@ export class ApexTestOutlineProvider } } + public getId(): string { + return BASE_ID; + } + public getChildren(element: TestNode): TestNode[] { if (element) { return element.children; @@ -68,7 +76,7 @@ export class ApexTestOutlineProvider const languageClientStatus = languageClientUtils.getStatus(); if (!languageClientStatus.isReady()) { if (languageClientStatus.failedToInitialize()) { - vscode.window.showInformationMessage( + void vscode.window.showInformationMessage( languageClientStatus.getStatusMessage() ); return new Array(); @@ -110,30 +118,29 @@ export class ApexTestOutlineProvider this.rootNode = null; // Reset tests this.apexTestMap.clear(); this.testStrings.clear(); - this.apexTestInfo = null; - if (languageClientUtils.getStatus().isReady()) { - this.apexTestInfo = await getApexTests(); - this.createTestIndex(); - } + this.apexTestInfo = await getApexTests(); + this.createTestIndex(); this.getAllApexTests(); this.onDidChangeTestData.fire(undefined); } + public async collapseAll(): Promise { + return vscode.commands.executeCommand( + `workbench.actions.treeView.${this.getId()}.collapseAll` + ); + } + public async onResultFileCreate( apexTestPath: string, testResultFile: string ) { const testRunIdFile = path.join(apexTestPath, TEST_RUN_ID_FILE); - const testRunId = readFileSync(testRunIdFile); - let testResultFilePath; - if (testRunId.toString() === '') { - testResultFilePath = path.join(apexTestPath, TEST_RESULT_JSON_FILE); - } else { - testResultFilePath = path.join( - apexTestPath, - `test-result-${testRunId.toString()}.json` - ); - } + const testRunId = readFileSync(testRunIdFile).toString(); + const testResultFilePath = path.join( + apexTestPath, + !testRunId ? TEST_RESULT_JSON_FILE : `test-result-${testRunId}.json` + ); + if (testResultFile === testResultFilePath) { await this.refresh(); this.updateTestResults(testResultFile); @@ -157,7 +164,7 @@ export class ApexTestOutlineProvider } private getAllApexTests(): TestNode { - if (this.rootNode == null) { + if (this.rootNode === null) { // Starting Out this.rootNode = new ApexTestGroupNode(APEX_TESTS, null); } @@ -254,8 +261,8 @@ export abstract class TestNode extends vscode.TreeItem { this.description = label; this.name = label; this.command = { - command: 'sf.test.view.showError', - title: nls.localize('test_view_show_error_title'), + command: `${BASE_ID}.showError`, + title: safeLocalize('test_view_show_error_title'), arguments: [this] }; } @@ -316,12 +323,10 @@ export class ApexTestGroupNode extends TestNode { this.failing = 0; this.skipping = 0; this.children.forEach(child => { - if ((child as ApexTestNode).outcome === PASS_RESULT) { - this.passing++; - } else if ((child as ApexTestNode).outcome === FAIL_RESULT) { - this.failing++; - } else if ((child as ApexTestNode).outcome === SKIP_RESULT) { - this.skipping++; + if (child instanceof ApexTestNode) { + this.passing += child.outcome === PASS_RESULT ? 1 : 0; + this.failing += child.outcome === FAIL_RESULT ? 1 : 0; + this.skipping += child.outcome === SKIP_RESULT ? 1 : 0; } }); diff --git a/packages/salesforcedx-vscode-apex/test/jest/index.test.ts b/packages/salesforcedx-vscode-apex/test/jest/index.test.ts index 85afccb1ae..35e7c66843 100644 --- a/packages/salesforcedx-vscode-apex/test/jest/index.test.ts +++ b/packages/salesforcedx-vscode-apex/test/jest/index.test.ts @@ -74,7 +74,9 @@ describe('deactivate', () => { let stopSpy: jest.SpyInstance; beforeEach(() => { stopSpy = jest.fn(); - jest.spyOn(languageClientUtils, 'getClientInstance').mockReturnValue({ stop: stopSpy } as unknown as ApexLanguageClient); + jest + .spyOn(languageClientUtils, 'getClientInstance') + .mockReturnValue({ stop: stopSpy } as unknown as ApexLanguageClient); }); it('should call stop on the language client', async () => { diff --git a/packages/salesforcedx-vscode-apex/test/jest/views/testOutlineProvider.test.ts b/packages/salesforcedx-vscode-apex/test/jest/views/testOutlineProvider.test.ts new file mode 100644 index 0000000000..2bf5717c2e --- /dev/null +++ b/packages/salesforcedx-vscode-apex/test/jest/views/testOutlineProvider.test.ts @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024, salesforce.com, inc. + * All rights reserved. + * Licensed under the BSD 3-Clause license. + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import { iconHelpers } from '../../../src/views/icons/iconHelpers'; + +import { getTestOutlineProvider } from '../../../src/views/testOutlineProvider'; + +describe('testOutlineProvider Unit Tests.', () => { + const vscodeMocked = jest.mocked(vscode); + let commandMock: jest.SpyInstance; + + beforeEach(() => { + // testOutlineProvider has a hidden dependency on iconHelpers.getIconPath that needs to be mocked + // for our purposes, the return value has no bearing on what we're testing + jest + .spyOn(iconHelpers, 'getIconPath') + .mockReturnValue(vscode.Uri.parse('https://salesforce.com')); + commandMock = jest.spyOn(vscodeMocked.commands, 'executeCommand'); + }); + + it('sets test outline provider id', () => { + const provider = getTestOutlineProvider(); + expect(provider.getId()).toBe('sf.test.view'); + }); + + it('calls collapse all apex tests', () => { + const provider = getTestOutlineProvider(); + + void provider.collapseAll(); + + expect(commandMock.mock.calls.length).toBe(1); + expect(commandMock.mock.calls[0].length).toBe(1); + expect(commandMock.mock.calls[0][0]).toBe( + `workbench.actions.treeView.${provider.getId()}.collapseAll` + ); + }); +}); diff --git a/packages/salesforcedx-vscode-lwc/package.json b/packages/salesforcedx-vscode-lwc/package.json index b7c20d3842..4d8780fc03 100644 --- a/packages/salesforcedx-vscode-lwc/package.json +++ b/packages/salesforcedx-vscode-lwc/package.json @@ -196,12 +196,17 @@ { "command": "sf.lightning.lwc.test.runAllTests", "when": "view == sf.lightning.lwc.test.view", - "group": "navigation" + "group": "navigation@1" }, { "command": "sf.lightning.lwc.test.refreshTestExplorer", "when": "view == sf.lightning.lwc.test.view", - "group": "navigation" + "group": "navigation@2" + }, + { + "command": "sf.lightning.lwc.test.view.collapseAll", + "when": "view == sf.lightning.lwc.test.view", + "group": "navigation@3" } ], "view/item/context": [ @@ -336,6 +341,14 @@ "dark": "resources/dark/refresh.svg" } }, + { + "command": "sf.lightning.lwc.test.view.collapseAll", + "title": "%lightning_lwc_test_collapse_all_text%", + "icon": { + "light": "resources/light/collapse-all.svg", + "dark": "resources/dark/collapse-all.svg" + } + }, { "command": "sf.lightning.lwc.test.navigateToTest", "title": "%lightning_lwc_test_navigate_to_test%" diff --git a/packages/salesforcedx-vscode-lwc/package.nls.ja.json b/packages/salesforcedx-vscode-lwc/package.nls.ja.json index dfbdef757f..ffb1d5de64 100644 --- a/packages/salesforcedx-vscode-lwc/package.nls.ja.json +++ b/packages/salesforcedx-vscode-lwc/package.nls.ja.json @@ -10,6 +10,7 @@ "lightning_lwc_stop_text": "SFDX: ローカルの開発サーバを停止", "lightning_lwc_test_case_debug_text": "SFDX: Lightning Web コンポーネントのテストケースをデバッグ", "lightning_lwc_test_case_run_text": "SFDX: Lightning Web コンポーネントのテストケースを実行", + "lightning_lwc_test_collapse_all_text": "SFDX: Lightning Web コンポーネントテストエクスプローラを隠す", "lightning_lwc_test_debug_current_file_text": "SFDX: 現在の Lightning Web コンポーネントのテストファイルをデバッグ", "lightning_lwc_test_file_debug_text": "SFDX: Lightning Web コンポーネントのテストファイルをデバッグ", "lightning_lwc_test_file_run_text": "SFDX: Lightning Web コンポーネントのテストファイルを実行", diff --git a/packages/salesforcedx-vscode-lwc/package.nls.json b/packages/salesforcedx-vscode-lwc/package.nls.json index 246ab7fda2..4aa18fe2fc 100644 --- a/packages/salesforcedx-vscode-lwc/package.nls.json +++ b/packages/salesforcedx-vscode-lwc/package.nls.json @@ -9,6 +9,7 @@ "lightning_lwc_start_text": "SFDX: Start Local Development Server", "lightning_lwc_stop_text": "SFDX: Stop Local Development Server", "lightning_lwc_test_case_debug_text": "SFDX: Debug Lightning Web Component Test Case", + "lightning_lwc_test_collapse_all_text": "SFDX: Lightning Web Component Collapse All Tests", "lightning_lwc_test_case_run_text": "SFDX: Run Lightning Web Component Test Case", "lightning_lwc_test_debug_current_file_text": "SFDX: Debug Current Lightning Web Component Test File", "lightning_lwc_test_file_debug_text": "SFDX: Debug Lightning Web Component Test File", diff --git a/packages/salesforcedx-vscode-lwc/resources/dark/collapse-all.svg b/packages/salesforcedx-vscode-lwc/resources/dark/collapse-all.svg new file mode 100644 index 0000000000..65c6f5149c --- /dev/null +++ b/packages/salesforcedx-vscode-lwc/resources/dark/collapse-all.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/salesforcedx-vscode-lwc/resources/light/collapse-all.svg b/packages/salesforcedx-vscode-lwc/resources/light/collapse-all.svg new file mode 100644 index 0000000000..b70b6d5c96 --- /dev/null +++ b/packages/salesforcedx-vscode-lwc/resources/light/collapse-all.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/salesforcedx-vscode-lwc/src/testSupport/testExplorer/testOutlineProvider.ts b/packages/salesforcedx-vscode-lwc/src/testSupport/testExplorer/testOutlineProvider.ts index c1ed11719c..b8da0d126b 100644 --- a/packages/salesforcedx-vscode-lwc/src/testSupport/testExplorer/testOutlineProvider.ts +++ b/packages/salesforcedx-vscode-lwc/src/testSupport/testExplorer/testOutlineProvider.ts @@ -59,6 +59,16 @@ export class SfTestOutlineProvider ); } + public getId(): string { + return 'sf.lightning.lwc.test.view'; + } + + public async collapseAll(): Promise { + return vscode.commands.executeCommand( + `workbench.actions.treeView.${this.getId()}.collapseAll` + ); + } + public dispose() { while (this.disposables.length) { const disposable = this.disposables.pop(); @@ -132,9 +142,15 @@ export const registerLwcTestExplorerTreeView = ( ) => { const testOutlineProvider = new SfTestOutlineProvider(); const testProvider = vscode.window.registerTreeDataProvider( - 'sf.lightning.lwc.test.view', + testOutlineProvider.getId(), testOutlineProvider ); extensionContext.subscriptions.push(testOutlineProvider); extensionContext.subscriptions.push(testProvider); + + const collapseAllTestCommand = vscode.commands.registerCommand( + `${testOutlineProvider.getId()}.collapseAll`, + () => testOutlineProvider.collapseAll() + ); + extensionContext.subscriptions.push(collapseAllTestCommand); }; diff --git a/packages/salesforcedx-vscode-lwc/test/jest/testExplorer/testOutlineProvider.test.ts b/packages/salesforcedx-vscode-lwc/test/jest/testExplorer/testOutlineProvider.test.ts new file mode 100644 index 0000000000..cccfdf8b7b --- /dev/null +++ b/packages/salesforcedx-vscode-lwc/test/jest/testExplorer/testOutlineProvider.test.ts @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024, salesforce.com, inc. + * All rights reserved. + * Licensed under the BSD 3-Clause license. + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ + +import { extensionUris } from '@salesforce/salesforcedx-utils-vscode'; +import * as vscode from 'vscode'; + +// SfTestOutlineProvider has a hidden dependency on @salesforce/salesforcedx-utils-vscode.extensionUri that needs to be mocked +// and, crucially, the mock has to be done prior to the class import! +// for our purposes, the return value has no bearing on what we're testing +const mockUri = vscode.Uri.parse('https://salesforce.com'); +jest.spyOn(extensionUris, 'extensionUri').mockReturnValue(mockUri); +jest.spyOn(extensionUris, 'join').mockReturnValue(mockUri); + +import { SfTestOutlineProvider } from '../../../src/testSupport/testExplorer/testOutlineProvider'; + +describe('testOutlineProvider Unit Tests.', () => { + const vscodeMocked = jest.mocked(vscode); + let commandMock: jest.SpyInstance; + + beforeEach(() => { + commandMock = jest.spyOn(vscodeMocked.commands, 'executeCommand'); + }); + + it('sets test outline provider id', () => { + const provider = new SfTestOutlineProvider(); + expect(provider.getId()).toBe('sf.lightning.lwc.test.view'); + }); + + it('calls collapse all lwc tests', () => { + const provider = new SfTestOutlineProvider(); + + void provider.collapseAll(); + + expect(commandMock.mock.calls.length).toBe(1); + expect(commandMock.mock.calls[0].length).toBe(1); + expect(commandMock.mock.calls[0][0]).toBe( + `workbench.actions.treeView.${provider.getId()}.collapseAll` + ); + }); +}); diff --git a/packages/salesforcedx-vscode-lwc/test/unit/commands/commandConstants.test.ts b/packages/salesforcedx-vscode-lwc/test/unit/commands/commandConstants.test.ts index 07a04ec464..ef57206d63 100644 --- a/packages/salesforcedx-vscode-lwc/test/unit/commands/commandConstants.test.ts +++ b/packages/salesforcedx-vscode-lwc/test/unit/commands/commandConstants.test.ts @@ -9,7 +9,7 @@ import { DEV_SERVER_DEFAULT_BASE_URL } from '../../../src/commands/commandConsta describe('force:lightning:lwc:start constants', () => { describe('base url', () => { - it('should include localhost', async () => { + it('should include localhost', () => { expect(DEV_SERVER_DEFAULT_BASE_URL).to.include('localhost'); }); });