From 07951b105ff6a5c568c7dc0e08d3a3cf21978fec Mon Sep 17 00:00:00 2001 From: Andrew Dewar Date: Thu, 19 Oct 2023 14:42:17 -0600 Subject: [PATCH] Fixes 2702: Add orgID to snapshot list endpoint --- pkg/dao/interfaces.go | 2 +- pkg/dao/snapshots.go | 11 ++++++----- pkg/dao/snapshots_mock.go | 26 +++++++++++++------------- pkg/dao/snapshots_test.go | 8 ++++---- pkg/handler/snapshots.go | 2 +- pkg/handler/snapshots_test.go | 2 +- test/integration/snapshot_test.go | 8 ++++---- 7 files changed, 30 insertions(+), 29 deletions(-) diff --git a/pkg/dao/interfaces.go b/pkg/dao/interfaces.go index 188f3581d..2f1747f69 100644 --- a/pkg/dao/interfaces.go +++ b/pkg/dao/interfaces.go @@ -79,7 +79,7 @@ type RepositoryDao interface { //go:generate mockery --name SnapshotDao --filename snapshots_mock.go --inpackage type SnapshotDao interface { Create(snap *models.Snapshot) error - List(repoConfigUuid string, paginationData api.PaginationData, _ api.FilterData) (api.SnapshotCollectionResponse, int64, error) + List(orgID string, repoConfigUuid string, paginationData api.PaginationData, filterData api.FilterData) (api.SnapshotCollectionResponse, int64, error) FetchForRepoConfigUUID(repoConfigUUID string) ([]models.Snapshot, error) Delete(snapUUID string) error FetchLatestSnapshot(repoConfigUUID string) (api.SnapshotResponse, error) diff --git a/pkg/dao/snapshots.go b/pkg/dao/snapshots.go index 42daf504f..25451a521 100644 --- a/pkg/dao/snapshots.go +++ b/pkg/dao/snapshots.go @@ -48,7 +48,7 @@ func (sDao *snapshotDaoImpl) Create(s *models.Snapshot) error { } // List the snapshots for a given repository config -func (sDao *snapshotDaoImpl) List(repoConfigUuid string, paginationData api.PaginationData, _ api.FilterData) (api.SnapshotCollectionResponse, int64, error) { +func (sDao snapshotDaoImpl) List(orgID string, repoConfigUuid string, paginationData api.PaginationData, _ api.FilterData) (api.SnapshotCollectionResponse, int64, error) { var snaps []models.Snapshot var totalSnaps int64 var repoConfig models.RepositoryConfiguration @@ -71,12 +71,13 @@ func (sDao *snapshotDaoImpl) List(repoConfigUuid string, paginationData api.Pagi order := convertSortByToSQL(paginationData.SortBy, sortMap, "created_at asc") filteredDB := sDao.db. - Where("snapshots.repository_configuration_uuid = ?", UuidifyString(repoConfigUuid)) + Model(&models.Snapshot{}). + Joins("JOIN repository_configurations ON repository_configuration_uuid = repository_configurations.uuid"). + Where("repository_configurations.org_id = ?", orgID). + Where("repository_configuration_uuid = ?", UuidifyString(repoConfigUuid)) // Get count - filteredDB. - Model(&snaps). - Count(&totalSnaps) + filteredDB.Count(&totalSnaps) if filteredDB.Error != nil { return api.SnapshotCollectionResponse{}, 0, filteredDB.Error diff --git a/pkg/dao/snapshots_mock.go b/pkg/dao/snapshots_mock.go index 476066758..f1f59c621 100644 --- a/pkg/dao/snapshots_mock.go +++ b/pkg/dao/snapshots_mock.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.32.0. DO NOT EDIT. +// Code generated by mockery v2.33.0. DO NOT EDIT. package dao @@ -12,7 +12,7 @@ import ( models "github.com/content-services/content-sources-backend/pkg/models" ) -// MockSnapshotDao is an autogenerated mock type for the SnapshotDao type +// MockSnapshotDao is an autogenerated mock type for the MockSnapshotDao type type MockSnapshotDao struct { mock.Mock } @@ -133,30 +133,30 @@ func (_m *MockSnapshotDao) InitializePulpClient(ctx context.Context, orgID strin return r0 } -// List provides a mock function with given fields: repoConfigUuid, paginationData, _a2 -func (_m *MockSnapshotDao) List(repoConfigUuid string, paginationData api.PaginationData, _a2 api.FilterData) (api.SnapshotCollectionResponse, int64, error) { - ret := _m.Called(repoConfigUuid, paginationData, _a2) +// List provides a mock function with given fields: orgID, repoConfigUuid, paginationData, filterData +func (_m *MockSnapshotDao) List(orgID string, repoConfigUuid string, paginationData api.PaginationData, filterData api.FilterData) (api.SnapshotCollectionResponse, int64, error) { + ret := _m.Called(orgID, repoConfigUuid, paginationData, filterData) var r0 api.SnapshotCollectionResponse var r1 int64 var r2 error - if rf, ok := ret.Get(0).(func(string, api.PaginationData, api.FilterData) (api.SnapshotCollectionResponse, int64, error)); ok { - return rf(repoConfigUuid, paginationData, _a2) + if rf, ok := ret.Get(0).(func(string, string, api.PaginationData, api.FilterData) (api.SnapshotCollectionResponse, int64, error)); ok { + return rf(orgID, repoConfigUuid, paginationData, filterData) } - if rf, ok := ret.Get(0).(func(string, api.PaginationData, api.FilterData) api.SnapshotCollectionResponse); ok { - r0 = rf(repoConfigUuid, paginationData, _a2) + if rf, ok := ret.Get(0).(func(string, string, api.PaginationData, api.FilterData) api.SnapshotCollectionResponse); ok { + r0 = rf(orgID, repoConfigUuid, paginationData, filterData) } else { r0 = ret.Get(0).(api.SnapshotCollectionResponse) } - if rf, ok := ret.Get(1).(func(string, api.PaginationData, api.FilterData) int64); ok { - r1 = rf(repoConfigUuid, paginationData, _a2) + if rf, ok := ret.Get(1).(func(string, string, api.PaginationData, api.FilterData) int64); ok { + r1 = rf(orgID, repoConfigUuid, paginationData, filterData) } else { r1 = ret.Get(1).(int64) } - if rf, ok := ret.Get(2).(func(string, api.PaginationData, api.FilterData) error); ok { - r2 = rf(repoConfigUuid, paginationData, _a2) + if rf, ok := ret.Get(2).(func(string, string, api.PaginationData, api.FilterData) error); ok { + r2 = rf(orgID, repoConfigUuid, paginationData, filterData) } else { r2 = ret.Error(2) } diff --git a/pkg/dao/snapshots_test.go b/pkg/dao/snapshots_test.go index 33303075c..0da08620d 100644 --- a/pkg/dao/snapshots_test.go +++ b/pkg/dao/snapshots_test.go @@ -102,7 +102,7 @@ func (s *SnapshotsSuite) TestCreateAndList() { snap := s.createSnapshot(rConfig) - collection, total, err := sDao.List(rConfig.UUID, pageData, filterData) + collection, total, err := sDao.List(rConfig.OrgID, rConfig.UUID, pageData, filterData) repository, _ := repoDao.fetchRepoConfig(rConfig.OrgID, rConfig.UUID) repositoryList, repoCount, _ := repoDao.List(rConfig.OrgID, api.PaginationData{Limit: -1}, api.FilterData{}) @@ -161,7 +161,7 @@ func (s *SnapshotsSuite) TestListNoSnapshots() { err = tx.Create(&rConfig).Error assert.NoError(t, err) - collection, total, err := sDao.List(rConfig.UUID, pageData, filterData) + collection, total, err := sDao.List(rConfig.OrgID, rConfig.UUID, pageData, filterData) assert.NoError(t, err) assert.Equal(t, int64(0), total) assert.Equal(t, 0, len(collection.Data)) @@ -190,7 +190,7 @@ func (s *SnapshotsSuite) TestListPageLimit() { s.createSnapshot(rConfig) } - collection, total, err := sDao.List(rConfig.UUID, pageData, filterData) + collection, total, err := sDao.List(rConfig.OrgID, rConfig.UUID, pageData, filterData) assert.NoError(t, err) assert.Equal(t, int64(11), total) assert.Equal(t, 10, len(collection.Data)) @@ -215,7 +215,7 @@ func (s *SnapshotsSuite) TestListNotFound() { s.createSnapshot(rConfig) - collection, total, err := sDao.List("bad-uuid", pageData, filterData) + collection, total, err := sDao.List(rConfig.OrgID, "bad-uuid", pageData, filterData) assert.Error(t, err) daoError, ok := err.(*ce.DaoError) assert.True(t, ok) diff --git a/pkg/handler/snapshots.go b/pkg/handler/snapshots.go index 6193d2102..fe4240e9f 100644 --- a/pkg/handler/snapshots.go +++ b/pkg/handler/snapshots.go @@ -51,7 +51,7 @@ func (sh *SnapshotHandler) listSnapshots(c echo.Context) error { return ce.NewErrorResponse(ce.HttpCodeForDaoError(err), "Error initializing pulp client", err.Error()) } - snapshots, totalSnaps, err := sh.DaoRegistry.Snapshot.List(uuid, pageData, filterData) + snapshots, totalSnaps, err := sh.DaoRegistry.Snapshot.List(orgID, uuid, pageData, filterData) if err != nil { return ce.NewErrorResponse(ce.HttpCodeForDaoError(err), "Error listing repository snapshots", err.Error()) } diff --git a/pkg/handler/snapshots_test.go b/pkg/handler/snapshots_test.go index 77f3bc5e1..1f0bcf455 100644 --- a/pkg/handler/snapshots_test.go +++ b/pkg/handler/snapshots_test.go @@ -66,7 +66,7 @@ func (suite *SnapshotSuite) TestSnapshotList() { uuid := "abcadaba" orgID := test_handler.MockOrgId suite.reg.Snapshot.On("InitializePulpClient", mock.AnythingOfType("*context.valueCtx"), orgID).Return(nil).Once() - suite.reg.Snapshot.On("List", uuid, paginationData, api.FilterData{}).Return(collection, int64(1), nil) + suite.reg.Snapshot.On("List", test_handler.MockOrgId, uuid, paginationData, api.FilterData{}).Return(collection, int64(1), nil) path := fmt.Sprintf("%s/repositories/%s/snapshots/?limit=%d", fullRootPath(), uuid, 10) req := httptest.NewRequest(http.MethodGet, path, nil) diff --git a/test/integration/snapshot_test.go b/test/integration/snapshot_test.go index 10f8132cb..e59d885bf 100644 --- a/test/integration/snapshot_test.go +++ b/test/integration/snapshot_test.go @@ -87,7 +87,7 @@ func (s *SnapshotSuite) TestSnapshot() { s.snapshotAndWait(taskClient, repo, repoUuid, accountId) // Verify the snapshot was created - snaps, _, err := s.dao.Snapshot.List(repo.UUID, api.PaginationData{Limit: -1}, api.FilterData{}) + snaps, _, err := s.dao.Snapshot.List(repo.OrgID, repo.UUID, api.PaginationData{Limit: -1}, api.FilterData{}) assert.NoError(s.T(), err) assert.NotEmpty(s.T(), snaps) time.Sleep(5 * time.Second) @@ -138,7 +138,7 @@ func (s *SnapshotSuite) TestSnapshot() { s.WaitOnTask(taskUuid) // Verify the snapshot was deleted - snaps, _, err = s.dao.Snapshot.List(repo.UUID, api.PaginationData{Limit: -1}, api.FilterData{}) + snaps, _, err = s.dao.Snapshot.List(repo.OrgID, repo.UUID, api.PaginationData{Limit: -1}, api.FilterData{}) assert.Error(s.T(), err) assert.Empty(s.T(), snaps.Data) time.Sleep(5 * time.Second) @@ -185,7 +185,7 @@ func (s *SnapshotSuite) snapshotAndWait(taskClient client.TaskClient, repo api.R s.WaitOnTask(taskUuid) // Verify the snapshot was created - snaps, _, err := s.dao.Snapshot.List(repo.UUID, api.PaginationData{Limit: -1}, api.FilterData{}) + snaps, _, err := s.dao.Snapshot.List(repo.OrgID, repo.UUID, api.PaginationData{Limit: -1}, api.FilterData{}) assert.NoError(s.T(), err) assert.NotEmpty(s.T(), snaps) time.Sleep(5 * time.Second) @@ -211,7 +211,7 @@ func (s *SnapshotSuite) cancelAndWait(taskClient client.TaskClient, taskUUID uui s.WaitOnCanceledTask(taskUUID) // Verify the snapshot was not created - snaps, _, err := s.dao.Snapshot.List(repo.UUID, api.PaginationData{}, api.FilterData{}) + snaps, _, err := s.dao.Snapshot.List(repo.OrgID, repo.UUID, api.PaginationData{}, api.FilterData{}) assert.NoError(s.T(), err) assert.Equal(s.T(), api.SnapshotCollectionResponse{Data: []api.SnapshotResponse{}}, snaps) }