From 57e7154f6007b923e111475bf87b0cb88057be00 Mon Sep 17 00:00:00 2001 From: arbulu89 Date: Tue, 18 Jan 2022 15:08:29 +0100 Subject: [PATCH] Get distinct cluster names for filters --- web/clusters.go | 7 +++++++ web/clusters_test.go | 4 ++++ web/services/clusters.go | 16 ++++++++++++++++ web/services/clusters_mock.go | 23 +++++++++++++++++++++++ web/services/clusters_test.go | 5 +++++ web/templates/clusters.html.tmpl | 6 ++---- 6 files changed, 57 insertions(+), 4 deletions(-) diff --git a/web/clusters.go b/web/clusters.go index 61a2e1360..2d3bd2ca4 100644 --- a/web/clusters.go +++ b/web/clusters.go @@ -57,6 +57,12 @@ func NewClusterListHandler(clustersService services.ClustersService) gin.Handler return } + filterClusterNames, err := clustersService.GetAllClusterNames() + if err != nil { + _ = c.Error(err) + return + } + filterClusterTypes, err := clustersService.GetAllClusterTypes() if err != nil { _ = c.Error(err) @@ -88,6 +94,7 @@ func NewClusterListHandler(clustersService services.ClustersService) gin.Handler c.HTML(http.StatusOK, "clusters.html.tmpl", gin.H{ "ClustersTable": clusterList, "AppliedFilters": query, + "filterClusterNames": filterClusterNames, "FilterClusterTypes": filterClusterTypes, "FilterSIDs": filterSIDs, "FilterTags": filterTags, diff --git a/web/clusters_test.go b/web/clusters_test.go index 7ead9ec34..e8708940c 100644 --- a/web/clusters_test.go +++ b/web/clusters_test.go @@ -322,6 +322,10 @@ func TestClustersListHandler(t *testing.T) { mockClusterService := new(services.MockClustersService) mockClusterService.On("GetAll", mock.Anything, mock.Anything).Return(clustersList, nil) mockClusterService.On("GetCount").Return(4, nil) + mockClusterService.On("GetAllClusterNames", mock.Anything).Return( + []string{"hana_cluster", "other_cluster", "netweaver_cluster"}, + nil, + ) mockClusterService.On("GetAllClusterTypes", mock.Anything).Return( []string{models.ClusterTypeHANAScaleUp, models.ClusterTypeUnknown}, nil, diff --git a/web/services/clusters.go b/web/services/clusters.go index 44d203785..2afb49500 100644 --- a/web/services/clusters.go +++ b/web/services/clusters.go @@ -19,6 +19,7 @@ type ClustersService interface { GetAll(*ClustersFilter, *Page) (models.ClusterList, error) GetByID(string) (*models.Cluster, error) GetCount() (int, error) + GetAllClusterNames() ([]string, error) GetAllClusterTypes() ([]string, error) GetAllSIDs() ([]string, error) GetAllTags() ([]string, error) @@ -134,6 +135,21 @@ func (s *clustersService) GetCount() (int, error) { return int(count), err } +func (s *clustersService) GetAllClusterNames() ([]string, error) { + var clusterNames []string + + err := s.db.Model(&entities.Cluster{}). + Distinct(). + Pluck("name", &clusterNames). + Error + + if err != nil { + return nil, err + } + + return clusterNames, nil +} + func (s *clustersService) GetAllClusterTypes() ([]string, error) { var clusterTypes []string diff --git a/web/services/clusters_mock.go b/web/services/clusters_mock.go index 1588b4f89..e086214c7 100644 --- a/web/services/clusters_mock.go +++ b/web/services/clusters_mock.go @@ -35,6 +35,29 @@ func (_m *MockClustersService) GetAll(_a0 *ClustersFilter, _a1 *Page) (models.Cl return r0, r1 } +// GetAllClusterNames provides a mock function with given fields: +func (_m *MockClustersService) GetAllClusterNames() ([]string, error) { + ret := _m.Called() + + var r0 []string + if rf, ok := ret.Get(0).(func() []string); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // GetAllClusterTypes provides a mock function with given fields: func (_m *MockClustersService) GetAllClusterTypes() ([]string, error) { ret := _m.Called() diff --git a/web/services/clusters_test.go b/web/services/clusters_test.go index 56ccdaf12..29bb2dc18 100644 --- a/web/services/clusters_test.go +++ b/web/services/clusters_test.go @@ -238,6 +238,11 @@ func (suite *ClustersServiceTestSuite) TestClustersService_GetClustersCount() { suite.Equal(3, count) } +func (suite *ClustersServiceTestSuite) TestClustersService_GetAllClusterNames() { + clusterNames, _ := suite.clustersService.GetAllClusterNames() + suite.ElementsMatch([]string{"cluster1", "cluster2", "cluster3"}, clusterNames) +} + func (suite *ClustersServiceTestSuite) TestClustersService_GetAllClusterTypes() { clusterTypes, _ := suite.clustersService.GetAllClusterTypes() suite.ElementsMatch( diff --git a/web/templates/clusters.html.tmpl b/web/templates/clusters.html.tmpl index ef491f1f2..227f6b669 100644 --- a/web/templates/clusters.html.tmpl +++ b/web/templates/clusters.html.tmpl @@ -29,10 +29,8 @@