[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>
Этот коммит содержится в:
Vishal
2022-05-12 12:03:59 +05:30
коммит произвёл GitHub
родитель ea98f9f4a9
Коммит 1092c60bc6
5 изменённых файлов: 104 добавлений и 5 удалений

Просмотреть файл

@@ -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) {