diff --git a/packages/api/src/provider-info.ts b/packages/api/src/provider-info.ts index 53a9e78bc94..05dfa6e978a 100644 --- a/packages/api/src/provider-info.ts +++ b/packages/api/src/provider-info.ts @@ -38,6 +38,14 @@ export interface ProviderContainerConnectionInfo { socketPath: string; }; lifecycleMethods?: LifecycleMethod[]; + // can start the connection + canStart: boolean; + // can stop the connection + canStop: boolean; + // can edit the connection + canEdit: boolean; + // can delete the connection + canDelete: boolean; /** * Specify if the corresponding {@link import('@podman-desktop/api').ProviderContainerConnection} instance * has a shellAccess available @@ -55,6 +63,14 @@ export interface ProviderKubernetesConnectionInfo { apiURL: string; }; lifecycleMethods?: LifecycleMethod[]; + // can start the connection + canStart: boolean; + // can stop the connection + canStop: boolean; + // can edit the connection + canEdit: boolean; + // can delete the connection + canDelete: boolean; } export interface ProviderVmConnectionInfo { @@ -62,6 +78,14 @@ export interface ProviderVmConnectionInfo { name: string; status: ProviderConnectionStatus; lifecycleMethods?: LifecycleMethod[]; + // can start the connection + canStart: boolean; + // can stop the connection + canStop: boolean; + // can edit the connection + canEdit: boolean; + // can delete the connection + canDelete: boolean; } export type ProviderConnectionInfo = @@ -79,6 +103,10 @@ export interface ProviderInfo { vmConnections: ProviderVmConnectionInfo[]; status: ProviderStatus; lifecycleMethods?: LifecycleMethod[]; + // can start the provider + canStart: boolean; + // can stop the provider + canStop: boolean; // can create provider connection from ContainerProviderConnectionFactory params containerProviderConnectionCreation: boolean; // can initialize provider connection from ContainerProviderConnectionFactory params diff --git a/packages/main/src/plugin/container-registry.spec.ts b/packages/main/src/plugin/container-registry.spec.ts index 047d8e55256..a764d82decc 100644 --- a/packages/main/src/plugin/container-registry.spec.ts +++ b/packages/main/src/plugin/container-registry.spec.ts @@ -1383,6 +1383,10 @@ describe('buildImage', () => { }, lifecycleMethods: undefined, status: 'started', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; await expect( containerRegistry.buildImage('context', () => {}, { @@ -1467,6 +1471,10 @@ describe('buildImage', () => { }, lifecycleMethods: undefined, status: 'started', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; vi.spyOn(util, 'isWindows').mockImplementation(() => false); @@ -1553,6 +1561,10 @@ describe('buildImage', () => { }, lifecycleMethods: undefined, status: 'started', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; vi.spyOn(util, 'isWindows').mockImplementation(() => true); @@ -1656,6 +1668,10 @@ describe('buildImage', () => { }, lifecycleMethods: undefined, status: 'started', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; vi.spyOn(util, 'isWindows').mockImplementation(() => false); @@ -1761,6 +1777,10 @@ describe('buildImage', () => { }, lifecycleMethods: undefined, status: 'started', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; vi.spyOn(util, 'isWindows').mockImplementation(() => false); @@ -1842,6 +1862,10 @@ describe('buildImage', () => { }, lifecycleMethods: undefined, status: 'started', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; vi.spyOn(util, 'isWindows').mockImplementation(() => false); @@ -4037,6 +4061,10 @@ test('check createPod uses running podman connection if ProviderContainerConnect }, status: 'started', type: 'podman', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; const result = await containerRegistry.createPod({ diff --git a/packages/main/src/plugin/explore-features/explore-features.spec.ts b/packages/main/src/plugin/explore-features/explore-features.spec.ts index 7dd0e35a21c..423b3171745 100644 --- a/packages/main/src/plugin/explore-features/explore-features.spec.ts +++ b/packages/main/src/plugin/explore-features/explore-features.spec.ts @@ -113,6 +113,10 @@ const providerInfoMock: ProviderInfo = { endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }, ], @@ -131,6 +135,8 @@ const providerInfoMock: ProviderInfo = { images: {}, installationSupport: false, cleanupSupport: false, + canStart: false, + canStop: false, }; const extensionInfoMock: ExtensionInfo = { diff --git a/packages/main/src/plugin/index.spec.ts b/packages/main/src/plugin/index.spec.ts index 2a1d3e1a6d3..63f1e1478b6 100644 --- a/packages/main/src/plugin/index.spec.ts +++ b/packages/main/src/plugin/index.spec.ts @@ -1052,6 +1052,10 @@ describe('container-provider-registry:playKube', () => { endpoint: { socketPath: '.sock', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; test('should call ContainerProviderRegistry#playKube', async () => { diff --git a/packages/main/src/plugin/provider-registry.spec.ts b/packages/main/src/plugin/provider-registry.spec.ts index 4491af6f5c1..05d214b0a46 100644 --- a/packages/main/src/plugin/provider-registry.spec.ts +++ b/packages/main/src/plugin/provider-registry.spec.ts @@ -455,6 +455,10 @@ test('expect isProviderContainerConnection returns true with a ProviderContainer socketPath: '/endpoint1.sock', }, lifecycleMethods: undefined, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'started', }; const res = providerRegistry.isProviderContainerConnection(connection); @@ -469,6 +473,10 @@ test('expect isProviderContainerConnection returns false with a ProviderKubernet apiURL: 'url', }, lifecycleMethods: undefined, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'started', }; const res = providerRegistry.isProviderContainerConnection(connection); @@ -847,6 +855,10 @@ describe('should send events when starting a container connection', async () => endpoint: { socketPath: '/endpoint1.sock', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'started', vmType: { id: 'libkrun', @@ -966,6 +978,10 @@ test('should send events when starting a Kubernetes connection', async () => { connectionType: 'kubernetes', name: 'connection', endpoint: { apiURL: 'endpoint' }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'started', }; @@ -1016,6 +1032,10 @@ test('should send events when starting a VM connection', async () => { const connection: ProviderVmConnectionInfo = { connectionType: 'vm', name: 'connection', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'started', }; @@ -1085,6 +1105,10 @@ describe('when auto-starting a container connection', async () => { endpoint: { socketPath: '/endpoint1.sock', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'started', vmType: { id: 'libkrun', @@ -1263,6 +1287,10 @@ test('should send events when stopping a container connection', async () => { endpoint: { socketPath: '/endpoint1.sock', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'stopped', vmType: { id: 'libkrun', @@ -1334,6 +1362,10 @@ test('should send events when container connection status change', async () => { endpoint: { socketPath: '/endpoint1.sock', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'stopped', vmType: { id: 'libkrun', @@ -1413,6 +1445,10 @@ test('should send events when stopping a Kubernetes connection', async () => { endpoint: { apiURL: 'endpoint1', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'stopped', }; @@ -1463,6 +1499,10 @@ test('should send events when stopping a VM connection', async () => { const connection: ProviderVmConnectionInfo = { connectionType: 'vm', name: 'connection', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'stopped', }; @@ -1562,6 +1602,10 @@ test('should retrieve context of container provider', async () => { endpoint: { socketPath: '/endpoint1.sock', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'stopped', }; @@ -1617,6 +1661,10 @@ test('should retrieve context of kubernetes provider', async () => { endpoint: { apiURL: 'url', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'stopped', }; @@ -1673,6 +1721,10 @@ test('should retrieve context of VM provider', async () => { const connection: ProviderVmConnectionInfo = { connectionType: 'vm', name: 'connection', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'stopped', }; @@ -2341,6 +2393,10 @@ describe('shellInProviderConnection', () => { endpoint: { socketPath: '/endpoint1.sock', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'started', vmType: { id: 'libkrun', @@ -2434,6 +2490,10 @@ describe('shellInProviderConnection', () => { const connection: ProviderVmConnectionInfo = { connectionType: 'vm', name: 'connection', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, status: 'started', }; diff --git a/packages/main/src/plugin/provider-registry.ts b/packages/main/src/plugin/provider-registry.ts index 1ee200d3900..b12df1a96be 100644 --- a/packages/main/src/plugin/provider-registry.ts +++ b/packages/main/src/plugin/provider-registry.ts @@ -707,6 +707,10 @@ export class ProviderRegistry { endpoint: { socketPath: connection.endpoint.socketPath, }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, shellAccess: !!connection.shellAccess, vmType: connection.vmType ? { @@ -723,12 +727,20 @@ export class ProviderRegistry { endpoint: { apiURL: connection.endpoint.apiURL, }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; } else { providerConnection = { connectionType: 'vm', name: connection.name, status: connection.status(), + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, }; } if (connection.lifecycle) { @@ -746,6 +758,10 @@ export class ProviderRegistry { lifecycleMethods.push('edit'); } providerConnection.lifecycleMethods = lifecycleMethods; + providerConnection.canStart = !!connection.lifecycle.start; + providerConnection.canStop = !!connection.lifecycle.stop; + providerConnection.canEdit = !!connection.lifecycle.edit; + providerConnection.canDelete = !!connection.lifecycle.delete; } return providerConnection; } @@ -850,6 +866,8 @@ export class ProviderRegistry { warnings: provider.warnings, installationSupport, cleanupSupport, + canStart: false, + canStop: false, }; // handle update @@ -862,6 +880,9 @@ export class ProviderRegistry { if (this.providerLifecycles.has(provider.internalId)) { providerInfo.lifecycleMethods = ['start', 'stop']; } + const hasLifecycle = this.providerLifecycles.has(provider.internalId); + providerInfo.canStart = hasLifecycle; + providerInfo.canStop = hasLifecycle; return providerInfo; } diff --git a/packages/renderer/src/lib/container/CreateContainerFromExistingImage.spec.ts b/packages/renderer/src/lib/container/CreateContainerFromExistingImage.spec.ts index 6f1d16902fc..356d8f7ed45 100644 --- a/packages/renderer/src/lib/container/CreateContainerFromExistingImage.spec.ts +++ b/packages/renderer/src/lib/container/CreateContainerFromExistingImage.spec.ts @@ -96,6 +96,10 @@ const pInfo: ProviderContainerConnectionInfo = { endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }; const providerInfo = { diff --git a/packages/renderer/src/lib/dashboard/NewContentOnDashboardBadge.spec.ts b/packages/renderer/src/lib/dashboard/NewContentOnDashboardBadge.spec.ts index 42dddf72187..48aac6d4bfb 100644 --- a/packages/renderer/src/lib/dashboard/NewContentOnDashboardBadge.spec.ts +++ b/packages/renderer/src/lib/dashboard/NewContentOnDashboardBadge.spec.ts @@ -52,6 +52,10 @@ const pInfo: ProviderContainerConnectionInfo = { endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }; const providerInfo = { diff --git a/packages/renderer/src/lib/dashboard/ProviderCard.spec.ts b/packages/renderer/src/lib/dashboard/ProviderCard.spec.ts index 8526b7c8a24..d1466d15861 100644 --- a/packages/renderer/src/lib/dashboard/ProviderCard.spec.ts +++ b/packages/renderer/src/lib/dashboard/ProviderCard.spec.ts @@ -48,6 +48,8 @@ test('Expect provider region', async () => { images: {} as ProviderImages, installationSupport: false, cleanupSupport: false, + canStart: false, + canStop: false, }; const { findByRole } = render(ProviderCard, { provider }); @@ -77,6 +79,8 @@ test('Expect provider name', async () => { images: {} as ProviderImages, installationSupport: false, cleanupSupport: false, + canStart: false, + canStop: false, }; const { findByLabelText } = render(ProviderCard, { provider }); @@ -107,6 +111,8 @@ test('Expect provider icon', async () => { images: { icon: 'test.png' } as ProviderImages, installationSupport: false, cleanupSupport: false, + canStart: false, + canStop: false, }; const { findByRole } = render(ProviderCard, { provider }); @@ -141,6 +147,8 @@ test('Expect no provider version', async () => { images: {} as ProviderImages, installationSupport: false, cleanupSupport: false, + canStart: false, + canStop: false, // no version }; const { queryByLabelText } = render(ProviderCard, { provider }); @@ -172,6 +180,8 @@ test('Expect provider version', async () => { installationSupport: false, version: '1.2.3', cleanupSupport: false, + canStart: false, + canStop: false, }; const { findByLabelText } = render(ProviderCard, { provider }); @@ -202,6 +212,8 @@ test('Expect provider state', async () => { images: {} as ProviderImages, installationSupport: false, cleanupSupport: false, + canStart: false, + canStop: false, }; const { findByLabelText } = render(ProviderCard, { provider }); diff --git a/packages/renderer/src/lib/dashboard/ProviderInstalled.spec.ts b/packages/renderer/src/lib/dashboard/ProviderInstalled.spec.ts index 2f7e32fa455..72959574123 100644 --- a/packages/renderer/src/lib/dashboard/ProviderInstalled.spec.ts +++ b/packages/renderer/src/lib/dashboard/ProviderInstalled.spec.ts @@ -85,6 +85,8 @@ test('Expect installed provider shows button', async () => { warnings: [], extensionId: '', cleanupSupport: false, + canStart: false, + canStop: false, }; const initializationContext: InitializationContext = new InitializationContextImpl( @@ -141,6 +143,8 @@ test('Expect to see the initialize context error if provider installation fails' warnings: [], extensionId: '', cleanupSupport: false, + canStart: false, + canStop: false, }; const initializationContext: InitializationContext = new InitializationContextImpl( diff --git a/packages/renderer/src/lib/dashboard/ProviderStatusTestHelper.spec.ts b/packages/renderer/src/lib/dashboard/ProviderStatusTestHelper.spec.ts index 6689fa483c4..4a7a543976d 100644 --- a/packages/renderer/src/lib/dashboard/ProviderStatusTestHelper.spec.ts +++ b/packages/renderer/src/lib/dashboard/ProviderStatusTestHelper.spec.ts @@ -52,6 +52,8 @@ export async function verifyStatus< }, extensionId: '', cleanupSupport: false, + canStart: false, + canStop: false, }; const initializationContext: InitializationContext = { mode: InitializeAndStartMode }; diff --git a/packages/renderer/src/lib/forms/ContainerConnectionDropdown.spec.ts b/packages/renderer/src/lib/forms/ContainerConnectionDropdown.spec.ts index 167dcc7aea7..3b22f9cdd26 100644 --- a/packages/renderer/src/lib/forms/ContainerConnectionDropdown.spec.ts +++ b/packages/renderer/src/lib/forms/ContainerConnectionDropdown.spec.ts @@ -36,6 +36,10 @@ const CONTAINER_CONNECTION_INFO: ProviderContainerConnectionInfo = { }, name: 'podman', status: 'started', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', displayName: 'Podman', lifecycleMethods: undefined, diff --git a/packages/renderer/src/lib/forms/ContainerConnectionDropdownTest.spec.ts b/packages/renderer/src/lib/forms/ContainerConnectionDropdownTest.spec.ts index 94f0fcf96b1..fe3330c06f1 100644 --- a/packages/renderer/src/lib/forms/ContainerConnectionDropdownTest.spec.ts +++ b/packages/renderer/src/lib/forms/ContainerConnectionDropdownTest.spec.ts @@ -32,6 +32,10 @@ const MULTI_CONNECTIONS: ProviderContainerConnectionInfo[] = Array.from({ length socketPath: `socket-${index}`, }, status: 'started', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', })); diff --git a/packages/renderer/src/lib/image/BuildImageFromContainerfile.spec.ts b/packages/renderer/src/lib/image/BuildImageFromContainerfile.spec.ts index ea1f085c451..6670d5387ce 100644 --- a/packages/renderer/src/lib/image/BuildImageFromContainerfile.spec.ts +++ b/packages/renderer/src/lib/image/BuildImageFromContainerfile.spec.ts @@ -64,6 +64,10 @@ function setup(): void { endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }; const providerInfo = { diff --git a/packages/renderer/src/lib/image/ImageEmptyScreen.spec.ts b/packages/renderer/src/lib/image/ImageEmptyScreen.spec.ts index 4ea1c7eedb7..8e410f1f662 100644 --- a/packages/renderer/src/lib/image/ImageEmptyScreen.spec.ts +++ b/packages/renderer/src/lib/image/ImageEmptyScreen.spec.ts @@ -49,6 +49,10 @@ function setup(): void { endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }; const providerInfo = { diff --git a/packages/renderer/src/lib/image/ImportContainersImages.spec.ts b/packages/renderer/src/lib/image/ImportContainersImages.spec.ts index b550e1f7e96..58064617c82 100644 --- a/packages/renderer/src/lib/image/ImportContainersImages.spec.ts +++ b/packages/renderer/src/lib/image/ImportContainersImages.spec.ts @@ -38,6 +38,10 @@ const pInfo: ProviderContainerConnectionInfo = { endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }; const providerInfo = { diff --git a/packages/renderer/src/lib/image/LoadImages.spec.ts b/packages/renderer/src/lib/image/LoadImages.spec.ts index 47811373d2d..9a7d48a1066 100644 --- a/packages/renderer/src/lib/image/LoadImages.spec.ts +++ b/packages/renderer/src/lib/image/LoadImages.spec.ts @@ -38,6 +38,10 @@ const pInfo: ProviderContainerConnectionInfo = { endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }; const providerInfo = { diff --git a/packages/renderer/src/lib/image/PullImage.spec.ts b/packages/renderer/src/lib/image/PullImage.spec.ts index 26784b39ade..0295f99d401 100644 --- a/packages/renderer/src/lib/image/PullImage.spec.ts +++ b/packages/renderer/src/lib/image/PullImage.spec.ts @@ -51,6 +51,10 @@ const CONTAINER_CONNECTION_MOCK: ProviderContainerConnectionInfo = { endpoint: { socketPath: 'dummy/socket', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }; diff --git a/packages/renderer/src/lib/kube/KubePlayYAML.spec.ts b/packages/renderer/src/lib/kube/KubePlayYAML.spec.ts index 6294fb12dcb..acd217f2670 100644 --- a/packages/renderer/src/lib/kube/KubePlayYAML.spec.ts +++ b/packages/renderer/src/lib/kube/KubePlayYAML.spec.ts @@ -104,6 +104,10 @@ function setup(): void { endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }; const providerInfo = { diff --git a/packages/renderer/src/lib/network/CreateNetwork.spec.ts b/packages/renderer/src/lib/network/CreateNetwork.spec.ts index b2ceb56238c..191f5490744 100644 --- a/packages/renderer/src/lib/network/CreateNetwork.spec.ts +++ b/packages/renderer/src/lib/network/CreateNetwork.spec.ts @@ -58,6 +58,10 @@ function createProviderConnection( endpoint: { socketPath: '', }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', ...overrides, }; diff --git a/packages/renderer/src/lib/onboarding/OnboardingComponent.spec.ts b/packages/renderer/src/lib/onboarding/OnboardingComponent.spec.ts index 4feb1b40ed2..4991deb558b 100644 --- a/packages/renderer/src/lib/onboarding/OnboardingComponent.spec.ts +++ b/packages/renderer/src/lib/onboarding/OnboardingComponent.spec.ts @@ -34,6 +34,8 @@ const providerInfo: ProviderInfo = { icon: 'img', }, status: 'started', + canStart: false, + canStop: false, warnings: [], containerProviderConnectionCreation: true, detectionChecks: [], @@ -47,6 +49,10 @@ const providerInfo: ProviderInfo = { socketPath: 'socket', }, lifecycleMethods: ['start', 'stop', 'delete'], + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }, ], diff --git a/packages/renderer/src/lib/pod/PodCreateFromContainers.spec.ts b/packages/renderer/src/lib/pod/PodCreateFromContainers.spec.ts index 873f44ce867..06f0ecd5cc5 100644 --- a/packages/renderer/src/lib/pod/PodCreateFromContainers.spec.ts +++ b/packages/renderer/src/lib/pod/PodCreateFromContainers.spec.ts @@ -35,6 +35,8 @@ const providerInfo: ProviderInfo = { icon: 'img', }, status: 'started', + canStart: false, + canStop: false, warnings: [], containerProviderConnectionCreation: true, detectionChecks: [], @@ -48,6 +50,10 @@ const providerInfo: ProviderInfo = { socketPath: 'socket', }, lifecycleMethods: ['start', 'stop', 'delete'], + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }, ], diff --git a/packages/renderer/src/lib/pod/PodsList.spec.ts b/packages/renderer/src/lib/pod/PodsList.spec.ts index aa04f55a632..9763b442816 100644 --- a/packages/renderer/src/lib/pod/PodsList.spec.ts +++ b/packages/renderer/src/lib/pod/PodsList.spec.ts @@ -46,6 +46,8 @@ const getContributedMenusMock = vi.fn(); const kubernetesGetCurrentNamespaceMock = vi.fn(); const provider: ProviderInfo = { + canStart: false, + canStop: false, containerConnections: [ { connectionType: 'container', @@ -53,6 +55,10 @@ const provider: ProviderInfo = { displayName: 'MyConnection', status: 'started', endpoint: { socketPath: 'dummy' }, + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, type: 'podman', }, ], @@ -590,6 +596,10 @@ test('Expect to see empty page and no table when no container engine is running' { name: 'podman-machine-default', status: 'stopped', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, } as unknown as ProviderContainerConnectionInfo, ], } as unknown as ProviderInfo, @@ -648,6 +658,10 @@ test('Expect environment dropdown to appear with multiple running connections', displayName: 'Podman Machine', status: 'started', type: 'podman', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, } as unknown as ProviderContainerConnectionInfo, ], } as unknown as ProviderInfo, @@ -661,6 +675,10 @@ test('Expect environment dropdown to appear with multiple running connections', displayName: 'Docker Desktop', status: 'started', type: 'docker', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, } as unknown as ProviderContainerConnectionInfo, ], } as unknown as ProviderInfo, @@ -704,6 +722,10 @@ test('Expect environment dropdown to filter pods by selected environment', async displayName: 'Podman Machine', status: 'started', type: 'podman', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, } as unknown as ProviderContainerConnectionInfo, ], } as unknown as ProviderInfo, @@ -717,6 +739,10 @@ test('Expect environment dropdown to filter pods by selected environment', async displayName: 'Docker Desktop', status: 'started', type: 'docker', + canStart: false, + canStop: false, + canEdit: false, + canDelete: false, } as unknown as ProviderContainerConnectionInfo, ], } as unknown as ProviderInfo, diff --git a/packages/renderer/src/lib/preferences/PreferencesConnectionActions.spec.ts b/packages/renderer/src/lib/preferences/PreferencesConnectionActions.spec.ts index a78fb626af8..1fd0f85a0f0 100644 --- a/packages/renderer/src/lib/preferences/PreferencesConnectionActions.spec.ts +++ b/packages/renderer/src/lib/preferences/PreferencesConnectionActions.spec.ts @@ -52,6 +52,8 @@ const containerProviderInfo: ProviderInfo = { vmConnections: [], vmProviderConnectionCreation: false, vmProviderConnectionInitialization: false, + canStart: false, + canStop: false, }; const containerConnection: ProviderContainerConnectionInfo = { @@ -63,6 +65,10 @@ const containerConnection: ProviderContainerConnectionInfo = { socketPath: 'socket', }, lifecycleMethods: ['start', 'stop', 'delete'], + canStart: true, + canStop: true, + canEdit: false, + canDelete: true, type: 'podman', }; @@ -74,6 +80,10 @@ const kubernetesConnection: ProviderKubernetesConnectionInfo = { apiURL: 'url', }, lifecycleMethods: ['start', 'stop', 'delete'], + canStart: true, + canStop: true, + canEdit: false, + canDelete: true, }; const updateConnectionStatus = (): void => { diff --git a/packages/renderer/src/lib/preferences/PreferencesConnectionActions.svelte b/packages/renderer/src/lib/preferences/PreferencesConnectionActions.svelte index d2c87ac0565..5adbbd2374e 100644 --- a/packages/renderer/src/lib/preferences/PreferencesConnectionActions.svelte +++ b/packages/renderer/src/lib/preferences/PreferencesConnectionActions.svelte @@ -156,7 +156,7 @@ function getLoggerHandler(provider: ProviderInfo, containerConnectionInfo: Provi class="flex bg-[var(--pd-action-button-details-bg)] w-fit rounded-lg m-auto" role="group" aria-label="Connection Actions"> - {#if connection.lifecycleMethods.includes('start')} + {#if connection.canStart}