From 44d42bf403edbf132f0195b6407be53d6ada7b5e Mon Sep 17 00:00:00 2001 From: connectdotz Date: Sun, 22 Aug 2021 22:24:42 -0400 Subject: [PATCH 1/3] show release message once per workspace --- CHANGELOG.md | 2 +- src/extensionManager.ts | 41 +++++++++++++++++++--------------- tests/extensionManager.test.ts | 35 +++++++++++++++++++++++++---- 3 files changed, 55 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4491a963..7b20ec92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Please add your own contribution below inside the Master section ## Master * brief change description - @author - +* show release message once per workspace - @connetdotz --> ### 4.1.0 diff --git a/src/extensionManager.ts b/src/extensionManager.ts index 293079d3..dda80513 100644 --- a/src/extensionManager.ts +++ b/src/extensionManager.ts @@ -277,23 +277,28 @@ export class ExtensionManager { this.showReleaseMessage(); } private showReleaseMessage(): void { - vscode.window - .showInformationMessage( - `vscode-jest now supports the official vscode test explorer!!`, - 'Show Test Explorer', - 'See Details' - ) - .then((value) => { - if (value === 'Show Test Explorer') { - vscode.commands.executeCommand('workbench.view.testing.focus'); - } else { - vscode.commands.executeCommand( - 'vscode.open', - vscode.Uri.parse( - 'https://github.com/jest-community/vscode-jest/blob/master/README.md#how-to-use-the-test-explorer' - ) - ); - } - }); + const key = 'didShowMessage-4.1'; + const didShow = this.context.workspaceState.get(key, false); + if (!didShow) { + vscode.window + .showInformationMessage( + `vscode-jest now supports the official vscode test explorer!!`, + 'Show Test Explorer', + 'See Details' + ) + .then((value) => { + if (value === 'Show Test Explorer') { + vscode.commands.executeCommand('workbench.view.testing.focus'); + } else { + vscode.commands.executeCommand( + 'vscode.open', + vscode.Uri.parse( + 'https://github.com/jest-community/vscode-jest/blob/master/README.md#how-to-use-the-test-explorer' + ) + ); + } + }); + this.context.workspaceState.update(key, true); + } } } diff --git a/tests/extensionManager.test.ts b/tests/extensionManager.test.ts index b50534ef..e9394dbb 100644 --- a/tests/extensionManager.test.ts +++ b/tests/extensionManager.test.ts @@ -51,7 +51,7 @@ const mockJestExt = () => { return makeJestExt(args[1]); }); }; -const createExtensionManager = (workspaceFolders: string[]): ExtensionManager => { +const createExtensionManager = (workspaceFolders: string[], context?: any): ExtensionManager => { (vscode.workspace as any).workspaceFolders = workspaceFolders?.map((f) => makeWorkspaceFolder(f)) ?? []; @@ -59,7 +59,13 @@ const createExtensionManager = (workspaceFolders: string[]): ExtensionManager => return vscode.workspace.workspaceFolders.find((ws) => ws.name === uri); }); mockJestExt(); - const em = new ExtensionManager({} as any); + const extensionContext = context ?? { + workspaceState: { + get: jest.fn(), + update: jest.fn(), + }, + }; + const em = new ExtensionManager(extensionContext); vscode.workspace.workspaceFolders.forEach((ws) => em.register(ws)); return em; }; @@ -581,8 +587,14 @@ describe('ExtensionManager', () => { }); describe('activate', () => { let ext1, ext2; + let workspaceState; beforeEach(() => { - extensionManager = createExtensionManager(['ws-1', 'ws-2']); + workspaceState = { + get: jest.fn(), + update: jest.fn(), + }; + + extensionManager = createExtensionManager(['ws-1', 'ws-2'], { workspaceState }); ext1 = extensionManager.getByName('ws-1'); ext2 = extensionManager.getByName('ws-2'); (vscode.window.showInformationMessage as jest.Mocked).mockReturnValue( @@ -609,9 +621,10 @@ describe('ExtensionManager', () => { expect(ext1.onDidChangeActiveTextEditor).not.toBeCalled(); expect(ext2.onDidChangeActiveTextEditor).not.toBeCalled(); }); - describe('can show test explore information', () => { + describe('can show test explore information once per workspace', () => { beforeEach(() => { (vscode.window.activeTextEditor as any) = undefined; + workspaceState.get.mockReturnValue(false); }); it('can reveal test explore view', async () => { (vscode.window.showInformationMessage as jest.Mocked).mockReturnValue( @@ -633,6 +646,20 @@ describe('ExtensionManager', () => { ) ); }); + it('will not show again once it has been seen', async () => { + (vscode.window.showInformationMessage as jest.Mocked).mockReturnValue( + Promise.resolve('Show Test Explorer') + ); + await extensionManager.activate(); + expect(vscode.window.showInformationMessage).toBeCalled(); + expect(workspaceState.get).toBeCalled(); + expect(workspaceState.update).toBeCalledWith(expect.anything(), true); + (vscode.window.showInformationMessage as jest.Mocked).mockClear(); + + workspaceState.get.mockReturnValue(true); + await extensionManager.activate(); + expect(vscode.window.showInformationMessage).not.toBeCalled(); + }); }); }); }); From 978e4b72e586f6b1490a043c63009f78adbe784d Mon Sep 17 00:00:00 2001 From: connectdotz Date: Mon, 23 Aug 2021 12:09:05 -0400 Subject: [PATCH 2/3] clean up test a bit --- tests/extensionManager.test.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/extensionManager.test.ts b/tests/extensionManager.test.ts index e9394dbb..7dcdd708 100644 --- a/tests/extensionManager.test.ts +++ b/tests/extensionManager.test.ts @@ -587,11 +587,11 @@ describe('ExtensionManager', () => { }); describe('activate', () => { let ext1, ext2; - let workspaceState; beforeEach(() => { - workspaceState = { - get: jest.fn(), - update: jest.fn(), + const map = new Map(); + const workspaceState = { + get: jest.fn((key) => map.get(key)), + update: jest.fn((key: string, value: boolean) => map.set(key, value)), }; extensionManager = createExtensionManager(['ws-1', 'ws-2'], { workspaceState }); @@ -624,7 +624,6 @@ describe('ExtensionManager', () => { describe('can show test explore information once per workspace', () => { beforeEach(() => { (vscode.window.activeTextEditor as any) = undefined; - workspaceState.get.mockReturnValue(false); }); it('can reveal test explore view', async () => { (vscode.window.showInformationMessage as jest.Mocked).mockReturnValue( @@ -652,11 +651,9 @@ describe('ExtensionManager', () => { ); await extensionManager.activate(); expect(vscode.window.showInformationMessage).toBeCalled(); - expect(workspaceState.get).toBeCalled(); - expect(workspaceState.update).toBeCalledWith(expect.anything(), true); + (vscode.window.showInformationMessage as jest.Mocked).mockClear(); - workspaceState.get.mockReturnValue(true); await extensionManager.activate(); expect(vscode.window.showInformationMessage).not.toBeCalled(); }); From 736d6a8e1e816b071fe7ea2c7741d9a93f319df0 Mon Sep 17 00:00:00 2001 From: connectdotz Date: Tue, 24 Aug 2021 12:04:58 -0400 Subject: [PATCH 3/3] address comments --- CHANGELOG.md | 3 ++- package.json | 2 +- src/extensionManager.ts | 4 ++-- tests/extensionManager.test.ts | 7 +++++++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b20ec92..a239a206 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,10 @@ Please add your own contribution below inside the Master section ## Master * brief change description - @author -* show release message once per workspace - @connetdotz --> +### 4.1.1 +* show release message once per workspace - @connetdotz (#756) ### 4.1.0 * fix type warning in settings.json when using the `{"autoRun": "off"}` option - @tommy * fix couple of test result matching issues - @connectdotz (#737) diff --git a/package.json b/package.json index 7f7c969b..783e0152 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-jest", "displayName": "Jest", "description": "Use Facebook's Jest With Pleasure.", - "version": "4.1.0", + "version": "4.1.1", "publisher": "Orta", "engines": { "vscode": "^1.59.0" diff --git a/src/extensionManager.ts b/src/extensionManager.ts index dda80513..1aac53d7 100644 --- a/src/extensionManager.ts +++ b/src/extensionManager.ts @@ -282,14 +282,14 @@ export class ExtensionManager { if (!didShow) { vscode.window .showInformationMessage( - `vscode-jest now supports the official vscode test explorer!!`, + `vscode-jest now supports the official vscode test explorer.`, 'Show Test Explorer', 'See Details' ) .then((value) => { if (value === 'Show Test Explorer') { vscode.commands.executeCommand('workbench.view.testing.focus'); - } else { + } else if (value === 'See Details') { vscode.commands.executeCommand( 'vscode.open', vscode.Uri.parse( diff --git a/tests/extensionManager.test.ts b/tests/extensionManager.test.ts index 7dcdd708..74e00e5f 100644 --- a/tests/extensionManager.test.ts +++ b/tests/extensionManager.test.ts @@ -645,6 +645,13 @@ describe('ExtensionManager', () => { ) ); }); + it('if close without selecting any action, should exit with no-op', async () => { + (vscode.window.showInformationMessage as jest.Mocked).mockReturnValue( + Promise.resolve(undefined) + ); + await extensionManager.activate(); + expect(vscode.commands.executeCommand).not.toBeCalled(); + }); it('will not show again once it has been seen', async () => { (vscode.window.showInformationMessage as jest.Mocked).mockReturnValue( Promise.resolve('Show Test Explorer')