From 0f9c9f9388df0ee587de2b5c414342410a770f0e Mon Sep 17 00:00:00 2001 From: Sonia Sandler <66797193+SoniaSandler@users.noreply.github.com> Date: Fri, 22 Nov 2024 12:25:16 -0500 Subject: [PATCH] chore: add experimental flag setting for showing providers in statusbar (#10061) * chore: add experimental flag setting for providers in statusbar Signed-off-by: Sonia Sandler --- packages/main/src/plugin/index.ts | 4 ++ .../statusbar-providers-init.spec.ts | 55 +++++++++++++++++++ .../statusbar/statusbar-providers-init.ts | 40 ++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 packages/main/src/plugin/statusbar/statusbar-providers-init.spec.ts create mode 100644 packages/main/src/plugin/statusbar/statusbar-providers-init.ts diff --git a/packages/main/src/plugin/index.ts b/packages/main/src/plugin/index.ts index 19712934c858f..ebd7c2cef1cf7 100644 --- a/packages/main/src/plugin/index.ts +++ b/packages/main/src/plugin/index.ts @@ -168,6 +168,7 @@ import { Proxy } from './proxy.js'; import { RecommendationsRegistry } from './recommendations/recommendations-registry.js'; import { ReleaseNotesBannerInit } from './release-notes-banner-init.js'; import { SafeStorageRegistry } from './safe-storage/safe-storage-registry.js'; +import { StatusbarProvidersInit } from './statusbar/statusbar-providers-init.js'; import type { StatusBarEntryDescriptor } from './statusbar/statusbar-registry.js'; import { StatusBarRegistry } from './statusbar/statusbar-registry.js'; import { NotificationRegistry } from './tasks/notification-registry.js'; @@ -507,6 +508,9 @@ export class PluginSystem { const dockerCompatibility = new DockerCompatibility(configurationRegistry, providerRegistry); dockerCompatibility.init(); + const statusbarProviders = new StatusbarProvidersInit(configurationRegistry); + statusbarProviders.init(); + const messageBox = new MessageBox(apiSender); // Don't show the tray icon options on Mac diff --git a/packages/main/src/plugin/statusbar/statusbar-providers-init.spec.ts b/packages/main/src/plugin/statusbar/statusbar-providers-init.spec.ts new file mode 100644 index 0000000000000..85b433b3cfa6c --- /dev/null +++ b/packages/main/src/plugin/statusbar/statusbar-providers-init.spec.ts @@ -0,0 +1,55 @@ +/********************************************************************** + * Copyright (C) 2024 Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ***********************************************************************/ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { expect, test, vi } from 'vitest'; + +import type { ConfigurationRegistry } from '../configuration-registry.js'; +import { StatusbarProvidersInit } from './statusbar-providers-init.js'; + +const registerConfigurationsMock = vi.fn(); +const configurationRegistryMock = { + registerConfigurations: registerConfigurationsMock, +} as unknown as ConfigurationRegistry; + +test('should register a configuration', async () => { + vi.stubEnv('DEV', true); + const statusbarProvidersInit = new StatusbarProvidersInit(configurationRegistryMock); + statusbarProvidersInit.init(); + + expect(configurationRegistryMock.registerConfigurations).toBeCalled(); + const configurationNode = vi.mocked(configurationRegistryMock.registerConfigurations).mock.calls[0]?.[0][0]; + expect(configurationNode?.id).toBe('preferences.experimental.statusbarProviders'); + expect(configurationNode?.title).toBe('Experimental (Statusbar Providers)'); + expect(configurationNode?.properties).toBeDefined(); + expect(Object.keys(configurationNode?.properties ?? {}).length).toBe(1); + expect(configurationNode?.properties?.['statusbarProviders.showProviders']).toBeDefined(); + expect(configurationNode?.properties?.['statusbarProviders.showProviders']?.type).toBe('boolean'); + expect(configurationNode?.properties?.['statusbarProviders.showProviders']?.default).toBe(true); +}); + +test('False should be default if not in dev env', () => { + vi.resetAllMocks(); + vi.stubEnv('DEV', false); + const statusbarProvidersInit = new StatusbarProvidersInit(configurationRegistryMock); + statusbarProvidersInit.init(); + + expect(configurationRegistryMock.registerConfigurations).toBeCalled(); + const configurationNode = vi.mocked(configurationRegistryMock.registerConfigurations).mock.calls[0]?.[0][0]; + + expect(configurationNode?.properties?.['statusbarProviders.showProviders']?.default).toBe(false); +}); diff --git a/packages/main/src/plugin/statusbar/statusbar-providers-init.ts b/packages/main/src/plugin/statusbar/statusbar-providers-init.ts new file mode 100644 index 0000000000000..f869b91af42a5 --- /dev/null +++ b/packages/main/src/plugin/statusbar/statusbar-providers-init.ts @@ -0,0 +1,40 @@ +/********************************************************************** + * Copyright (C) 2024 Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ***********************************************************************/ + +import type { IConfigurationNode, IConfigurationRegistry } from '../configuration-registry.js'; + +export class StatusbarProvidersInit { + constructor(private configurationRegistry: IConfigurationRegistry) {} + + init(): void { + const statusbarProvidersConfiguration: IConfigurationNode = { + id: `preferences.experimental.statusbarProviders`, + title: 'Experimental (Statusbar Providers)', + type: 'object', + properties: { + [`statusbarProviders.showProviders`]: { + description: 'Show providers in statusbar', + type: 'boolean', + default: import.meta.env.DEV ? true : false, + }, + }, + }; + + this.configurationRegistry.registerConfigurations([statusbarProvidersConfiguration]); + } +}