MM-57913 Increase maximum length of Preferences.Value column (#27297)
* MM-57913 Increase maximum length of Preferences.Value column * Add missing column name to migration * Lowercased table and column names
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
8181a9ddff
Коммит
5defc75e46
@@ -240,6 +240,8 @@ channels/db/migrations/mysql/000120_create_channelbookmarks_table.down.sql
|
|||||||
channels/db/migrations/mysql/000120_create_channelbookmarks_table.up.sql
|
channels/db/migrations/mysql/000120_create_channelbookmarks_table.up.sql
|
||||||
channels/db/migrations/mysql/000121_remove_true_up_review_history.down.sql
|
channels/db/migrations/mysql/000121_remove_true_up_review_history.down.sql
|
||||||
channels/db/migrations/mysql/000121_remove_true_up_review_history.up.sql
|
channels/db/migrations/mysql/000121_remove_true_up_review_history.up.sql
|
||||||
|
channels/db/migrations/mysql/000122_preferences_value_length.down.sql
|
||||||
|
channels/db/migrations/mysql/000122_preferences_value_length.up.sql
|
||||||
channels/db/migrations/postgres/000001_create_teams.down.sql
|
channels/db/migrations/postgres/000001_create_teams.down.sql
|
||||||
channels/db/migrations/postgres/000001_create_teams.up.sql
|
channels/db/migrations/postgres/000001_create_teams.up.sql
|
||||||
channels/db/migrations/postgres/000002_create_team_members.down.sql
|
channels/db/migrations/postgres/000002_create_team_members.down.sql
|
||||||
@@ -480,3 +482,5 @@ channels/db/migrations/postgres/000120_create_channelbookmarks_table.down.sql
|
|||||||
channels/db/migrations/postgres/000120_create_channelbookmarks_table.up.sql
|
channels/db/migrations/postgres/000120_create_channelbookmarks_table.up.sql
|
||||||
channels/db/migrations/postgres/000121_remove_true_up_review_history.down.sql
|
channels/db/migrations/postgres/000121_remove_true_up_review_history.down.sql
|
||||||
channels/db/migrations/postgres/000121_remove_true_up_review_history.up.sql
|
channels/db/migrations/postgres/000121_remove_true_up_review_history.up.sql
|
||||||
|
channels/db/migrations/postgres/000122_preferences_value_length.down.sql
|
||||||
|
channels/db/migrations/postgres/000122_preferences_value_length.up.sql
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
-- Only applicable to Postgres
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
-- Only applicable to Postgres
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE Preferences ALTER COLUMN Value TYPE VARCHAR(2000);
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE preferences ALTER COLUMN value TYPE text;
|
||||||
@@ -60,6 +60,8 @@ const (
|
|||||||
PreferenceEmailIntervalHour = "hour"
|
PreferenceEmailIntervalHour = "hour"
|
||||||
PreferenceEmailIntervalHourAsSeconds = "3600"
|
PreferenceEmailIntervalHourAsSeconds = "3600"
|
||||||
PreferenceCloudUserEphemeralInfo = "cloud_user_ephemeral_info"
|
PreferenceCloudUserEphemeralInfo = "cloud_user_ephemeral_info"
|
||||||
|
|
||||||
|
MaxPreferenceValueLength = 20000
|
||||||
)
|
)
|
||||||
|
|
||||||
type Preference struct {
|
type Preference struct {
|
||||||
@@ -84,7 +86,7 @@ func (o *Preference) IsValid() *AppError {
|
|||||||
return NewAppError("Preference.IsValid", "model.preference.is_valid.name.app_error", nil, "name="+o.Name, http.StatusBadRequest)
|
return NewAppError("Preference.IsValid", "model.preference.is_valid.name.app_error", nil, "name="+o.Name, http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
if utf8.RuneCountInString(o.Value) > 2000 {
|
if utf8.RuneCountInString(o.Value) > MaxPreferenceValueLength {
|
||||||
return NewAppError("Preference.IsValid", "model.preference.is_valid.value.app_error", nil, "value="+o.Value, http.StatusBadRequest)
|
return NewAppError("Preference.IsValid", "model.preference.is_valid.value.app_error", nil, "value="+o.Value, http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,34 +18,58 @@ func TestPreferenceIsValid(t *testing.T) {
|
|||||||
Name: NewId(),
|
Name: NewId(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t.Run("should require a user ID", func(t *testing.T) {
|
||||||
require.NotNil(t, preference.IsValid())
|
require.NotNil(t, preference.IsValid())
|
||||||
|
|
||||||
preference.UserId = NewId()
|
preference.UserId = NewId()
|
||||||
require.Nil(t, preference.IsValid())
|
require.Nil(t, preference.IsValid())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should require a valid category", func(t *testing.T) {
|
||||||
preference.Category = strings.Repeat("01234567890", 20)
|
preference.Category = strings.Repeat("01234567890", 20)
|
||||||
require.NotNil(t, preference.IsValid())
|
require.NotNil(t, preference.IsValid())
|
||||||
|
|
||||||
preference.Category = PreferenceCategoryDirectChannelShow
|
preference.Category = PreferenceCategoryDirectChannelShow
|
||||||
require.Nil(t, preference.IsValid())
|
require.Nil(t, preference.IsValid())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should require a valid name", func(t *testing.T) {
|
||||||
preference.Name = strings.Repeat("01234567890", 20)
|
preference.Name = strings.Repeat("01234567890", 20)
|
||||||
require.NotNil(t, preference.IsValid())
|
require.NotNil(t, preference.IsValid())
|
||||||
|
|
||||||
preference.Name = NewId()
|
preference.Name = NewId()
|
||||||
require.Nil(t, preference.IsValid())
|
require.Nil(t, preference.IsValid())
|
||||||
|
})
|
||||||
|
|
||||||
preference.Value = strings.Repeat("01234567890", 201)
|
t.Run("should require a valid value", func(t *testing.T) {
|
||||||
|
preference.Value = strings.Repeat("01234567890", 2001)
|
||||||
require.NotNil(t, preference.IsValid())
|
require.NotNil(t, preference.IsValid())
|
||||||
|
|
||||||
preference.Value = "1234garbage"
|
preference.Value = "1234garbage"
|
||||||
require.Nil(t, preference.IsValid())
|
require.Nil(t, preference.IsValid())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should validate that a theme preference's value is a map", func(t *testing.T) {
|
||||||
preference.Category = PreferenceCategoryTheme
|
preference.Category = PreferenceCategoryTheme
|
||||||
require.NotNil(t, preference.IsValid())
|
require.NotNil(t, preference.IsValid())
|
||||||
|
|
||||||
preference.Value = `{"color": "#ff0000", "color2": "#faf"}`
|
preference.Value = `{"color": "#ff0000", "color2": "#faf"}`
|
||||||
require.Nil(t, preference.IsValid())
|
require.Nil(t, preference.IsValid())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("MM-57913 should be able to store an array of 200 IDs for the team sidebar order preference", func(t *testing.T) {
|
||||||
|
preference.Category = "teams_order"
|
||||||
|
preference.Name = ""
|
||||||
|
|
||||||
|
teamIds := make([]string, 200)
|
||||||
|
for i := range teamIds {
|
||||||
|
teamIds[i] = NewId()
|
||||||
|
}
|
||||||
|
teamIdsBytes, _ := json.Marshal(teamIds)
|
||||||
|
preference.Value = string(teamIdsBytes)
|
||||||
|
|
||||||
|
require.Nil(t, preference.IsValid())
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPreferencePreUpdate(t *testing.T) {
|
func TestPreferencePreUpdate(t *testing.T) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user