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
This commit is contained in:
Harrison Healey 2024-06-19 10:39:37 -04:00 committed by GitHub
parent 8181a9ddff
commit 5defc75e46
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 54 additions and 20 deletions

View File

@ -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/000121_remove_true_up_review_history.down.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.up.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/000121_remove_true_up_review_history.down.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

View File

@ -0,0 +1 @@
-- Only applicable to Postgres

View File

@ -0,0 +1 @@
-- Only applicable to Postgres

View File

@ -0,0 +1 @@
ALTER TABLE Preferences ALTER COLUMN Value TYPE VARCHAR(2000);

View File

@ -0,0 +1 @@
ALTER TABLE preferences ALTER COLUMN value TYPE text;

View File

@ -60,6 +60,8 @@ const (
PreferenceEmailIntervalHour = "hour"
PreferenceEmailIntervalHourAsSeconds = "3600"
PreferenceCloudUserEphemeralInfo = "cloud_user_ephemeral_info"
MaxPreferenceValueLength = 20000
)
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)
}
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)
}

View File

@ -18,34 +18,58 @@ func TestPreferenceIsValid(t *testing.T) {
Name: NewId(),
}
require.NotNil(t, preference.IsValid())
t.Run("should require a user ID", func(t *testing.T) {
require.NotNil(t, preference.IsValid())
preference.UserId = NewId()
require.Nil(t, preference.IsValid())
preference.UserId = NewId()
require.Nil(t, preference.IsValid())
})
preference.Category = strings.Repeat("01234567890", 20)
require.NotNil(t, preference.IsValid())
t.Run("should require a valid category", func(t *testing.T) {
preference.Category = strings.Repeat("01234567890", 20)
require.NotNil(t, preference.IsValid())
preference.Category = PreferenceCategoryDirectChannelShow
require.Nil(t, preference.IsValid())
preference.Category = PreferenceCategoryDirectChannelShow
require.Nil(t, preference.IsValid())
})
preference.Name = strings.Repeat("01234567890", 20)
require.NotNil(t, preference.IsValid())
t.Run("should require a valid name", func(t *testing.T) {
preference.Name = strings.Repeat("01234567890", 20)
require.NotNil(t, preference.IsValid())
preference.Name = NewId()
require.Nil(t, preference.IsValid())
preference.Name = NewId()
require.Nil(t, preference.IsValid())
})
preference.Value = strings.Repeat("01234567890", 201)
require.NotNil(t, preference.IsValid())
t.Run("should require a valid value", func(t *testing.T) {
preference.Value = strings.Repeat("01234567890", 2001)
require.NotNil(t, preference.IsValid())
preference.Value = "1234garbage"
require.Nil(t, preference.IsValid())
preference.Value = "1234garbage"
require.Nil(t, preference.IsValid())
})
preference.Category = PreferenceCategoryTheme
require.NotNil(t, preference.IsValid())
t.Run("should validate that a theme preference's value is a map", func(t *testing.T) {
preference.Category = PreferenceCategoryTheme
require.NotNil(t, preference.IsValid())
preference.Value = `{"color": "#ff0000", "color2": "#faf"}`
require.Nil(t, preference.IsValid())
preference.Value = `{"color": "#ff0000", "color2": "#faf"}`
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) {