[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 {
|
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
|
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
|
// check if a participant has overridden collapsed threads settings
|
||||||
if preference, err := a.Srv().Store.Preference().Get(userID, model.PreferenceCategoryDisplaySettings, model.PreferenceNameCollapsedThreadsEnabled); err == nil {
|
if preference, err := a.Srv().Store.Preference().Get(userID, model.PreferenceCategoryDisplaySettings, model.PreferenceNameCollapsedThreadsEnabled); err == nil {
|
||||||
threadsEnabled = preference.Value == "on"
|
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) {
|
func TestGetTopChannelsForTeamSince(t *testing.T) {
|
||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|||||||
@@ -241,9 +241,10 @@ func (es *Service) sendBatchedEmailNotification(userID string, notifications []*
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check if user has CRT set to ON
|
// check if user has CRT set to ON
|
||||||
threadsEnabled := false
|
appCRT := *es.config().ServiceSettings.CollapsedThreads
|
||||||
if *es.config().ServiceSettings.CollapsedThreads != model.CollapsedThreadsDisabled {
|
threadsEnabled := appCRT == model.CollapsedThreadsAlwaysOn
|
||||||
threadsEnabled = *es.config().ServiceSettings.CollapsedThreads == model.CollapsedThreadsDefaultOn
|
if !threadsEnabled && appCRT != model.CollapsedThreadsDisabled {
|
||||||
|
threadsEnabled = appCRT == model.CollapsedThreadsDefaultOn
|
||||||
// check if a participant has overridden collapsed threads settings
|
// check if a participant has overridden collapsed threads settings
|
||||||
if preference, errCrt := es.store.Preference().Get(userID, model.PreferenceCategoryDisplaySettings, model.PreferenceNameCollapsedThreadsEnabled); errCrt == nil {
|
if preference, errCrt := es.store.Preference().Get(userID, model.PreferenceCategoryDisplaySettings, model.PreferenceNameCollapsedThreadsEnabled); errCrt == nil {
|
||||||
threadsEnabled = preference.Value == "on"
|
threadsEnabled = preference.Value == "on"
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ const (
|
|||||||
CollapsedThreadsDisabled = "disabled"
|
CollapsedThreadsDisabled = "disabled"
|
||||||
CollapsedThreadsDefaultOn = "default_on"
|
CollapsedThreadsDefaultOn = "default_on"
|
||||||
CollapsedThreadsDefaultOff = "default_off"
|
CollapsedThreadsDefaultOff = "default_off"
|
||||||
|
CollapsedThreadsAlwaysOn = "always_on"
|
||||||
|
|
||||||
EmailBatchingBufferSize = 256
|
EmailBatchingBufferSize = 256
|
||||||
EmailBatchingInterval = 30
|
EmailBatchingInterval = 30
|
||||||
@@ -3657,6 +3658,7 @@ func (s *ServiceSettings) isValid() *AppError {
|
|||||||
|
|
||||||
if *s.CollapsedThreads != CollapsedThreadsDisabled &&
|
if *s.CollapsedThreads != CollapsedThreadsDisabled &&
|
||||||
*s.CollapsedThreads != CollapsedThreadsDefaultOn &&
|
*s.CollapsedThreads != CollapsedThreadsDefaultOn &&
|
||||||
|
*s.CollapsedThreads != CollapsedThreadsAlwaysOn &&
|
||||||
*s.CollapsedThreads != CollapsedThreadsDefaultOff {
|
*s.CollapsedThreads != CollapsedThreadsDefaultOff {
|
||||||
return NewAppError("Config.IsValid", "model.config.is_valid.collapsed_threads.app_error", nil, "", http.StatusBadRequest)
|
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()
|
err = cfg.ServiceSettings.isValid()
|
||||||
require.NotNil(t, err)
|
require.NotNil(t, err)
|
||||||
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", err.Id)
|
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) {
|
func TestConfigDefaultCallsPluginState(t *testing.T) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user