Skip to content

Commit

Permalink
chore: add experimental flag setting for showing providers in statusb…
Browse files Browse the repository at this point in the history
…ar (podman-desktop#10061)

* chore: add experimental flag setting for providers in statusbar
Signed-off-by: Sonia Sandler <[email protected]>
  • Loading branch information
SoniaSandler authored Nov 22, 2024
1 parent c85a968 commit 0f9c9f9
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 0 deletions.
4 changes: 4 additions & 0 deletions packages/main/src/plugin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
});
40 changes: 40 additions & 0 deletions packages/main/src/plugin/statusbar/statusbar-providers-init.ts
Original file line number Diff line number Diff line change
@@ -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]);
}
}

0 comments on commit 0f9c9f9

Please sign in to comment.