[MM-32692] Add two more CRT options (#20088)
* MM-32692 Add two more CRT options deafult_on and always_on Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
@@ -2550,10 +2550,14 @@ func (a *App) SetActiveChannel(userID string, channelID string) *model.AppError
|
||||
}
|
||||
|
||||
func (a *App) IsCRTEnabledForUser(userID string) bool {
|
||||
if *a.Config().ServiceSettings.CollapsedThreads == model.CollapsedThreadsDisabled {
|
||||
appCRT := *a.Config().ServiceSettings.CollapsedThreads
|
||||
if appCRT == model.CollapsedThreadsDisabled {
|
||||
return false
|
||||
}
|
||||
threadsEnabled := *a.Config().ServiceSettings.CollapsedThreads == model.CollapsedThreadsDefaultOn
|
||||
if appCRT == model.CollapsedThreadsAlwaysOn {
|
||||
return true
|
||||
}
|
||||
threadsEnabled := appCRT == model.CollapsedThreadsDefaultOn
|
||||
// check if a participant has overridden collapsed threads settings
|
||||
if preference, err := a.Srv().Store.Preference().Get(userID, model.PreferenceCategoryDisplaySettings, model.PreferenceNameCollapsedThreadsEnabled); err == nil {
|
||||
threadsEnabled = preference.Value == "on"
|
||||
|
||||
@@ -2447,6 +2447,87 @@ func TestMarkUnreadWithThreads(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestIsCRTEnabledForUser(t *testing.T) {
|
||||
type preference struct {
|
||||
val string
|
||||
err error
|
||||
}
|
||||
|
||||
testCases := []struct {
|
||||
desc string
|
||||
appCRT string
|
||||
pref preference
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
desc: "Returns false when system config is disabled",
|
||||
appCRT: model.CollapsedThreadsDisabled,
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
desc: "Returns true when system config is always_on",
|
||||
appCRT: model.CollapsedThreadsAlwaysOn,
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
desc: "Returns true when system config is default_on and user has no preference",
|
||||
appCRT: model.CollapsedThreadsDefaultOn,
|
||||
pref: preference{"test", errors.New("err")},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
desc: "Returns false when system config is default_off and user has no preference",
|
||||
appCRT: model.CollapsedThreadsDefaultOff,
|
||||
pref: preference{"qwe", errors.New("err")},
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
desc: "Returns true when system config is default_on and user has on preference",
|
||||
appCRT: model.CollapsedThreadsDefaultOn,
|
||||
pref: preference{"on", nil},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
desc: "Returns false when system config is default_on and user has off preference",
|
||||
appCRT: model.CollapsedThreadsDefaultOn,
|
||||
pref: preference{"off", nil},
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
desc: "Returns true when system config is default_off and user has on preference",
|
||||
appCRT: model.CollapsedThreadsDefaultOff,
|
||||
pref: preference{"on", nil},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
desc: "Returns false when system config is default_off and user has off preference",
|
||||
appCRT: model.CollapsedThreadsDefaultOff,
|
||||
pref: preference{"off", nil},
|
||||
expected: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
t.Run(tc.desc, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
th := SetupWithStoreMock(t)
|
||||
defer th.TearDown()
|
||||
|
||||
th.App.Config().ServiceSettings.CollapsedThreads = &tc.appCRT
|
||||
|
||||
mockStore := th.App.Srv().Store.(*mocks.Store)
|
||||
mockPreferenceStore := mocks.PreferenceStore{}
|
||||
mockPreferenceStore.On("Get", mock.Anything, model.PreferenceCategoryDisplaySettings, model.PreferenceNameCollapsedThreadsEnabled).Return(&model.Preference{Value: tc.pref.val}, tc.pref.err)
|
||||
mockStore.On("Preference").Return(&mockPreferenceStore)
|
||||
|
||||
res := th.App.IsCRTEnabledForUser(mock.Anything)
|
||||
|
||||
assert.Equal(t, tc.expected, res)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetTopChannelsForTeamSince(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
@@ -241,9 +241,10 @@ func (es *Service) sendBatchedEmailNotification(userID string, notifications []*
|
||||
}
|
||||
|
||||
// check if user has CRT set to ON
|
||||
threadsEnabled := false
|
||||
if *es.config().ServiceSettings.CollapsedThreads != model.CollapsedThreadsDisabled {
|
||||
threadsEnabled = *es.config().ServiceSettings.CollapsedThreads == model.CollapsedThreadsDefaultOn
|
||||
appCRT := *es.config().ServiceSettings.CollapsedThreads
|
||||
threadsEnabled := appCRT == model.CollapsedThreadsAlwaysOn
|
||||
if !threadsEnabled && appCRT != model.CollapsedThreadsDisabled {
|
||||
threadsEnabled = appCRT == model.CollapsedThreadsDefaultOn
|
||||
// check if a participant has overridden collapsed threads settings
|
||||
if preference, errCrt := es.store.Preference().Get(userID, model.PreferenceCategoryDisplaySettings, model.PreferenceNameCollapsedThreadsEnabled); errCrt == nil {
|
||||
threadsEnabled = preference.Value == "on"
|
||||
|
||||
@@ -86,6 +86,7 @@ const (
|
||||
CollapsedThreadsDisabled = "disabled"
|
||||
CollapsedThreadsDefaultOn = "default_on"
|
||||
CollapsedThreadsDefaultOff = "default_off"
|
||||
CollapsedThreadsAlwaysOn = "always_on"
|
||||
|
||||
EmailBatchingBufferSize = 256
|
||||
EmailBatchingInterval = 30
|
||||
@@ -3657,6 +3658,7 @@ func (s *ServiceSettings) isValid() *AppError {
|
||||
|
||||
if *s.CollapsedThreads != CollapsedThreadsDisabled &&
|
||||
*s.CollapsedThreads != CollapsedThreadsDefaultOn &&
|
||||
*s.CollapsedThreads != CollapsedThreadsAlwaysOn &&
|
||||
*s.CollapsedThreads != CollapsedThreadsDefaultOff {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.collapsed_threads.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
@@ -1491,6 +1491,17 @@ func TestConfigServiceSettingsIsValid(t *testing.T) {
|
||||
err = cfg.ServiceSettings.isValid()
|
||||
require.NotNil(t, err)
|
||||
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", err.Id)
|
||||
|
||||
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsAlwaysOn
|
||||
err = cfg.ServiceSettings.isValid()
|
||||
require.NotNil(t, err)
|
||||
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", err.Id)
|
||||
|
||||
*cfg.ServiceSettings.ThreadAutoFollow = true
|
||||
*cfg.ServiceSettings.CollapsedThreads = "test_status"
|
||||
err = cfg.ServiceSettings.isValid()
|
||||
require.NotNil(t, err)
|
||||
require.Equal(t, "model.config.is_valid.collapsed_threads.app_error", err.Id)
|
||||
}
|
||||
|
||||
func TestConfigDefaultCallsPluginState(t *testing.T) {
|
||||
|
||||
Ссылка в новой задаче
Block a user