Migrate SchemeStore to sync by default (#11522)

* Migrate SchemeStore to sync by default

* Fixing tests compilation

* Fixing shadow variable

* Fixing tests
This commit is contained in:
Jesús Espino
2019-07-06 09:07:54 +02:00
committed by GitHub
parent 7da08e7a0f
commit 96c33948da
16 changed files with 464 additions and 417 deletions

View File

@@ -290,38 +290,26 @@ type LayeredSchemeStore struct {
*LayeredStore
}
func (s *LayeredSchemeStore) Save(scheme *model.Scheme) StoreChannel {
return s.RunQuery(func(supplier LayeredStoreSupplier) *LayeredStoreSupplierResult {
return supplier.SchemeSave(s.TmpContext, scheme)
})
func (s *LayeredSchemeStore) Save(scheme *model.Scheme) (*model.Scheme, *model.AppError) {
return s.LayerChainHead.SchemeSave(s.TmpContext, scheme)
}
func (s *LayeredSchemeStore) Get(schemeId string) StoreChannel {
return s.RunQuery(func(supplier LayeredStoreSupplier) *LayeredStoreSupplierResult {
return supplier.SchemeGet(s.TmpContext, schemeId)
})
func (s *LayeredSchemeStore) Get(schemeId string) (*model.Scheme, *model.AppError) {
return s.LayerChainHead.SchemeGet(s.TmpContext, schemeId)
}
func (s *LayeredSchemeStore) GetByName(schemeName string) StoreChannel {
return s.RunQuery(func(supplier LayeredStoreSupplier) *LayeredStoreSupplierResult {
return supplier.SchemeGetByName(s.TmpContext, schemeName)
})
func (s *LayeredSchemeStore) GetByName(schemeName string) (*model.Scheme, *model.AppError) {
return s.LayerChainHead.SchemeGetByName(s.TmpContext, schemeName)
}
func (s *LayeredSchemeStore) Delete(schemeId string) StoreChannel {
return s.RunQuery(func(supplier LayeredStoreSupplier) *LayeredStoreSupplierResult {
return supplier.SchemeDelete(s.TmpContext, schemeId)
})
func (s *LayeredSchemeStore) Delete(schemeId string) (*model.Scheme, *model.AppError) {
return s.LayerChainHead.SchemeDelete(s.TmpContext, schemeId)
}
func (s *LayeredSchemeStore) GetAllPage(scope string, offset int, limit int) StoreChannel {
return s.RunQuery(func(supplier LayeredStoreSupplier) *LayeredStoreSupplierResult {
return supplier.SchemeGetAllPage(s.TmpContext, scope, offset, limit)
})
func (s *LayeredSchemeStore) GetAllPage(scope string, offset int, limit int) ([]*model.Scheme, *model.AppError) {
return s.LayerChainHead.SchemeGetAllPage(s.TmpContext, scope, offset, limit)
}
func (s *LayeredSchemeStore) PermanentDeleteAll() StoreChannel {
return s.RunQuery(func(supplier LayeredStoreSupplier) *LayeredStoreSupplierResult {
return supplier.SchemePermanentDeleteAll(s.TmpContext)
})
func (s *LayeredSchemeStore) PermanentDeleteAll() *model.AppError {
return s.LayerChainHead.SchemePermanentDeleteAll(s.TmpContext)
}

View File

@@ -41,10 +41,10 @@ type LayeredStoreSupplier interface {
RolePermanentDeleteAll(ctx context.Context, hints ...LayeredStoreHint) *model.AppError
// Schemes
SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...LayeredStoreHint) *LayeredStoreSupplierResult
SchemeGet(ctx context.Context, schemeId string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult
SchemeGetByName(ctx context.Context, schemeName string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult
SchemeDelete(ctx context.Context, schemeId string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult
SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...LayeredStoreHint) *LayeredStoreSupplierResult
SchemePermanentDeleteAll(ctx context.Context, hints ...LayeredStoreHint) *LayeredStoreSupplierResult
SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError)
SchemeGet(ctx context.Context, schemeId string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError)
SchemeGetByName(ctx context.Context, schemeName string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError)
SchemeDelete(ctx context.Context, schemeId string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError)
SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...LayeredStoreHint) ([]*model.Scheme, *model.AppError)
SchemePermanentDeleteAll(ctx context.Context, hints ...LayeredStoreHint) *model.AppError
}

View File

@@ -17,41 +17,46 @@ func (s *LocalCacheSupplier) handleClusterInvalidateScheme(msg *model.ClusterMes
}
}
func (s *LocalCacheSupplier) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *LocalCacheSupplier) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError) {
if len(scheme.Id) != 0 {
defer s.doInvalidateCacheCluster(s.schemeCache, scheme.Id)
}
return s.Next().SchemeSave(ctx, scheme, hints...)
}
func (s *LocalCacheSupplier) SchemeGet(ctx context.Context, schemeId string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *LocalCacheSupplier) SchemeGet(ctx context.Context, schemeId string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError) {
if result := s.doStandardReadCache(ctx, s.schemeCache, schemeId, hints...); result != nil {
return result
return result.Data.(*model.Scheme), nil
}
result := s.Next().SchemeGet(ctx, schemeId, hints...)
scheme, err := s.Next().SchemeGet(ctx, schemeId, hints...)
if err != nil {
return nil, err
}
result := NewSupplierResult()
result.Data = scheme
s.doStandardAddToCache(ctx, s.schemeCache, schemeId, result, hints...)
return result
return scheme, nil
}
func (s *LocalCacheSupplier) SchemeGetByName(ctx context.Context, schemeName string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *LocalCacheSupplier) SchemeGetByName(ctx context.Context, schemeName string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError) {
return s.Next().SchemeGetByName(ctx, schemeName, hints...)
}
func (s *LocalCacheSupplier) SchemeDelete(ctx context.Context, schemeId string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *LocalCacheSupplier) SchemeDelete(ctx context.Context, schemeId string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError) {
defer s.doInvalidateCacheCluster(s.schemeCache, schemeId)
defer s.doClearCacheCluster(s.roleCache)
return s.Next().SchemeDelete(ctx, schemeId, hints...)
}
func (s *LocalCacheSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *LocalCacheSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...LayeredStoreHint) ([]*model.Scheme, *model.AppError) {
return s.Next().SchemeGetAllPage(ctx, scope, offset, limit, hints...)
}
func (s *LocalCacheSupplier) SchemePermanentDeleteAll(ctx context.Context, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *LocalCacheSupplier) SchemePermanentDeleteAll(ctx context.Context, hints ...LayeredStoreHint) *model.AppError {
defer s.doClearCacheCluster(s.schemeCache)
defer s.doClearCacheCluster(s.roleCache)

View File

@@ -9,32 +9,32 @@ import (
"github.com/mattermost/mattermost-server/model"
)
func (s *RedisSupplier) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *RedisSupplier) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError) {
// TODO: Redis caching.
return s.Next().SchemeSave(ctx, scheme, hints...)
}
func (s *RedisSupplier) SchemeGet(ctx context.Context, schemeId string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *RedisSupplier) SchemeGet(ctx context.Context, schemeId string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError) {
// TODO: Redis caching.
return s.Next().SchemeGet(ctx, schemeId, hints...)
}
func (s *RedisSupplier) SchemeGetByName(ctx context.Context, schemeName string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *RedisSupplier) SchemeGetByName(ctx context.Context, schemeName string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError) {
// TODO: Redis caching.
return s.Next().SchemeGetByName(ctx, schemeName, hints...)
}
func (s *RedisSupplier) SchemeDelete(ctx context.Context, schemeId string, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *RedisSupplier) SchemeDelete(ctx context.Context, schemeId string, hints ...LayeredStoreHint) (*model.Scheme, *model.AppError) {
// TODO: Redis caching.
return s.Next().SchemeDelete(ctx, schemeId, hints...)
}
func (s *RedisSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *RedisSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...LayeredStoreHint) ([]*model.Scheme, *model.AppError) {
// TODO: Redis caching.
return s.Next().SchemeGetAllPage(ctx, scope, offset, limit, hints...)
}
func (s *RedisSupplier) SchemePermanentDeleteAll(ctx context.Context, hints ...LayeredStoreHint) *LayeredStoreSupplierResult {
func (s *RedisSupplier) SchemePermanentDeleteAll(ctx context.Context, hints ...LayeredStoreHint) *model.AppError {
// TODO: Redis caching.
return s.Next().SchemePermanentDeleteAll(ctx, hints...)
}

View File

@@ -33,52 +33,48 @@ func initSqlSupplierSchemes(sqlStore SqlStore) {
}
}
func (s *SqlSupplier) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
result := store.NewSupplierResult()
func (s *SqlSupplier) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
if len(scheme.Id) == 0 {
if transaction, err := s.GetMaster().Begin(); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.SaveScheme", "store.sql_scheme.save.open_transaction.app_error", nil, err.Error(), http.StatusInternalServerError)
} else {
defer finalizeTransaction(transaction)
result = s.createScheme(ctx, scheme, transaction, hints...)
if result.Err == nil {
if err := transaction.Commit(); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.SchemeSave", "store.sql_scheme.save_scheme.commit_transaction.app_error", nil, err.Error(), http.StatusInternalServerError)
}
}
transaction, err := s.GetMaster().Begin()
if err != nil {
return nil, model.NewAppError("SqlSchemeStore.SaveScheme", "store.sql_scheme.save.open_transaction.app_error", nil, err.Error(), http.StatusInternalServerError)
}
} else {
if !scheme.IsValid() {
result.Err = model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.invalid_scheme.app_error", nil, "schemeId="+scheme.Id, http.StatusBadRequest)
return result
defer finalizeTransaction(transaction)
newScheme, appErr := s.createScheme(ctx, scheme, transaction, hints...)
if appErr != nil {
return nil, appErr
}
scheme.UpdateAt = model.GetMillis()
if rowsChanged, err := s.GetMaster().Update(scheme); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.update.app_error", nil, err.Error(), http.StatusInternalServerError)
} else if rowsChanged != 1 {
result.Err = model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.update.app_error", nil, "no record to update", http.StatusInternalServerError)
if err := transaction.Commit(); err != nil {
return nil, model.NewAppError("SqlSchemeStore.SchemeSave", "store.sql_scheme.save_scheme.commit_transaction.app_error", nil, err.Error(), http.StatusInternalServerError)
}
result.Data = scheme
return newScheme, nil
}
return result
if !scheme.IsValid() {
return nil, model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.invalid_scheme.app_error", nil, "schemeId="+scheme.Id, http.StatusBadRequest)
}
scheme.UpdateAt = model.GetMillis()
rowsChanged, err := s.GetMaster().Update(scheme)
if err != nil {
return nil, model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.update.app_error", nil, err.Error(), http.StatusInternalServerError)
}
if rowsChanged != 1 {
return nil, model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.update.app_error", nil, "no record to update", http.StatusInternalServerError)
}
return scheme, nil
}
func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, transaction *gorp.Transaction, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
result := store.NewSupplierResult()
func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, transaction *gorp.Transaction, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
// Fetch the default system scheme roles to populate default permissions.
defaultRoleNames := []string{model.TEAM_ADMIN_ROLE_ID, model.TEAM_USER_ROLE_ID, model.TEAM_GUEST_ROLE_ID, model.CHANNEL_ADMIN_ROLE_ID, model.CHANNEL_USER_ROLE_ID, model.CHANNEL_GUEST_ROLE_ID}
defaultRoles := make(map[string]*model.Role)
roles, err := s.RoleGetByNames(ctx, defaultRoleNames)
if err != nil {
result.Err = err
return result
return nil, err
}
for _, role := range roles {
@@ -99,8 +95,7 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
}
if len(defaultRoles) != 6 {
result.Err = model.NewAppError("SqlSchemeStore.SaveScheme", "store.sql_scheme.save.retrieve_default_scheme_roles.app_error", nil, "", http.StatusInternalServerError)
return result
return nil, model.NewAppError("SqlSchemeStore.SaveScheme", "store.sql_scheme.save.retrieve_default_scheme_roles.app_error", nil, "", http.StatusInternalServerError)
}
// Create the appropriate default roles for the scheme.
@@ -113,12 +108,11 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
SchemeManaged: true,
}
if savedRole, err := s.createRole(ctx, teamAdminRole, transaction); err != nil {
result.Err = err
return result
} else {
scheme.DefaultTeamAdminRole = savedRole.Name
savedRole, err := s.createRole(ctx, teamAdminRole, transaction)
if err != nil {
return nil, err
}
scheme.DefaultTeamAdminRole = savedRole.Name
// Team User Role
teamUserRole := &model.Role{
@@ -128,12 +122,11 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
SchemeManaged: true,
}
if savedRole, err := s.createRole(ctx, teamUserRole, transaction); err != nil {
result.Err = err
return result
} else {
scheme.DefaultTeamUserRole = savedRole.Name
savedRole, err = s.createRole(ctx, teamUserRole, transaction)
if err != nil {
return nil, err
}
scheme.DefaultTeamUserRole = savedRole.Name
// Team Guest Role
teamGuestRole := &model.Role{
@@ -143,12 +136,11 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
SchemeManaged: true,
}
if savedRole, err := s.createRole(ctx, teamGuestRole, transaction); err != nil {
result.Err = err
return result
} else {
scheme.DefaultTeamGuestRole = savedRole.Name
savedRole, err = s.createRole(ctx, teamGuestRole, transaction)
if err != nil {
return nil, err
}
scheme.DefaultTeamGuestRole = savedRole.Name
}
if scheme.Scope == model.SCHEME_SCOPE_TEAM || scheme.Scope == model.SCHEME_SCOPE_CHANNEL {
// Channel Admin Role
@@ -159,12 +151,11 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
SchemeManaged: true,
}
if savedRole, err := s.createRole(ctx, channelAdminRole, transaction); err != nil {
result.Err = err
return result
} else {
scheme.DefaultChannelAdminRole = savedRole.Name
savedRole, err := s.createRole(ctx, channelAdminRole, transaction)
if err != nil {
return nil, err
}
scheme.DefaultChannelAdminRole = savedRole.Name
// Channel User Role
channelUserRole := &model.Role{
@@ -174,12 +165,11 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
SchemeManaged: true,
}
if savedRole, err := s.createRole(ctx, channelUserRole, transaction); err != nil {
result.Err = err
return result
} else {
scheme.DefaultChannelUserRole = savedRole.Name
savedRole, err = s.createRole(ctx, channelUserRole, transaction)
if err != nil {
return nil, err
}
scheme.DefaultChannelUserRole = savedRole.Name
// Channel Guest Role
channelGuestRole := &model.Role{
@@ -189,12 +179,11 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
SchemeManaged: true,
}
if savedRole, err := s.createRole(ctx, channelGuestRole, transaction); err != nil {
result.Err = err
return result
} else {
scheme.DefaultChannelGuestRole = savedRole.Name
savedRole, err = s.createRole(ctx, channelGuestRole, transaction)
if err != nil {
return nil, err
}
scheme.DefaultChannelGuestRole = savedRole.Name
}
scheme.Id = model.NewId()
@@ -206,80 +195,59 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
// Validate the scheme
if !scheme.IsValidForCreate() {
result.Err = model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.invalid_scheme.app_error", nil, "", http.StatusBadRequest)
return result
return nil, model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.invalid_scheme.app_error", nil, "", http.StatusBadRequest)
}
if err := transaction.Insert(scheme); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.insert.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, model.NewAppError("SqlSchemeStore.Save", "store.sql_scheme.save.insert.app_error", nil, err.Error(), http.StatusInternalServerError)
}
result.Data = scheme
return result
return scheme, nil
}
func (s *SqlSupplier) SchemeGet(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
result := store.NewSupplierResult()
func (s *SqlSupplier) SchemeGet(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
var scheme model.Scheme
if err := s.GetReplica().SelectOne(&scheme, "SELECT * from Schemes WHERE Id = :Id", map[string]interface{}{"Id": schemeId}); err != nil {
if err == sql.ErrNoRows {
result.Err = model.NewAppError("SqlSchemeStore.Get", "store.sql_scheme.get.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusNotFound)
} else {
result.Err = model.NewAppError("SqlSchemeStore.Get", "store.sql_scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, model.NewAppError("SqlSchemeStore.Get", "store.sql_scheme.get.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusNotFound)
}
return nil, model.NewAppError("SqlSchemeStore.Get", "store.sql_scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError)
}
result.Data = &scheme
return result
return &scheme, nil
}
func (s *SqlSupplier) SchemeGetByName(ctx context.Context, schemeName string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
result := store.NewSupplierResult()
func (s *SqlSupplier) SchemeGetByName(ctx context.Context, schemeName string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
var scheme model.Scheme
if err := s.GetReplica().SelectOne(&scheme, "SELECT * from Schemes WHERE Name = :Name", map[string]interface{}{"Name": schemeName}); err != nil {
if err == sql.ErrNoRows {
result.Err = model.NewAppError("SqlSchemeStore.GetByName", "store.sql_scheme.get.app_error", nil, "Name="+schemeName+", "+err.Error(), http.StatusNotFound)
} else {
result.Err = model.NewAppError("SqlSchemeStore.GetByName", "store.sql_scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, model.NewAppError("SqlSchemeStore.GetByName", "store.sql_scheme.get.app_error", nil, "Name="+schemeName+", "+err.Error(), http.StatusNotFound)
}
return nil, model.NewAppError("SqlSchemeStore.GetByName", "store.sql_scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError)
}
result.Data = &scheme
return result
return &scheme, nil
}
func (s *SqlSupplier) SchemeDelete(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
result := store.NewSupplierResult()
func (s *SqlSupplier) SchemeDelete(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
// Get the scheme
var scheme model.Scheme
if err := s.GetReplica().SelectOne(&scheme, "SELECT * from Schemes WHERE Id = :Id", map[string]interface{}{"Id": schemeId}); err != nil {
if err == sql.ErrNoRows {
result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.get.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusNotFound)
} else {
result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.get.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
return nil, model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.get.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusNotFound)
}
return result
return nil, model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.get.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
}
// Update any teams or channels using this scheme to the default scheme.
if scheme.Scope == model.SCHEME_SCOPE_TEAM {
if _, err := s.GetMaster().Exec("UPDATE Teams SET SchemeId = '' WHERE SchemeId = :SchemeId", map[string]interface{}{"SchemeId": schemeId}); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.reset_teams.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
return result
return nil, model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.reset_teams.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
}
} else if scheme.Scope == model.SCHEME_SCOPE_CHANNEL {
if _, err := s.GetMaster().Exec("UPDATE Channels SET SchemeId = '' WHERE SchemeId = :SchemeId", map[string]interface{}{"SchemeId": schemeId}); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.reset_channels.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
return result
return nil, model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.reset_channels.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
}
// Blow away the channel caches.
@@ -305,28 +273,24 @@ func (s *SqlSupplier) SchemeDelete(ctx context.Context, schemeId string, hints .
queryArgs["DeleteAt"] = time
if _, err := s.GetMaster().Exec("UPDATE Roles SET UpdateAt = :UpdateAt, DeleteAt = :DeleteAt WHERE Name IN ("+inQuery+")", queryArgs); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.delete.role_update.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
return result
return nil, model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.delete.role_update.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
}
// Delete the scheme itself.
scheme.UpdateAt = time
scheme.DeleteAt = time
if rowsChanged, err := s.GetMaster().Update(&scheme); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.delete.update.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
} else if rowsChanged != 1 {
result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.delete.update.app_error", nil, "no record to update", http.StatusInternalServerError)
} else {
result.Data = &scheme
rowsChanged, err := s.GetMaster().Update(&scheme)
if err != nil {
return nil, model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.delete.update.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
}
return result
if rowsChanged != 1 {
return nil, model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.delete.update.app_error", nil, "no record to update", http.StatusInternalServerError)
}
return &scheme, nil
}
func (s *SqlSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
result := store.NewSupplierResult()
func (s *SqlSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...store.LayeredStoreHint) ([]*model.Scheme, *model.AppError) {
var schemes []*model.Scheme
scopeClause := ""
@@ -335,20 +299,16 @@ func (s *SqlSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset
}
if _, err := s.GetReplica().Select(&schemes, "SELECT * from Schemes WHERE DeleteAt = 0 "+scopeClause+" ORDER BY CreateAt DESC LIMIT :Limit OFFSET :Offset", map[string]interface{}{"Limit": limit, "Offset": offset, "Scope": scope}); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.Get", "store.sql_scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, model.NewAppError("SqlSchemeStore.Get", "store.sql_scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError)
}
result.Data = schemes
return result
return schemes, nil
}
func (s *SqlSupplier) SchemePermanentDeleteAll(ctx context.Context, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
result := store.NewSupplierResult()
func (s *SqlSupplier) SchemePermanentDeleteAll(ctx context.Context, hints ...store.LayeredStoreHint) *model.AppError {
if _, err := s.GetMaster().Exec("DELETE from Schemes"); err != nil {
result.Err = model.NewAppError("SqlSchemeStore.PermanentDeleteAll", "store.sql_scheme.permanent_delete_all.app_error", nil, err.Error(), http.StatusInternalServerError)
return model.NewAppError("SqlSchemeStore.PermanentDeleteAll", "store.sql_scheme.permanent_delete_all.app_error", nil, err.Error(), http.StatusInternalServerError)
}
return result
return nil
}

View File

@@ -555,12 +555,12 @@ type RoleStore interface {
}
type SchemeStore interface {
Save(scheme *model.Scheme) StoreChannel
Get(schemeId string) StoreChannel
GetByName(schemeName string) StoreChannel
GetAllPage(scope string, offset int, limit int) StoreChannel
Delete(schemeId string) StoreChannel
PermanentDeleteAll() StoreChannel
Save(scheme *model.Scheme) (*model.Scheme, *model.AppError)
Get(schemeId string) (*model.Scheme, *model.AppError)
GetByName(schemeName string) (*model.Scheme, *model.AppError)
GetAllPage(scope string, offset int, limit int) ([]*model.Scheme, *model.AppError)
Delete(schemeId string) (*model.Scheme, *model.AppError)
PermanentDeleteAll() *model.AppError
}
type TermsOfServiceStore interface {

View File

@@ -3039,10 +3039,12 @@ func testChannelStoreGetChannelsByScheme(t *testing.T, ss store.Store) {
Scope: model.SCHEME_SCOPE_CHANNEL,
}
result := <-ss.Scheme().Save(s1)
s1 = result.Data.(*model.Scheme)
s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme)
s1, err := ss.Scheme().Save(s1)
require.Nil(t, err)
s1, err = ss.Scheme().Save(s1)
require.Nil(t, err)
s2, err = ss.Scheme().Save(s2)
require.Nil(t, err)
// Create and save some teams.
c1 := &model.Channel{
@@ -3167,7 +3169,8 @@ func testResetAllChannelSchemes(t *testing.T, ss store.Store) {
Description: model.NewId(),
Scope: model.SCHEME_SCOPE_CHANNEL,
}
s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
s1, err := ss.Scheme().Save(s1)
require.Nil(t, err)
c1 := &model.Channel{
TeamId: model.NewId(),
@@ -3191,7 +3194,7 @@ func testResetAllChannelSchemes(t *testing.T, ss store.Store) {
assert.Equal(t, s1.Id, *c1.SchemeId)
assert.Equal(t, s1.Id, *c2.SchemeId)
err := ss.Channel().ResetAllChannelSchemes()
err = ss.Channel().ResetAllChannelSchemes()
assert.Nil(t, err)
c1, _ = ss.Channel().Get(c1.Id, true)

View File

@@ -783,7 +783,7 @@ func (_m *LayeredStoreDatabaseLayer) Scheme() store.SchemeStore {
}
// SchemeDelete provides a mock function with given fields: ctx, schemeId, hints
func (_m *LayeredStoreDatabaseLayer) SchemeDelete(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreDatabaseLayer) SchemeDelete(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -793,20 +793,29 @@ func (_m *LayeredStoreDatabaseLayer) SchemeDelete(ctx context.Context, schemeId
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *model.Scheme); ok {
r0 = rf(ctx, schemeId, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, string, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, schemeId, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SchemeGet provides a mock function with given fields: ctx, schemeId, hints
func (_m *LayeredStoreDatabaseLayer) SchemeGet(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreDatabaseLayer) SchemeGet(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -816,20 +825,29 @@ func (_m *LayeredStoreDatabaseLayer) SchemeGet(ctx context.Context, schemeId str
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *model.Scheme); ok {
r0 = rf(ctx, schemeId, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, string, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, schemeId, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SchemeGetAllPage provides a mock function with given fields: ctx, scope, offset, limit, hints
func (_m *LayeredStoreDatabaseLayer) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreDatabaseLayer) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...store.LayeredStoreHint) ([]*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -839,20 +857,29 @@ func (_m *LayeredStoreDatabaseLayer) SchemeGetAllPage(ctx context.Context, scope
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, string, int, int, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 []*model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, string, int, int, ...store.LayeredStoreHint) []*model.Scheme); ok {
r0 = rf(ctx, scope, offset, limit, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).([]*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, string, int, int, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, scope, offset, limit, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SchemeGetByName provides a mock function with given fields: ctx, schemeName, hints
func (_m *LayeredStoreDatabaseLayer) SchemeGetByName(ctx context.Context, schemeName string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreDatabaseLayer) SchemeGetByName(ctx context.Context, schemeName string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -862,20 +889,29 @@ func (_m *LayeredStoreDatabaseLayer) SchemeGetByName(ctx context.Context, scheme
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *model.Scheme); ok {
r0 = rf(ctx, schemeName, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, string, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, schemeName, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SchemePermanentDeleteAll provides a mock function with given fields: ctx, hints
func (_m *LayeredStoreDatabaseLayer) SchemePermanentDeleteAll(ctx context.Context, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreDatabaseLayer) SchemePermanentDeleteAll(ctx context.Context, hints ...store.LayeredStoreHint) *model.AppError {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -885,12 +921,12 @@ func (_m *LayeredStoreDatabaseLayer) SchemePermanentDeleteAll(ctx context.Contex
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.AppError
if rf, ok := ret.Get(0).(func(context.Context, ...store.LayeredStoreHint) *model.AppError); ok {
r0 = rf(ctx, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.AppError)
}
}
@@ -898,7 +934,7 @@ func (_m *LayeredStoreDatabaseLayer) SchemePermanentDeleteAll(ctx context.Contex
}
// SchemeSave provides a mock function with given fields: ctx, scheme, hints
func (_m *LayeredStoreDatabaseLayer) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreDatabaseLayer) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -908,16 +944,25 @@ func (_m *LayeredStoreDatabaseLayer) SchemeSave(ctx context.Context, scheme *mod
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, *model.Scheme, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, *model.Scheme, ...store.LayeredStoreHint) *model.Scheme); ok {
r0 = rf(ctx, scheme, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, *model.Scheme, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, scheme, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// Session provides a mock function with given fields:

View File

@@ -427,7 +427,7 @@ func (_m *LayeredStoreSupplier) RoleSave(ctx context.Context, role *model.Role,
}
// SchemeDelete provides a mock function with given fields: ctx, schemeId, hints
func (_m *LayeredStoreSupplier) SchemeDelete(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreSupplier) SchemeDelete(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -437,20 +437,29 @@ func (_m *LayeredStoreSupplier) SchemeDelete(ctx context.Context, schemeId strin
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *model.Scheme); ok {
r0 = rf(ctx, schemeId, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, string, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, schemeId, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SchemeGet provides a mock function with given fields: ctx, schemeId, hints
func (_m *LayeredStoreSupplier) SchemeGet(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreSupplier) SchemeGet(ctx context.Context, schemeId string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -460,20 +469,29 @@ func (_m *LayeredStoreSupplier) SchemeGet(ctx context.Context, schemeId string,
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *model.Scheme); ok {
r0 = rf(ctx, schemeId, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, string, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, schemeId, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SchemeGetAllPage provides a mock function with given fields: ctx, scope, offset, limit, hints
func (_m *LayeredStoreSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreSupplier) SchemeGetAllPage(ctx context.Context, scope string, offset int, limit int, hints ...store.LayeredStoreHint) ([]*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -483,20 +501,29 @@ func (_m *LayeredStoreSupplier) SchemeGetAllPage(ctx context.Context, scope stri
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, string, int, int, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 []*model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, string, int, int, ...store.LayeredStoreHint) []*model.Scheme); ok {
r0 = rf(ctx, scope, offset, limit, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).([]*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, string, int, int, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, scope, offset, limit, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SchemeGetByName provides a mock function with given fields: ctx, schemeName, hints
func (_m *LayeredStoreSupplier) SchemeGetByName(ctx context.Context, schemeName string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreSupplier) SchemeGetByName(ctx context.Context, schemeName string, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -506,20 +533,29 @@ func (_m *LayeredStoreSupplier) SchemeGetByName(ctx context.Context, schemeName
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *model.Scheme); ok {
r0 = rf(ctx, schemeName, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, string, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, schemeName, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SchemePermanentDeleteAll provides a mock function with given fields: ctx, hints
func (_m *LayeredStoreSupplier) SchemePermanentDeleteAll(ctx context.Context, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreSupplier) SchemePermanentDeleteAll(ctx context.Context, hints ...store.LayeredStoreHint) *model.AppError {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -529,12 +565,12 @@ func (_m *LayeredStoreSupplier) SchemePermanentDeleteAll(ctx context.Context, hi
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.AppError
if rf, ok := ret.Get(0).(func(context.Context, ...store.LayeredStoreHint) *model.AppError); ok {
r0 = rf(ctx, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.AppError)
}
}
@@ -542,7 +578,7 @@ func (_m *LayeredStoreSupplier) SchemePermanentDeleteAll(ctx context.Context, hi
}
// SchemeSave provides a mock function with given fields: ctx, scheme, hints
func (_m *LayeredStoreSupplier) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
func (_m *LayeredStoreSupplier) SchemeSave(ctx context.Context, scheme *model.Scheme, hints ...store.LayeredStoreHint) (*model.Scheme, *model.AppError) {
_va := make([]interface{}, len(hints))
for _i := range hints {
_va[_i] = hints[_i]
@@ -552,16 +588,25 @@ func (_m *LayeredStoreSupplier) SchemeSave(ctx context.Context, scheme *model.Sc
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *store.LayeredStoreSupplierResult
if rf, ok := ret.Get(0).(func(context.Context, *model.Scheme, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(context.Context, *model.Scheme, ...store.LayeredStoreHint) *model.Scheme); ok {
r0 = rf(ctx, scheme, hints...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(context.Context, *model.Scheme, ...store.LayeredStoreHint) *model.AppError); ok {
r1 = rf(ctx, scheme, hints...)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// SetChainNext provides a mock function with given fields: _a0

View File

@@ -6,7 +6,6 @@ package mocks
import mock "github.com/stretchr/testify/mock"
import model "github.com/mattermost/mattermost-server/model"
import store "github.com/mattermost/mattermost-server/store"
// SchemeStore is an autogenerated mock type for the SchemeStore type
type SchemeStore struct {
@@ -14,79 +13,115 @@ type SchemeStore struct {
}
// Delete provides a mock function with given fields: schemeId
func (_m *SchemeStore) Delete(schemeId string) store.StoreChannel {
func (_m *SchemeStore) Delete(schemeId string) (*model.Scheme, *model.AppError) {
ret := _m.Called(schemeId)
var r0 store.StoreChannel
if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(string) *model.Scheme); ok {
r0 = rf(schemeId)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(string) *model.AppError); ok {
r1 = rf(schemeId)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// Get provides a mock function with given fields: schemeId
func (_m *SchemeStore) Get(schemeId string) store.StoreChannel {
func (_m *SchemeStore) Get(schemeId string) (*model.Scheme, *model.AppError) {
ret := _m.Called(schemeId)
var r0 store.StoreChannel
if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(string) *model.Scheme); ok {
r0 = rf(schemeId)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(string) *model.AppError); ok {
r1 = rf(schemeId)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// GetAllPage provides a mock function with given fields: scope, offset, limit
func (_m *SchemeStore) GetAllPage(scope string, offset int, limit int) store.StoreChannel {
func (_m *SchemeStore) GetAllPage(scope string, offset int, limit int) ([]*model.Scheme, *model.AppError) {
ret := _m.Called(scope, offset, limit)
var r0 store.StoreChannel
if rf, ok := ret.Get(0).(func(string, int, int) store.StoreChannel); ok {
var r0 []*model.Scheme
if rf, ok := ret.Get(0).(func(string, int, int) []*model.Scheme); ok {
r0 = rf(scope, offset, limit)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel)
r0 = ret.Get(0).([]*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(string, int, int) *model.AppError); ok {
r1 = rf(scope, offset, limit)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// GetByName provides a mock function with given fields: schemeName
func (_m *SchemeStore) GetByName(schemeName string) store.StoreChannel {
func (_m *SchemeStore) GetByName(schemeName string) (*model.Scheme, *model.AppError) {
ret := _m.Called(schemeName)
var r0 store.StoreChannel
if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(string) *model.Scheme); ok {
r0 = rf(schemeName)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(string) *model.AppError); ok {
r1 = rf(schemeName)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// PermanentDeleteAll provides a mock function with given fields:
func (_m *SchemeStore) PermanentDeleteAll() store.StoreChannel {
func (_m *SchemeStore) PermanentDeleteAll() *model.AppError {
ret := _m.Called()
var r0 store.StoreChannel
if rf, ok := ret.Get(0).(func() store.StoreChannel); ok {
var r0 *model.AppError
if rf, ok := ret.Get(0).(func() *model.AppError); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel)
r0 = ret.Get(0).(*model.AppError)
}
}
@@ -94,17 +129,26 @@ func (_m *SchemeStore) PermanentDeleteAll() store.StoreChannel {
}
// Save provides a mock function with given fields: scheme
func (_m *SchemeStore) Save(scheme *model.Scheme) store.StoreChannel {
func (_m *SchemeStore) Save(scheme *model.Scheme) (*model.Scheme, *model.AppError) {
ret := _m.Called(scheme)
var r0 store.StoreChannel
if rf, ok := ret.Get(0).(func(*model.Scheme) store.StoreChannel); ok {
var r0 *model.Scheme
if rf, ok := ret.Get(0).(func(*model.Scheme) *model.Scheme); ok {
r0 = rf(scheme)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel)
r0 = ret.Get(0).(*model.Scheme)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(*model.Scheme) *model.AppError); ok {
r1 = rf(scheme)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}

View File

@@ -88,9 +88,8 @@ func testSchemeStoreSave(t *testing.T, ss store.Store) {
}
// Check all fields saved correctly.
res1 := <-ss.Scheme().Save(s1)
assert.Nil(t, res1.Err)
d1 := res1.Data.(*model.Scheme)
d1, err := ss.Scheme().Save(s1)
assert.Nil(t, err)
assert.Len(t, d1.Id, 26)
assert.Equal(t, s1.DisplayName, d1.DisplayName)
assert.Equal(t, s1.Name, d1.Name)
@@ -140,9 +139,8 @@ func testSchemeStoreSave(t *testing.T, ss store.Store) {
// Change the scheme description and update.
d1.Description = model.NewId()
res2 := <-ss.Scheme().Save(d1)
assert.Nil(t, res2.Err)
d2 := res2.Data.(*model.Scheme)
d2, err := ss.Scheme().Save(d1)
assert.Nil(t, err)
assert.Equal(t, d1.Id, d2.Id)
assert.Equal(t, s1.DisplayName, d2.DisplayName)
assert.Equal(t, s1.Name, d2.Name)
@@ -167,8 +165,8 @@ func testSchemeStoreSave(t *testing.T, ss store.Store) {
Scope: model.SCHEME_SCOPE_TEAM,
}
res3 := <-ss.Scheme().Save(s3)
assert.NotNil(t, res3.Err)
_, err = ss.Scheme().Save(s3)
assert.NotNil(t, err)
}
func testSchemeStoreGet(t *testing.T, ss store.Store) {
@@ -180,15 +178,13 @@ func testSchemeStoreGet(t *testing.T, ss store.Store) {
Scope: model.SCHEME_SCOPE_TEAM,
}
res1 := <-ss.Scheme().Save(s1)
assert.Nil(t, res1.Err)
d1 := res1.Data.(*model.Scheme)
d1, err := ss.Scheme().Save(s1)
assert.Nil(t, err)
assert.Len(t, d1.Id, 26)
// Get a valid scheme
res2 := <-ss.Scheme().Get(d1.Id)
assert.Nil(t, res2.Err)
d2 := res1.Data.(*model.Scheme)
d2, err := ss.Scheme().Get(d1.Id)
assert.Nil(t, err)
assert.Equal(t, d1.Id, d2.Id)
assert.Equal(t, s1.DisplayName, d2.DisplayName)
assert.Equal(t, s1.Name, d2.Name)
@@ -205,8 +201,8 @@ func testSchemeStoreGet(t *testing.T, ss store.Store) {
assert.Equal(t, d1.DefaultChannelGuestRole, d2.DefaultChannelGuestRole)
// Get an invalid scheme
res3 := <-ss.Scheme().Get(model.NewId())
assert.NotNil(t, res3.Err)
_, err = ss.Scheme().Get(model.NewId())
assert.NotNil(t, err)
}
func testSchemeStoreGetByName(t *testing.T, ss store.Store) {
@@ -218,15 +214,13 @@ func testSchemeStoreGetByName(t *testing.T, ss store.Store) {
Scope: model.SCHEME_SCOPE_TEAM,
}
res1 := <-ss.Scheme().Save(s1)
assert.Nil(t, res1.Err)
d1 := res1.Data.(*model.Scheme)
d1, err := ss.Scheme().Save(s1)
assert.Nil(t, err)
assert.Len(t, d1.Id, 26)
// Get a valid scheme
res2 := <-ss.Scheme().GetByName(d1.Name)
assert.Nil(t, res2.Err)
d2 := res1.Data.(*model.Scheme)
d2, err := ss.Scheme().GetByName(d1.Name)
assert.Nil(t, err)
assert.Equal(t, d1.Id, d2.Id)
assert.Equal(t, s1.DisplayName, d2.DisplayName)
assert.Equal(t, s1.Name, d2.Name)
@@ -243,8 +237,8 @@ func testSchemeStoreGetByName(t *testing.T, ss store.Store) {
assert.Equal(t, d1.DefaultChannelGuestRole, d2.DefaultChannelGuestRole)
// Get an invalid scheme
res3 := <-ss.Scheme().GetByName(model.NewId())
assert.NotNil(t, res3.Err)
_, err = ss.Scheme().GetByName(model.NewId())
assert.NotNil(t, err)
}
func testSchemeStoreGetAllPage(t *testing.T, ss store.Store) {
@@ -277,17 +271,16 @@ func testSchemeStoreGetAllPage(t *testing.T, ss store.Store) {
}
for _, scheme := range schemes {
store.Must(ss.Scheme().Save(scheme))
_, err := ss.Scheme().Save(scheme)
require.Nil(t, err)
}
r1 := <-ss.Scheme().GetAllPage("", 0, 2)
assert.Nil(t, r1.Err)
s1 := r1.Data.([]*model.Scheme)
s1, err := ss.Scheme().GetAllPage("", 0, 2)
assert.Nil(t, err)
assert.Len(t, s1, 2)
r2 := <-ss.Scheme().GetAllPage("", 2, 2)
assert.Nil(t, r2.Err)
s2 := r2.Data.([]*model.Scheme)
s2, err := ss.Scheme().GetAllPage("", 2, 2)
assert.Nil(t, err)
assert.Len(t, s2, 2)
assert.NotEqual(t, s1[0].DisplayName, s2[0].DisplayName)
assert.NotEqual(t, s1[0].DisplayName, s2[1].DisplayName)
@@ -298,17 +291,15 @@ func testSchemeStoreGetAllPage(t *testing.T, ss store.Store) {
assert.NotEqual(t, s1[1].Name, s2[0].Name)
assert.NotEqual(t, s1[1].Name, s2[1].Name)
r3 := <-ss.Scheme().GetAllPage("team", 0, 1000)
assert.Nil(t, r3.Err)
s3 := r3.Data.([]*model.Scheme)
s3, err := ss.Scheme().GetAllPage("team", 0, 1000)
assert.Nil(t, err)
assert.NotZero(t, len(s3))
for _, s := range s3 {
assert.Equal(t, "team", s.Scope)
}
r4 := <-ss.Scheme().GetAllPage("channel", 0, 1000)
assert.Nil(t, r4.Err)
s4 := r4.Data.([]*model.Scheme)
s4, err := ss.Scheme().GetAllPage("channel", 0, 1000)
assert.Nil(t, err)
assert.NotZero(t, len(s4))
for _, s := range s4 {
assert.Equal(t, "channel", s.Scope)
@@ -325,9 +316,8 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) {
}
// Check all fields saved correctly.
res1 := <-ss.Scheme().Save(s1)
assert.Nil(t, res1.Err)
d1 := res1.Data.(*model.Scheme)
d1, err := ss.Scheme().Save(s1)
assert.Nil(t, err)
assert.Len(t, d1.Id, 26)
assert.Equal(t, s1.DisplayName, d1.DisplayName)
assert.Equal(t, s1.Name, d1.Name)
@@ -375,11 +365,8 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) {
assert.True(t, role6.SchemeManaged)
// Delete the scheme.
res2 := <-ss.Scheme().Delete(d1.Id)
if !assert.Nil(t, res2.Err) {
t.Fatal(res2.Err)
}
d2 := res2.Data.(*model.Scheme)
d2, err := ss.Scheme().Delete(d1.Id)
require.Nil(t, err)
assert.NotZero(t, d2.DeleteAt)
// Check that the roles are deleted too.
@@ -408,8 +395,8 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) {
assert.NotZero(t, role12.DeleteAt)
// Try deleting a scheme that does not exist.
res3 := <-ss.Scheme().Delete(model.NewId())
assert.NotNil(t, res3.Err)
_, err = ss.Scheme().Delete(model.NewId())
assert.NotNil(t, err)
// Try deleting a team scheme that's in use.
s4 := &model.Scheme{
@@ -418,9 +405,8 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) {
Description: model.NewId(),
Scope: model.SCHEME_SCOPE_TEAM,
}
res4 := <-ss.Scheme().Save(s4)
assert.Nil(t, res4.Err)
d4 := res4.Data.(*model.Scheme)
d4, err := ss.Scheme().Save(s4)
assert.Nil(t, err)
t4 := &model.Team{
Name: model.NewId(),
@@ -432,8 +418,8 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) {
t4, err = ss.Team().Save(t4)
require.Nil(t, err)
sres4 := <-ss.Scheme().Delete(d4.Id)
assert.Nil(t, sres4.Err)
_, err = ss.Scheme().Delete(d4.Id)
assert.Nil(t, err)
t5, err := ss.Team().Get(t4.Id)
require.Nil(t, err)
@@ -446,9 +432,8 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) {
Description: model.NewId(),
Scope: model.SCHEME_SCOPE_CHANNEL,
}
res5 := <-ss.Scheme().Save(s5)
assert.Nil(t, res5.Err)
d5 := res5.Data.(*model.Scheme)
d5, err := ss.Scheme().Save(s5)
assert.Nil(t, err)
c5 := &model.Channel{
TeamId: model.NewId(),
@@ -460,8 +445,8 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) {
c5, err = ss.Channel().Save(c5, -1)
assert.Nil(t, err)
sres5 := <-ss.Scheme().Delete(d5.Id)
assert.Nil(t, sres5.Err)
_, err = ss.Scheme().Delete(d5.Id)
assert.Nil(t, err)
c6, err := ss.Channel().Get(c5.Id, true)
assert.Nil(t, err)
@@ -483,19 +468,21 @@ func testSchemeStorePermanentDeleteAll(t *testing.T, ss store.Store) {
Scope: model.SCHEME_SCOPE_CHANNEL,
}
s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme)
s1, err := ss.Scheme().Save(s1)
require.Nil(t, err)
s2, err = ss.Scheme().Save(s2)
require.Nil(t, err)
res := <-ss.Scheme().PermanentDeleteAll()
assert.Nil(t, res.Err)
err = ss.Scheme().PermanentDeleteAll()
assert.Nil(t, err)
res1 := <-ss.Scheme().Get(s1.Id)
assert.NotNil(t, res1.Err)
_, err = ss.Scheme().Get(s1.Id)
assert.NotNil(t, err)
res2 := <-ss.Scheme().Get(s2.Id)
assert.NotNil(t, res2.Err)
_, err = ss.Scheme().Get(s2.Id)
assert.NotNil(t, err)
res3 := <-ss.Scheme().GetAllPage("", 0, 100000)
assert.Nil(t, res3.Err)
assert.Len(t, res3.Data.([]*model.Scheme), 0)
schemes, err := ss.Scheme().GetAllPage("", 0, 100000)
assert.Nil(t, err)
assert.Len(t, schemes, 0)
}

View File

@@ -1051,7 +1051,8 @@ func testGetTeamMember(t *testing.T, ss store.Store) {
Description: model.NewId(),
Scope: model.SCHEME_SCOPE_TEAM,
}
s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme)
s2, err := ss.Scheme().Save(s2)
require.Nil(t, err)
t.Log(s2)
t2, err := ss.Team().Save(&model.Team{
@@ -1318,8 +1319,10 @@ func testGetTeamsByScheme(t *testing.T, ss store.Store) {
Scope: model.SCHEME_SCOPE_TEAM,
}
s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme)
s1, err := ss.Scheme().Save(s1)
require.Nil(t, err)
s2, err = ss.Scheme().Save(s2)
require.Nil(t, err)
// Create and save some teams.
t1 := &model.Team{
@@ -1345,7 +1348,7 @@ func testGetTeamsByScheme(t *testing.T, ss store.Store) {
Type: model.TEAM_OPEN,
}
_, err := ss.Team().Save(t1)
_, err = ss.Team().Save(t1)
require.Nil(t, err)
_, err = ss.Team().Save(t2)
@@ -1447,7 +1450,8 @@ func testResetAllTeamSchemes(t *testing.T, ss store.Store) {
Description: model.NewId(),
Scope: model.SCHEME_SCOPE_TEAM,
}
s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
s1, err := ss.Scheme().Save(s1)
require.Nil(t, err)
t1 := &model.Team{
Name: model.NewId(),
@@ -1465,7 +1469,7 @@ func testResetAllTeamSchemes(t *testing.T, ss store.Store) {
SchemeId: &s1.Id,
}
t1, err := ss.Team().Save(t1)
t1, err = ss.Team().Save(t1)
require.Nil(t, err)
t2, err = ss.Team().Save(t2)
require.Nil(t, err)
@@ -1539,7 +1543,8 @@ func testTeamStoreAnalyticsGetTeamCountForScheme(t *testing.T, ss store.Store) {
Description: model.NewId(),
Scope: model.SCHEME_SCOPE_TEAM,
}
s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
s1, err := ss.Scheme().Save(s1)
require.Nil(t, err)
count1 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64)
assert.Equal(t, int64(0), count1)
@@ -1551,7 +1556,7 @@ func testTeamStoreAnalyticsGetTeamCountForScheme(t *testing.T, ss store.Store) {
Type: model.TEAM_OPEN,
SchemeId: &s1.Id,
}
_, err := ss.Team().Save(t1)
_, err = ss.Team().Save(t1)
require.Nil(t, err)
count2 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64)