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
Этот коммит содержится в:
Harrison Healey
2024-06-19 10:39:37 -04:00
коммит произвёл GitHub
родитель 8181a9ddff
Коммит 5defc75e46
7 изменённых файлов: 54 добавлений и 20 удалений

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

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

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

@@ -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"
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)
}

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

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