Pubdash: Email sharing handle dashboard deleted (#64247)
dashboard service calls pubdash service when dashboard deleted
This commit is contained in:
@@ -329,17 +329,37 @@ func (pd *PublicDashboardServiceImpl) GetOrgIdByAccessToken(ctx context.Context,
|
||||
return pd.store.GetOrgIdByAccessToken(ctx, accessToken)
|
||||
}
|
||||
|
||||
func (pd *PublicDashboardServiceImpl) Delete(ctx context.Context, orgId int64, uid string) error {
|
||||
affectedRows, err := pd.store.Delete(ctx, orgId, uid)
|
||||
func (pd *PublicDashboardServiceImpl) Delete(ctx context.Context, uid string) error {
|
||||
return pd.serviceWrapper.Delete(ctx, uid)
|
||||
}
|
||||
|
||||
func (pd *PublicDashboardServiceImpl) DeleteByDashboard(ctx context.Context, dashboard *dashboards.Dashboard) error {
|
||||
if dashboard.IsFolder {
|
||||
// get all pubdashes for the folder
|
||||
pubdashes, err := pd.store.FindByDashboardFolder(ctx, dashboard)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// delete each pubdash
|
||||
for _, pubdash := range pubdashes {
|
||||
err = pd.serviceWrapper.Delete(ctx, pubdash.Uid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
pubdash, err := pd.store.FindByDashboardUid(ctx, dashboard.OrgID, dashboard.UID)
|
||||
if err != nil {
|
||||
return ErrInternalServerError.Errorf("Delete: failed to delete a public dashboard by orgId: %d and Uid: %s %w", orgId, uid, err)
|
||||
return ErrInternalServerError.Errorf("DeleteByDashboard: error finding a public dashboard by dashboard orgId: %d and Uid: %s %w", dashboard.OrgID, dashboard.UID, err)
|
||||
}
|
||||
if pubdash == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if affectedRows == 0 {
|
||||
return ErrPublicDashboardNotFound.Errorf("Delete: Public dashboard not found by orgId: %d and Uid: %s", orgId, uid)
|
||||
}
|
||||
|
||||
return nil
|
||||
return pd.serviceWrapper.Delete(ctx, pubdash.Uid)
|
||||
}
|
||||
|
||||
// intervalMS and maxQueryData values are being calculated on the frontend for regular dashboards
|
||||
|
||||
@@ -498,13 +498,13 @@ func TestDeletePublicDashboard(t *testing.T) {
|
||||
{
|
||||
Name: "Public dashboard not found",
|
||||
AffectedRowsResp: 0,
|
||||
ExpectedErrResp: ErrPublicDashboardNotFound.Errorf("Delete: Public dashboard not found by orgId: 13 and Uid: uid"),
|
||||
ExpectedErrResp: nil,
|
||||
StoreRespErr: nil,
|
||||
},
|
||||
{
|
||||
Name: "Database error",
|
||||
AffectedRowsResp: 0,
|
||||
ExpectedErrResp: ErrInternalServerError.Errorf("Delete: failed to delete a public dashboard by orgId: 13 and Uid: uid db error!"),
|
||||
ExpectedErrResp: ErrInternalServerError.Errorf("Delete: failed to delete a public dashboard by Uid: uid db error!"),
|
||||
StoreRespErr: errors.New("db error!"),
|
||||
},
|
||||
}
|
||||
@@ -512,14 +512,18 @@ func TestDeletePublicDashboard(t *testing.T) {
|
||||
for _, tt := range testCases {
|
||||
t.Run(tt.Name, func(t *testing.T) {
|
||||
store := NewFakePublicDashboardStore(t)
|
||||
store.On("Delete", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tt.AffectedRowsResp, tt.StoreRespErr)
|
||||
|
||||
service := &PublicDashboardServiceImpl{
|
||||
store.On("Delete", mock.Anything, mock.Anything).Return(tt.AffectedRowsResp, tt.StoreRespErr)
|
||||
serviceWrapper := &PublicDashboardServiceWrapperImpl{
|
||||
log: log.New("test.logger"),
|
||||
store: store,
|
||||
}
|
||||
service := &PublicDashboardServiceImpl{
|
||||
log: log.New("test.logger"),
|
||||
store: store,
|
||||
serviceWrapper: serviceWrapper,
|
||||
}
|
||||
|
||||
err := service.Delete(context.Background(), 13, "uid")
|
||||
err := service.Delete(context.Background(), "uid")
|
||||
if tt.ExpectedErrResp != nil {
|
||||
assert.Equal(t, tt.ExpectedErrResp.Error(), err.Error())
|
||||
assert.Equal(t, tt.ExpectedErrResp.Error(), err.Error())
|
||||
@@ -966,6 +970,56 @@ func TestPublicDashboardServiceImpl_NewPublicDashboardAccessToken(t *testing.T)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteByDashboard(t *testing.T) {
|
||||
t.Run("will return nil when pubdash not found", func(t *testing.T) {
|
||||
store := NewFakePublicDashboardStore(t)
|
||||
pd := &PublicDashboardServiceImpl{store: store, serviceWrapper: ProvideServiceWrapper(store)}
|
||||
dashboard := &dashboards.Dashboard{UID: "1", OrgID: 1, IsFolder: false}
|
||||
store.On("FindByDashboardUid", mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)
|
||||
|
||||
err := pd.DeleteByDashboard(context.Background(), dashboard)
|
||||
assert.Nil(t, err)
|
||||
})
|
||||
t.Run("will delete pubdash when dashboard deleted", func(t *testing.T) {
|
||||
store := NewFakePublicDashboardStore(t)
|
||||
pd := &PublicDashboardServiceImpl{store: store, serviceWrapper: ProvideServiceWrapper(store)}
|
||||
dashboard := &dashboards.Dashboard{UID: "1", OrgID: 1, IsFolder: false}
|
||||
pubdash := &PublicDashboard{Uid: "2", OrgId: 1, DashboardUid: dashboard.UID}
|
||||
store.On("FindByDashboardUid", mock.Anything, mock.Anything, mock.Anything).Return(pubdash, nil)
|
||||
store.On("Delete", mock.Anything, mock.Anything, mock.Anything).Return(int64(1), nil)
|
||||
|
||||
err := pd.DeleteByDashboard(context.Background(), dashboard)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("will delete pubdashes when dashboard folder deleted", func(t *testing.T) {
|
||||
store := NewFakePublicDashboardStore(t)
|
||||
pd := &PublicDashboardServiceImpl{store: store, serviceWrapper: ProvideServiceWrapper(store)}
|
||||
dashboard := &dashboards.Dashboard{UID: "1", OrgID: 1, IsFolder: true}
|
||||
pubdash1 := &PublicDashboard{Uid: "2", OrgId: 1, DashboardUid: dashboard.UID}
|
||||
pubdash2 := &PublicDashboard{Uid: "3", OrgId: 1, DashboardUid: dashboard.UID}
|
||||
store.On("FindByDashboardFolder", mock.Anything, mock.Anything).Return([]*PublicDashboard{pubdash1, pubdash2}, nil)
|
||||
store.On("Delete", mock.Anything, mock.Anything, mock.Anything).Return(int64(1), nil)
|
||||
store.On("Delete", mock.Anything, mock.Anything, mock.Anything).Return(int64(1), nil)
|
||||
|
||||
err := pd.DeleteByDashboard(context.Background(), dashboard)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestGenerateAccessToken(t *testing.T) {
|
||||
accessToken, err := GenerateAccessToken()
|
||||
|
||||
t.Run("length", func(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 32, len(accessToken))
|
||||
})
|
||||
|
||||
t.Run("no - ", func(t *testing.T) {
|
||||
assert.False(t, strings.Contains("-", accessToken))
|
||||
})
|
||||
}
|
||||
|
||||
func CreateDatasource(dsType string, uid string) struct {
|
||||
Type *string `json:"type,omitempty"`
|
||||
Uid *string `json:"uid,omitempty"`
|
||||
@@ -1070,16 +1124,3 @@ func insertTestDashboard(t *testing.T, dashboardStore dashboards.Store, title st
|
||||
dash.Data.Set("uid", dash.UID)
|
||||
return dash
|
||||
}
|
||||
|
||||
func TestGenerateAccessToken(t *testing.T) {
|
||||
accessToken, err := GenerateAccessToken()
|
||||
|
||||
t.Run("length", func(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 32, len(accessToken))
|
||||
})
|
||||
|
||||
t.Run("no - ", func(t *testing.T) {
|
||||
assert.False(t, strings.Contains("-", accessToken))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -43,3 +43,12 @@ func (pd *PublicDashboardServiceWrapperImpl) FindByDashboardUid(ctx context.Cont
|
||||
|
||||
return pubdash, nil
|
||||
}
|
||||
|
||||
func (pd *PublicDashboardServiceWrapperImpl) Delete(ctx context.Context, uid string) error {
|
||||
_, err := pd.store.Delete(ctx, uid)
|
||||
if err != nil {
|
||||
return ErrInternalServerError.Errorf("Delete: failed to delete a public dashboard by Uid: %s %w", uid, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user