| 
									
										
										
										
											2024-09-12 19:58:45 +08:00
										 |  |  | 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, | 
					
						
							| 
									
										
										
										
											2024-10-09 19:49:38 +08:00
										 |  |  |   expectSelectedScopePath, | 
					
						
							|  |  |  |   expectTreeScopePath, | 
					
						
							| 
									
										
										
										
											2024-09-12 19:58:45 +08:00
										 |  |  | } 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 }), | 
					
						
							| 
									
										
										
										
											2024-09-13 15:23:18 +08:00
										 |  |  |   usePluginLinks: jest.fn().mockReturnValue({ links: [] }), | 
					
						
							| 
									
										
										
										
											2024-09-12 19:58:45 +08:00
										 |  |  | })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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'); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2024-10-09 19:49:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   it('Updates the paths for scopes without paths on nodes fetching', async () => { | 
					
						
							|  |  |  |     const selectedScopeName = 'grafana'; | 
					
						
							|  |  |  |     const unselectedScopeName = 'mimir'; | 
					
						
							|  |  |  |     const selectedScopeNameFromOtherGroup = 'dev'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await updateScopes([selectedScopeName, selectedScopeNameFromOtherGroup]); | 
					
						
							|  |  |  |     expectSelectedScopePath(selectedScopeName, []); | 
					
						
							|  |  |  |     expectTreeScopePath(selectedScopeName, []); | 
					
						
							|  |  |  |     expectSelectedScopePath(unselectedScopeName, undefined); | 
					
						
							|  |  |  |     expectTreeScopePath(unselectedScopeName, undefined); | 
					
						
							|  |  |  |     expectSelectedScopePath(selectedScopeNameFromOtherGroup, []); | 
					
						
							|  |  |  |     expectTreeScopePath(selectedScopeNameFromOtherGroup, []); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await openSelector(); | 
					
						
							|  |  |  |     await expandResultApplications(); | 
					
						
							|  |  |  |     const expectedPath = ['', 'applications', 'applications-grafana']; | 
					
						
							|  |  |  |     expectSelectedScopePath(selectedScopeName, expectedPath); | 
					
						
							|  |  |  |     expectTreeScopePath(selectedScopeName, expectedPath); | 
					
						
							|  |  |  |     expectSelectedScopePath(unselectedScopeName, undefined); | 
					
						
							|  |  |  |     expectTreeScopePath(unselectedScopeName, undefined); | 
					
						
							|  |  |  |     expectSelectedScopePath(selectedScopeNameFromOtherGroup, []); | 
					
						
							|  |  |  |     expectTreeScopePath(selectedScopeNameFromOtherGroup, []); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2024-09-12 19:58:45 +08:00
										 |  |  | }); |