diff --git a/backend/pkg/database/id_view.go b/backend/pkg/database/id_view.go index e71274d..d176a06 100644 --- a/backend/pkg/database/id_view.go +++ b/backend/pkg/database/id_view.go @@ -65,19 +65,17 @@ func (i *IDsViewHandler) GetIDs(params GetIDsParams, idsShouldMatch bool) ([]str } lookupIDColumnName := getIDViewColumnNameByIDType(params.LookupIDType) + filterIDColumnName := getIDViewColumnNameByIDType(params.FilterIDType) // we will use Session(&gorm.Session{}) here so every call to the handler will start from scratch tx := i.IDsView. Session(&gorm.Session{}). Select("distinct " + lookupIDColumnName) - filterIDColumnName := getIDViewColumnNameByIDType(params.FilterIDType) - if idsShouldMatch { for _, id := range params.FilterIDs { // for each OR filter we need to verify that lookup id column is not null to avoid failing during Find - tx.Or("? = ? AND ? is not null", filterIDColumnName, id, - lookupIDColumnName) + tx.Or(fmt.Sprintf("%s = ? AND %s is not null", filterIDColumnName, lookupIDColumnName), id) } } else { for _, id := range params.FilterIDs { diff --git a/backend/pkg/database/id_view_test.go b/backend/pkg/database/id_view_test.go new file mode 100644 index 0000000..5341500 --- /dev/null +++ b/backend/pkg/database/id_view_test.go @@ -0,0 +1,65 @@ +// Copyright © 2024 Cisco Systems, Inc. and its affiliates. +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package database + +import ( + "testing" + + "github.com/openclarity/kubeclarity/api/server/restapi/operations" +) + +func TestIdView(t *testing.T) { + // prepare database + db := Init(&DBConfig{ + EnableInfoLogs: false, + DriverType: DBDriverTypeLocal, + ViewRefreshIntervalSecond: 1, + }) + db.CreateFakeData() + + // fetch first application + sortDir := string("ASC") + apps, _, err := db.ApplicationTable().GetApplicationsAndTotal(GetApplicationsParams{ + GetApplicationsParams: operations.GetApplicationsParams{ + SortDir: &sortDir, + SortKey: "applicationName", + Page: 1, + PageSize: 1, + }, + }) + if err != nil || len(apps) != 1 { + t.Fatalf("expected one application") + } + + // set application ID + appID := apps[0].ID + + // fetch application from view table + appViewIDs, err := db.IDsView().GetIDs( + GetIDsParams{ + FilterIDs: []string{appID}, + FilterIDType: ApplicationIDType, + LookupIDType: ApplicationIDType, + }, + true, + ) + if err != nil || len(appViewIDs) != 1 { + t.Fatalf("expected one application from IDsView table") + } + if appViewIDs[0] != appID { + t.Fatalf("expected application ID from IDsView table to be same as ID from Applications table") + } +}