mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Navigation: handle case when there is no alerting node at all (#64941)
* handle case when there is no alerting node at all * update backend tests
This commit is contained in:
parent
41843464d1
commit
f4c62a5c5d
pkg/services/navtree/navtreeimpl
@ -226,19 +226,22 @@ func (s *ServiceImpl) addPluginToSection(c *contextmodel.ReqContext, treeRoot *n
|
||||
Url: s.cfg.AppSubURL + "/monitoring",
|
||||
})
|
||||
case navtree.NavIDAlertsAndIncidents:
|
||||
alertsAndIncidentsChildren := []*navtree.NavLink{}
|
||||
if alertingNode != nil {
|
||||
treeRoot.AddSection(&navtree.NavLink{
|
||||
Text: "Alerts & incidents",
|
||||
Id: navtree.NavIDAlertsAndIncidents,
|
||||
SubTitle: "Alerting and incident management apps",
|
||||
Icon: "bell",
|
||||
Section: navtree.NavSectionCore,
|
||||
SortWeight: navtree.WeightAlertsAndIncidents,
|
||||
Children: []*navtree.NavLink{alertingNode, appLink},
|
||||
Url: s.cfg.AppSubURL + "/alerts-and-incidents",
|
||||
})
|
||||
alertsAndIncidentsChildren = append(alertsAndIncidentsChildren, alertingNode)
|
||||
treeRoot.RemoveSection(alertingNode)
|
||||
}
|
||||
alertsAndIncidentsChildren = append(alertsAndIncidentsChildren, appLink)
|
||||
treeRoot.AddSection(&navtree.NavLink{
|
||||
Text: "Alerts & incidents",
|
||||
Id: navtree.NavIDAlertsAndIncidents,
|
||||
SubTitle: "Alerting and incident management apps",
|
||||
Icon: "bell",
|
||||
Section: navtree.NavSectionCore,
|
||||
SortWeight: navtree.WeightAlertsAndIncidents,
|
||||
Children: alertsAndIncidentsChildren,
|
||||
Url: s.cfg.AppSubURL + "/alerts-and-incidents",
|
||||
})
|
||||
default:
|
||||
s.log.Error("Plugin app nav id not found", "pluginId", plugin.ID, "navId", sectionID)
|
||||
}
|
||||
|
@ -240,16 +240,6 @@ func TestAddAppLinks(t *testing.T) {
|
||||
alertsAndIncidentsNode := treeRoot.FindById(navtree.NavIDAlertsAndIncidents)
|
||||
require.Nil(t, alertsAndIncidentsNode)
|
||||
|
||||
// If there is no 'Alerting' node in the navigation (= alerting not enabled) then we don't auto-create the 'Alerts and Incidents' section
|
||||
treeRoot = navtree.NavTreeRoot{}
|
||||
service.navigationAppConfig = map[string]NavigationAppConfig{
|
||||
"test-app1": {SectionID: navtree.NavIDAlertsAndIncidents},
|
||||
}
|
||||
err = service.addAppLinks(&treeRoot, reqCtx)
|
||||
require.NoError(t, err)
|
||||
alertsAndIncidentsNode = treeRoot.FindById(navtree.NavIDAlertsAndIncidents)
|
||||
require.Nil(t, alertsAndIncidentsNode)
|
||||
|
||||
// It should appear and once an app tries to register to it and the `Alerting` nav node is present
|
||||
treeRoot = navtree.NavTreeRoot{}
|
||||
treeRoot.AddSection(&navtree.NavLink{Id: navtree.NavIDAlerting, Text: "Alerting"})
|
||||
@ -265,6 +255,30 @@ func TestAddAppLinks(t *testing.T) {
|
||||
require.Equal(t, "Test app1 name", alertsAndIncidentsNode.Children[1].Text)
|
||||
})
|
||||
|
||||
t.Run("Should add a 'Alerts and Incidents' section if a plugin exists that wants to live there even without an alerting node", func(t *testing.T) {
|
||||
service.features = featuremgmt.WithFeatures(featuremgmt.FlagTopnav)
|
||||
service.navigationAppConfig = map[string]NavigationAppConfig{}
|
||||
|
||||
// Check if the 'Alerts and Incidents' section is not there if no apps try to register to it
|
||||
treeRoot := navtree.NavTreeRoot{}
|
||||
err := service.addAppLinks(&treeRoot, reqCtx)
|
||||
require.NoError(t, err)
|
||||
alertsAndIncidentsNode := treeRoot.FindById(navtree.NavIDAlertsAndIncidents)
|
||||
require.Nil(t, alertsAndIncidentsNode)
|
||||
|
||||
// If there is no 'Alerting' node in the navigation then we still auto-create the 'Alerts and Incidents' section when a plugin wants to live there
|
||||
treeRoot = navtree.NavTreeRoot{}
|
||||
service.navigationAppConfig = map[string]NavigationAppConfig{
|
||||
"test-app1": {SectionID: navtree.NavIDAlertsAndIncidents},
|
||||
}
|
||||
err = service.addAppLinks(&treeRoot, reqCtx)
|
||||
require.NoError(t, err)
|
||||
alertsAndIncidentsNode = treeRoot.FindById(navtree.NavIDAlertsAndIncidents)
|
||||
require.NotNil(t, alertsAndIncidentsNode)
|
||||
require.Len(t, alertsAndIncidentsNode.Children, 1)
|
||||
require.Equal(t, "Test app1 name", alertsAndIncidentsNode.Children[0].Text)
|
||||
})
|
||||
|
||||
t.Run("Should be able to control app sort order with SortWeight (smaller SortWeight displayed first)", func(t *testing.T) {
|
||||
service.features = featuremgmt.WithFeatures(featuremgmt.FlagTopnav)
|
||||
service.navigationAppConfig = map[string]NavigationAppConfig{
|
||||
|
Loading…
Reference in New Issue
Block a user