Skip to content

Commit e715263

Browse files
committed
test: add unit tests for kubernetes providers manager
Signed-off-by: Philippe Martin <[email protected]>
1 parent 3c9025e commit e715263

File tree

2 files changed

+126
-0
lines changed

2 files changed

+126
-0
lines changed

__mocks__/@podman-desktop/api.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ const plugin = {
4040
onDidUpdateContainerConnection: vi.fn(),
4141
onDidRegisterContainerConnection: vi.fn(),
4242
onDidUnregisterContainerConnection: vi.fn(),
43+
onDidSetConnectionFactory: vi.fn(),
44+
onDidUnsetConnectionFactory: vi.fn(),
45+
getConnectionFactories: vi.fn(),
4346
},
4447
containerEngine: {
4548
onEvent: vi.fn(),
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
2+
import { KubernetesProvidersManager } from '/@/manager/kubernetes-providers';
3+
import type { ConnectionFactory, ConnectionFactoryDetails } from '@podman-desktop/api';
4+
import { provider } from '@podman-desktop/api';
5+
import { Disposable } from '@kubernetes-dashboard/channels';
6+
7+
8+
let manager: KubernetesProvidersManager;
9+
let onDidSetDisposable: Disposable;
10+
let onDidUnsetDisposable: Disposable;
11+
let onDidSetDispose: () => void;
12+
let onDidUnsetDispose: () => void;
13+
14+
beforeEach(() => {
15+
vi.resetAllMocks();
16+
onDidSetDispose = vi.fn();
17+
onDidUnsetDispose = vi.fn();
18+
onDidSetDisposable = Disposable.create(onDidSetDispose);
19+
onDidUnsetDisposable = Disposable.create(onDidUnsetDispose);
20+
vi.mocked(provider.onDidSetConnectionFactory).mockReturnValue(onDidSetDisposable);
21+
vi.mocked(provider.onDidUnsetConnectionFactory).mockReturnValue(onDidUnsetDisposable);
22+
23+
manager = new KubernetesProvidersManager();
24+
});
25+
26+
afterEach(() => {
27+
manager.dispose();
28+
});
29+
30+
describe('init', () => {
31+
let changeEvent: (e: void) => unknown;
32+
33+
beforeEach(() => {
34+
changeEvent = vi.fn();
35+
manager.onKubernetesProvidersChange(changeEvent);
36+
manager.init();
37+
});
38+
39+
afterEach(() => {
40+
manager.dispose();
41+
});
42+
43+
test('should call onDidSetConnectionFactory and onDidUnsetConnectionFactory', () => {
44+
expect(provider.onDidSetConnectionFactory).toHaveBeenCalled();
45+
expect(provider.onDidUnsetConnectionFactory).toHaveBeenCalled();
46+
});
47+
48+
test('event should be fired when a kubernetes connection is set', () => {
49+
const cbSet = vi.mocked(provider.onDidSetConnectionFactory).mock.calls[0][0];
50+
expect(cbSet).toBeDefined();
51+
cbSet!({ type: 'kubernetes', providerId: 'k8s-provider' } as ConnectionFactoryDetails);
52+
expect(changeEvent).toHaveBeenCalled();
53+
});
54+
55+
test('event should not be fired when a non-kubernetes connection is set', () => {
56+
const cbSet = vi.mocked(provider.onDidSetConnectionFactory).mock.calls[0][0];
57+
expect(cbSet).toBeDefined();
58+
cbSet!({ type: 'container', providerId: 'provider-id' } as ConnectionFactoryDetails);
59+
expect(changeEvent).not.toHaveBeenCalled();
60+
});
61+
62+
test('event should be fired when a kubernetes connection is unset', () => {
63+
const cbUnset = vi.mocked(provider.onDidUnsetConnectionFactory).mock.calls[0][0];
64+
expect(cbUnset).toBeDefined();
65+
cbUnset!({ type: 'kubernetes', providerId: 'k8s-provider' } as ConnectionFactory);
66+
expect(changeEvent).toHaveBeenCalled();
67+
});
68+
69+
test('event should not be fired when a non-kubernetes connection is unset', () => {
70+
const cbUnset = vi.mocked(provider.onDidUnsetConnectionFactory).mock.calls[0][0];
71+
expect(cbUnset).toBeDefined();
72+
cbUnset!({ type: 'container', providerId: 'provider-id' } as ConnectionFactory);
73+
expect(changeEvent).not.toHaveBeenCalled();
74+
});
75+
});
76+
77+
describe('getKubernetesProviders', () => {
78+
79+
beforeEach(() => {
80+
manager.init();
81+
});
82+
83+
test('should return the kubernetes providers', () => {
84+
vi.mocked(provider.getConnectionFactories).mockReturnValue([{
85+
type: 'kubernetes',
86+
providerId: 'k8s-provider',
87+
creationDisplayName: 'Kubernetes Provider',
88+
creationButtonTitle: 'Create Kubernetes Provider',
89+
emptyConnectionMarkdownDescription: 'Create a new Kubernetes Provider',
90+
images: {
91+
icon: {
92+
light: 'light.png',
93+
dark: 'dark.png',
94+
},
95+
},
96+
}]);
97+
const providers = manager.getKubernetesProviders();
98+
expect(providers).toEqual([{
99+
id: 'k8s-provider',
100+
creationDisplayName: 'Kubernetes Provider',
101+
creationButtonTitle: 'Create Kubernetes Provider',
102+
emptyConnectionMarkdownDescription: 'Create a new Kubernetes Provider',
103+
images: {
104+
icon: {
105+
light: 'light.png',
106+
dark: 'dark.png',
107+
},
108+
},
109+
}]);
110+
});
111+
});
112+
113+
describe('dispose', () => {
114+
beforeEach(() => {
115+
manager.init();
116+
});
117+
118+
test('should dispose the listeners', () => {
119+
manager.dispose();
120+
expect(onDidSetDispose).toHaveBeenCalled();
121+
expect(onDidUnsetDispose).toHaveBeenCalled();
122+
});
123+
});

0 commit comments

Comments
 (0)