mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			248 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
		
		
			
		
	
	
			248 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
|  | import { config } from '@grafana/runtime'; | ||
|  | 
 | ||
|  | import { | ||
|  |   applyScopes, | ||
|  |   clearScopesSearch, | ||
|  |   expandResultApplications, | ||
|  |   expandResultApplicationsCloud, | ||
|  |   expandResultCloud, | ||
|  |   openSelector, | ||
|  |   searchScopes, | ||
|  |   selectPersistedApplicationsMimir, | ||
|  |   selectResultApplicationsCloud, | ||
|  |   selectResultApplicationsCloudDev, | ||
|  |   selectResultApplicationsGrafana, | ||
|  |   selectResultApplicationsMimir, | ||
|  |   selectResultCloud, | ||
|  |   selectResultCloudDev, | ||
|  |   selectResultCloudOps, | ||
|  |   updateScopes, | ||
|  | } from './utils/actions'; | ||
|  | import { | ||
|  |   expectPersistedApplicationsGrafanaNotPresent, | ||
|  |   expectPersistedApplicationsMimirNotPresent, | ||
|  |   expectPersistedApplicationsMimirPresent, | ||
|  |   expectResultApplicationsCloudNotPresent, | ||
|  |   expectResultApplicationsCloudPresent, | ||
|  |   expectResultApplicationsGrafanaNotPresent, | ||
|  |   expectResultApplicationsGrafanaPresent, | ||
|  |   expectResultApplicationsGrafanaSelected, | ||
|  |   expectResultApplicationsMimirNotPresent, | ||
|  |   expectResultApplicationsMimirPresent, | ||
|  |   expectResultApplicationsMimirSelected, | ||
|  |   expectResultCloudDevNotSelected, | ||
|  |   expectResultCloudDevSelected, | ||
|  |   expectResultCloudOpsNotSelected, | ||
|  |   expectResultCloudOpsSelected, | ||
|  |   expectScopesHeadline, | ||
|  |   expectScopesSelectorValue, | ||
|  | } from './utils/assertions'; | ||
|  | import { fetchNodesSpy, fetchScopeSpy, getDatasource, getInstanceSettings, getMock } from './utils/mocks'; | ||
|  | import { renderDashboard, resetScenes } from './utils/render'; | ||
|  | 
 | ||
|  | jest.mock('@grafana/runtime', () => ({ | ||
|  |   __esModule: true, | ||
|  |   ...jest.requireActual('@grafana/runtime'), | ||
|  |   useChromeHeaderHeight: jest.fn(), | ||
|  |   getBackendSrv: () => ({ get: getMock }), | ||
|  |   getDataSourceSrv: () => ({ get: getDatasource, getInstanceSettings }), | ||
|  |   usePluginLinkExtensions: jest.fn().mockReturnValue({ extensions: [] }), | ||
|  | })); | ||
|  | 
 | ||
|  | describe('Tree', () => { | ||
|  |   beforeAll(() => { | ||
|  |     config.featureToggles.scopeFilters = true; | ||
|  |     config.featureToggles.groupByVariable = true; | ||
|  |   }); | ||
|  | 
 | ||
|  |   beforeEach(() => { | ||
|  |     renderDashboard(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   afterEach(async () => { | ||
|  |     await resetScenes(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Fetches scope details on select', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsGrafana(); | ||
|  |     expect(fetchScopeSpy).toHaveBeenCalledTimes(1); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Selects the proper scopes', async () => { | ||
|  |     await updateScopes(['grafana', 'mimir']); | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     expectResultApplicationsGrafanaSelected(); | ||
|  |     expectResultApplicationsMimirSelected(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Can select scopes from same level', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsGrafana(); | ||
|  |     await selectResultApplicationsMimir(); | ||
|  |     await selectResultApplicationsCloud(); | ||
|  |     await applyScopes(); | ||
|  |     expectScopesSelectorValue('Grafana, Mimir, Cloud'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Can select a node from an inner level', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsGrafana(); | ||
|  |     await expandResultApplicationsCloud(); | ||
|  |     await selectResultApplicationsCloudDev(); | ||
|  |     await applyScopes(); | ||
|  |     expectScopesSelectorValue('Dev'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Can select a node from an upper level', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsGrafana(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultCloud(); | ||
|  |     await applyScopes(); | ||
|  |     expectScopesSelectorValue('Cloud'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Respects only one select per container', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultCloud(); | ||
|  |     await selectResultCloudDev(); | ||
|  |     expectResultCloudDevSelected(); | ||
|  |     expectResultCloudOpsNotSelected(); | ||
|  | 
 | ||
|  |     await selectResultCloudOps(); | ||
|  |     expectResultCloudDevNotSelected(); | ||
|  |     expectResultCloudOpsSelected(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Search works', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await searchScopes('Cloud'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(3); | ||
|  |     expectResultApplicationsGrafanaNotPresent(); | ||
|  |     expectResultApplicationsMimirNotPresent(); | ||
|  |     expectResultApplicationsCloudPresent(); | ||
|  | 
 | ||
|  |     await clearScopesSearch(); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(4); | ||
|  | 
 | ||
|  |     await searchScopes('Grafana'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(5); | ||
|  |     expectResultApplicationsGrafanaPresent(); | ||
|  |     expectResultApplicationsCloudNotPresent(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Opens to a selected scope', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsMimir(); | ||
|  |     await expandResultApplications(); | ||
|  |     await expandResultCloud(); | ||
|  |     await applyScopes(); | ||
|  |     await openSelector(); | ||
|  |     expectResultApplicationsMimirPresent(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Persists a scope', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsMimir(); | ||
|  |     await searchScopes('grafana'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(3); | ||
|  |     expectPersistedApplicationsMimirPresent(); | ||
|  |     expectPersistedApplicationsGrafanaNotPresent(); | ||
|  |     expectResultApplicationsMimirNotPresent(); | ||
|  |     expectResultApplicationsGrafanaPresent(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Does not persist a retrieved scope', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsMimir(); | ||
|  |     await searchScopes('mimir'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(3); | ||
|  |     expectPersistedApplicationsMimirNotPresent(); | ||
|  |     expectResultApplicationsMimirPresent(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Removes persisted nodes', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsMimir(); | ||
|  |     await searchScopes('grafana'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(3); | ||
|  | 
 | ||
|  |     await clearScopesSearch(); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(4); | ||
|  |     expectPersistedApplicationsMimirNotPresent(); | ||
|  |     expectPersistedApplicationsGrafanaNotPresent(); | ||
|  |     expectResultApplicationsMimirPresent(); | ||
|  |     expectResultApplicationsGrafanaPresent(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Persists nodes from search', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await searchScopes('mimir'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(3); | ||
|  | 
 | ||
|  |     await selectResultApplicationsMimir(); | ||
|  |     await searchScopes('unknown'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(4); | ||
|  |     expectPersistedApplicationsMimirPresent(); | ||
|  | 
 | ||
|  |     await clearScopesSearch(); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(5); | ||
|  |     expectResultApplicationsMimirPresent(); | ||
|  |     expectResultApplicationsGrafanaPresent(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Selects a persisted scope', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsMimir(); | ||
|  |     await searchScopes('grafana'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(3); | ||
|  | 
 | ||
|  |     await selectResultApplicationsGrafana(); | ||
|  |     await applyScopes(); | ||
|  |     expectScopesSelectorValue('Mimir, Grafana'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Deselects a persisted scope', async () => { | ||
|  |     await openSelector(); | ||
|  |     await expandResultApplications(); | ||
|  |     await selectResultApplicationsMimir(); | ||
|  |     await searchScopes('grafana'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(3); | ||
|  | 
 | ||
|  |     await selectResultApplicationsGrafana(); | ||
|  |     await applyScopes(); | ||
|  |     expectScopesSelectorValue('Mimir, Grafana'); | ||
|  | 
 | ||
|  |     await openSelector(); | ||
|  |     await selectPersistedApplicationsMimir(); | ||
|  |     await applyScopes(); | ||
|  |     expectScopesSelectorValue('Grafana'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('Shows the proper headline', async () => { | ||
|  |     await openSelector(); | ||
|  |     expectScopesHeadline('Recommended'); | ||
|  | 
 | ||
|  |     await searchScopes('Applications'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(2); | ||
|  |     expectScopesHeadline('Results'); | ||
|  | 
 | ||
|  |     await searchScopes('unknown'); | ||
|  |     expect(fetchNodesSpy).toHaveBeenCalledTimes(3); | ||
|  |     expectScopesHeadline('No results found for your query'); | ||
|  |   }); | ||
|  | }); |