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