MM-64718 Improve validation of thread follower imports (#33287)

* MM-64718 Improve validation of thread follower imports

* Add additional test cases and restucture tests
Этот коммит содержится в:
Harrison Healey
2025-07-08 11:57:48 -04:00
коммит произвёл GitHub
родитель 4bb35c5043
Коммит 4b77485e8f
3 изменённых файлов: 96 добавлений и 0 удалений

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

@@ -563,6 +563,14 @@ func ValidatePostImportData(data *PostImportData, maxPostSize int) *model.AppErr
}
}
if data.ThreadFollowers != nil {
for _, follower := range *data.ThreadFollowers {
if err := ValidateThreadFollowerImportData(&follower); err != nil {
return model.NewAppError("BulkImport", "app.import.validate_post_import_data.thread_follower.error", nil, "", http.StatusBadRequest).Wrap(err)
}
}
}
return nil
}
@@ -687,6 +695,14 @@ func ValidateDirectPostImportData(data *DirectPostImportData, maxPostSize int) *
}
}
if data.ThreadFollowers != nil {
for _, follower := range *data.ThreadFollowers {
if err := ValidateThreadFollowerImportData(&follower); err != nil {
return model.NewAppError("BulkImport", "app.import.validate_direct_post_import_data.thread_follower.error", nil, "", http.StatusBadRequest).Wrap(err)
}
}
}
return nil
}
@@ -717,6 +733,18 @@ func ValidateEmojiImportData(data *EmojiImportData) *model.AppError {
return nil
}
func ValidateThreadFollowerImportData(data *ThreadFollowerImportData) *model.AppError {
if data == nil {
return model.NewAppError("BulkImport", "app.import.validate_thread_follower_data.empty.error", nil, "", http.StatusBadRequest)
}
if data.User == nil || *data.User == "" {
return model.NewAppError("BulkImport", "app.import.validate_thread_follower_data.user_missing.error", nil, "", http.StatusBadRequest)
}
return nil
}
func isValidTrueOrFalseString(value string) bool {
return value == "true" || value == "false"
}

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

@@ -1541,6 +1541,58 @@ func TestImportValidateEmojiImportData(t *testing.T) {
}
}
func TestImportValidateThreadFollowerImportData(t *testing.T) {
testCases := []struct {
testName string
input *ThreadFollowerImportData
expectError bool
}{
{
testName: "success",
input: &ThreadFollowerImportData{
LastViewed: model.NewPointer(int64(0)),
UnreadMentions: model.NewPointer(int64(0)),
User: model.NewPointer("user1"),
},
expectError: false,
},
{
testName: "nil",
input: nil,
expectError: true,
},
{
testName: "nil user",
input: &ThreadFollowerImportData{
LastViewed: model.NewPointer(int64(0)),
UnreadMentions: model.NewPointer(int64(0)),
User: nil,
},
expectError: true,
},
{
testName: "empty user",
input: &ThreadFollowerImportData{
LastViewed: model.NewPointer(int64(0)),
UnreadMentions: model.NewPointer(int64(0)),
User: model.NewPointer(""),
},
expectError: true,
},
}
for _, tc := range testCases {
t.Run(tc.testName, func(t *testing.T) {
err := ValidateThreadFollowerImportData(tc.input)
if tc.expectError {
require.NotNil(t, err)
} else {
assert.Nil(t, err)
}
})
}
}
func checkError(t *testing.T, err *model.AppError) {
require.NotNil(t, err, "Should have returned an error.")
}