From 07f604de619efcc7f2e7b5f6d6990ad4560cb153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A9=20Voltz?= Date: Tue, 19 Nov 2024 18:38:49 +0100 Subject: [PATCH] fix(refresh-quota): Fix button refresh quota --- src/extension.ts | 5 +- .../gitguardian-quota-webview.ts | 2 +- .../gitguardian-quota-webview.test.ts | 88 +++++++++++++++++++ 3 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 src/test/suite/ggshield-webview/gitguardian-quota-webview.test.ts diff --git a/src/extension.ts b/src/extension.ts index 4590cb6..9609a6c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -114,9 +114,8 @@ export function activate(context: ExtensionContext) { //generic commands to open correct view on status bar click registerOpenViewsCommands(context, outputChannel); - commands.registerCommand( - "gitguardian.refreshQuota", - ggshieldQuotaViewProvider.refresh + commands.registerCommand("gitguardian.refreshQuota", () => + ggshieldQuotaViewProvider.refresh() ); context.subscriptions.push( diff --git a/src/ggshield-webview/gitguardian-quota-webview.ts b/src/ggshield-webview/gitguardian-quota-webview.ts index 9414641..3df07d3 100644 --- a/src/ggshield-webview/gitguardian-quota-webview.ts +++ b/src/ggshield-webview/gitguardian-quota-webview.ts @@ -58,7 +58,7 @@ export class GitGuardianQuotaWebviewProvider

Loading...

`; - } else if (this.quota !== undefined) { + } else if (this.quota !== 0 && this.isAuthenticated) { computedHtml = ` diff --git a/src/test/suite/ggshield-webview/gitguardian-quota-webview.test.ts b/src/test/suite/ggshield-webview/gitguardian-quota-webview.test.ts new file mode 100644 index 0000000..5bd82da --- /dev/null +++ b/src/test/suite/ggshield-webview/gitguardian-quota-webview.test.ts @@ -0,0 +1,88 @@ +import * as assert from "assert"; +import { GitGuardianQuotaWebviewProvider } from "../../../ggshield-webview/gitguardian-quota-webview"; +import { GGShieldConfiguration } from "../../../lib/ggshield-configuration"; +import { + ExtensionContext, + Memento, + Uri, + WebviewOptions, + WebviewView, +} from "vscode"; + +suite("GitGuardianQuotaWebviewProvider", () => { + let provider: GitGuardianQuotaWebviewProvider; + let mockGGShieldConfig: Partial; + let mockWebviewView: Partial; + let mockWorkspaceState: Memento & { + setKeysForSync(keys: readonly string[]): void; + }; + let mockContext: Partial; + + setup(() => { + mockWorkspaceState = { + get: (key: string) => undefined, + update: (key: string, value: any) => { + key = value; + return Promise.resolve(); + }, + keys: () => [], + setKeysForSync: (keys: readonly string[]) => {}, + }; + + mockContext = { + workspaceState: mockWorkspaceState, + }; + + provider = new GitGuardianQuotaWebviewProvider( + {} as GGShieldConfiguration, + Uri.parse("file:///mock"), + mockContext as ExtensionContext + ); + + mockWebviewView = { + webview: { + html: "", + onDidReceiveMessage: () => ({ dispose: () => {} }), + cspSource: "", + options: {} as WebviewOptions, + postMessage: (message: any) => Promise.resolve(true), + asWebviewUri: (uri: Uri) => uri, + }, + onDidChangeVisibility: () => ({ dispose: () => {} }), + visible: false, + }; + provider["_view"] = mockWebviewView as WebviewView; + }); + + test("should update the webview content when loading", () => { + provider["isLoading"] = true; + provider["updateWebViewContent"](); + + assert.ok(provider["_view"]?.webview.html.includes("

Loading...

")); + }); + + test("should display the quota when authenticated", () => { + provider["isLoading"] = false; + provider["isAuthenticated"] = true; + provider["quota"] = 100; + + provider["updateWebViewContent"](); + + assert.ok( + provider["_view"]?.webview.html.includes("

Your current quota: 100

") + ); + }); + + test("should display authentication prompt when unauthenticated", () => { + provider["isLoading"] = false; + provider["isAuthenticated"] = false; + + provider["updateWebViewContent"](); + + assert.ok( + provider["_view"]?.webview.html.includes( + "

Please authenticate to see your quota.

" + ) + ); + }); +});