github.com/qichengzx/mattermost-server@v4.5.1-0.20180604164826-2c75247c97d0+incompatible/store/storetest/preference_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package storetest 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 11 "github.com/mattermost/mattermost-server/model" 12 "github.com/mattermost/mattermost-server/store" 13 ) 14 15 func TestPreferenceStore(t *testing.T, ss store.Store) { 16 t.Run("PreferenceSave", func(t *testing.T) { testPreferenceSave(t, ss) }) 17 t.Run("PreferenceGet", func(t *testing.T) { testPreferenceGet(t, ss) }) 18 t.Run("PreferenceGetCategory", func(t *testing.T) { testPreferenceGetCategory(t, ss) }) 19 t.Run("PreferenceGetAll", func(t *testing.T) { testPreferenceGetAll(t, ss) }) 20 t.Run("PreferenceDeleteByUser", func(t *testing.T) { testPreferenceDeleteByUser(t, ss) }) 21 t.Run("IsFeatureEnabled", func(t *testing.T) { testIsFeatureEnabled(t, ss) }) 22 t.Run("PreferenceDelete", func(t *testing.T) { testPreferenceDelete(t, ss) }) 23 t.Run("PreferenceDeleteCategory", func(t *testing.T) { testPreferenceDeleteCategory(t, ss) }) 24 t.Run("PreferenceDeleteCategoryAndName", func(t *testing.T) { testPreferenceDeleteCategoryAndName(t, ss) }) 25 t.Run("PreferenceCleanupFlagsBatch", func(t *testing.T) { testPreferenceCleanupFlagsBatch(t, ss) }) 26 } 27 28 func testPreferenceSave(t *testing.T, ss store.Store) { 29 id := model.NewId() 30 31 preferences := model.Preferences{ 32 { 33 UserId: id, 34 Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, 35 Name: model.NewId(), 36 Value: "value1a", 37 }, 38 { 39 UserId: id, 40 Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, 41 Name: model.NewId(), 42 Value: "value1b", 43 }, 44 } 45 if count := store.Must(ss.Preference().Save(&preferences)); count != 2 { 46 t.Fatal("got incorrect number of rows saved") 47 } 48 49 for _, preference := range preferences { 50 if data := store.Must(ss.Preference().Get(preference.UserId, preference.Category, preference.Name)).(model.Preference); preference != data { 51 t.Fatal("got incorrect preference after first Save") 52 } 53 } 54 55 preferences[0].Value = "value2a" 56 preferences[1].Value = "value2b" 57 if count := store.Must(ss.Preference().Save(&preferences)); count != 2 { 58 t.Fatal("got incorrect number of rows saved") 59 } 60 61 for _, preference := range preferences { 62 if data := store.Must(ss.Preference().Get(preference.UserId, preference.Category, preference.Name)).(model.Preference); preference != data { 63 t.Fatal("got incorrect preference after second Save") 64 } 65 } 66 } 67 68 func testPreferenceGet(t *testing.T, ss store.Store) { 69 userId := model.NewId() 70 category := model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW 71 name := model.NewId() 72 73 preferences := model.Preferences{ 74 { 75 UserId: userId, 76 Category: category, 77 Name: name, 78 }, 79 { 80 UserId: userId, 81 Category: category, 82 Name: model.NewId(), 83 }, 84 { 85 UserId: userId, 86 Category: model.NewId(), 87 Name: name, 88 }, 89 { 90 UserId: model.NewId(), 91 Category: category, 92 Name: name, 93 }, 94 } 95 96 store.Must(ss.Preference().Save(&preferences)) 97 98 if result := <-ss.Preference().Get(userId, category, name); result.Err != nil { 99 t.Fatal(result.Err) 100 } else if data := result.Data.(model.Preference); data != preferences[0] { 101 t.Fatal("got incorrect preference") 102 } 103 104 // make sure getting a missing preference fails 105 if result := <-ss.Preference().Get(model.NewId(), model.NewId(), model.NewId()); result.Err == nil { 106 t.Fatal("no error on getting a missing preference") 107 } 108 } 109 110 func testPreferenceGetCategory(t *testing.T, ss store.Store) { 111 userId := model.NewId() 112 category := model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW 113 name := model.NewId() 114 115 preferences := model.Preferences{ 116 { 117 UserId: userId, 118 Category: category, 119 Name: name, 120 }, 121 // same user/category, different name 122 { 123 UserId: userId, 124 Category: category, 125 Name: model.NewId(), 126 }, 127 // same user/name, different category 128 { 129 UserId: userId, 130 Category: model.NewId(), 131 Name: name, 132 }, 133 // same name/category, different user 134 { 135 UserId: model.NewId(), 136 Category: category, 137 Name: name, 138 }, 139 } 140 141 store.Must(ss.Preference().Save(&preferences)) 142 143 if result := <-ss.Preference().GetCategory(userId, category); result.Err != nil { 144 t.Fatal(result.Err) 145 } else if data := result.Data.(model.Preferences); len(data) != 2 { 146 t.Fatal("got the wrong number of preferences") 147 } else if !((data[0] == preferences[0] && data[1] == preferences[1]) || (data[0] == preferences[1] && data[1] == preferences[0])) { 148 t.Fatal("got incorrect preferences") 149 } 150 151 // make sure getting a missing preference category doesn't fail 152 if result := <-ss.Preference().GetCategory(model.NewId(), model.NewId()); result.Err != nil { 153 t.Fatal(result.Err) 154 } else if data := result.Data.(model.Preferences); len(data) != 0 { 155 t.Fatal("shouldn't have got any preferences") 156 } 157 } 158 159 func testPreferenceGetAll(t *testing.T, ss store.Store) { 160 userId := model.NewId() 161 category := model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW 162 name := model.NewId() 163 164 preferences := model.Preferences{ 165 { 166 UserId: userId, 167 Category: category, 168 Name: name, 169 }, 170 // same user/category, different name 171 { 172 UserId: userId, 173 Category: category, 174 Name: model.NewId(), 175 }, 176 // same user/name, different category 177 { 178 UserId: userId, 179 Category: model.NewId(), 180 Name: name, 181 }, 182 // same name/category, different user 183 { 184 UserId: model.NewId(), 185 Category: category, 186 Name: name, 187 }, 188 } 189 190 store.Must(ss.Preference().Save(&preferences)) 191 192 if result := <-ss.Preference().GetAll(userId); result.Err != nil { 193 t.Fatal(result.Err) 194 } else if data := result.Data.(model.Preferences); len(data) != 3 { 195 t.Fatal("got the wrong number of preferences") 196 } else { 197 for i := 0; i < 3; i++ { 198 if data[0] != preferences[i] && data[1] != preferences[i] && data[2] != preferences[i] { 199 t.Fatal("got incorrect preferences") 200 } 201 } 202 } 203 } 204 205 func testPreferenceDeleteByUser(t *testing.T, ss store.Store) { 206 userId := model.NewId() 207 category := model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW 208 name := model.NewId() 209 210 preferences := model.Preferences{ 211 { 212 UserId: userId, 213 Category: category, 214 Name: name, 215 }, 216 // same user/category, different name 217 { 218 UserId: userId, 219 Category: category, 220 Name: model.NewId(), 221 }, 222 // same user/name, different category 223 { 224 UserId: userId, 225 Category: model.NewId(), 226 Name: name, 227 }, 228 // same name/category, different user 229 { 230 UserId: model.NewId(), 231 Category: category, 232 Name: name, 233 }, 234 } 235 236 store.Must(ss.Preference().Save(&preferences)) 237 238 if result := <-ss.Preference().PermanentDeleteByUser(userId); result.Err != nil { 239 t.Fatal(result.Err) 240 } 241 } 242 243 func testIsFeatureEnabled(t *testing.T, ss store.Store) { 244 feature1 := "testFeat1" 245 feature2 := "testFeat2" 246 feature3 := "testFeat3" 247 248 userId := model.NewId() 249 category := model.PREFERENCE_CATEGORY_ADVANCED_SETTINGS 250 251 features := model.Preferences{ 252 { 253 UserId: userId, 254 Category: category, 255 Name: store.FEATURE_TOGGLE_PREFIX + feature1, 256 Value: "true", 257 }, 258 { 259 UserId: userId, 260 Category: category, 261 Name: model.NewId(), 262 Value: "false", 263 }, 264 { 265 UserId: userId, 266 Category: model.NewId(), 267 Name: store.FEATURE_TOGGLE_PREFIX + feature1, 268 Value: "false", 269 }, 270 { 271 UserId: model.NewId(), 272 Category: category, 273 Name: store.FEATURE_TOGGLE_PREFIX + feature2, 274 Value: "false", 275 }, 276 { 277 UserId: model.NewId(), 278 Category: category, 279 Name: store.FEATURE_TOGGLE_PREFIX + feature3, 280 Value: "foobar", 281 }, 282 } 283 284 store.Must(ss.Preference().Save(&features)) 285 286 if result := <-ss.Preference().IsFeatureEnabled(feature1, userId); result.Err != nil { 287 t.Fatal(result.Err) 288 } else if data := result.Data.(bool); !data { 289 t.Fatalf("got incorrect setting for feature1, %v=%v", true, data) 290 } 291 292 if result := <-ss.Preference().IsFeatureEnabled(feature2, userId); result.Err != nil { 293 t.Fatal(result.Err) 294 } else if data := result.Data.(bool); data { 295 t.Fatalf("got incorrect setting for feature2, %v=%v", false, data) 296 } 297 298 // make sure we get false if something different than "true" or "false" has been saved to database 299 if result := <-ss.Preference().IsFeatureEnabled(feature3, userId); result.Err != nil { 300 t.Fatal(result.Err) 301 } else if data := result.Data.(bool); data { 302 t.Fatalf("got incorrect setting for feature3, %v=%v", false, data) 303 } 304 305 // make sure false is returned if a non-existent feature is queried 306 if result := <-ss.Preference().IsFeatureEnabled("someOtherFeature", userId); result.Err != nil { 307 t.Fatal(result.Err) 308 } else if data := result.Data.(bool); data { 309 t.Fatalf("got incorrect setting for non-existent feature 'someOtherFeature', %v=%v", false, data) 310 } 311 } 312 313 func testPreferenceDelete(t *testing.T, ss store.Store) { 314 preference := model.Preference{ 315 UserId: model.NewId(), 316 Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, 317 Name: model.NewId(), 318 Value: "value1a", 319 } 320 321 store.Must(ss.Preference().Save(&model.Preferences{preference})) 322 323 if prefs := store.Must(ss.Preference().GetAll(preference.UserId)).(model.Preferences); len([]model.Preference(prefs)) != 1 { 324 t.Fatal("should've returned 1 preference") 325 } 326 327 if result := <-ss.Preference().Delete(preference.UserId, preference.Category, preference.Name); result.Err != nil { 328 t.Fatal(result.Err) 329 } 330 331 if prefs := store.Must(ss.Preference().GetAll(preference.UserId)).(model.Preferences); len([]model.Preference(prefs)) != 0 { 332 t.Fatal("should've returned no preferences") 333 } 334 } 335 336 func testPreferenceDeleteCategory(t *testing.T, ss store.Store) { 337 category := model.NewId() 338 userId := model.NewId() 339 340 preference1 := model.Preference{ 341 UserId: userId, 342 Category: category, 343 Name: model.NewId(), 344 Value: "value1a", 345 } 346 347 preference2 := model.Preference{ 348 UserId: userId, 349 Category: category, 350 Name: model.NewId(), 351 Value: "value1a", 352 } 353 354 store.Must(ss.Preference().Save(&model.Preferences{preference1, preference2})) 355 356 if prefs := store.Must(ss.Preference().GetAll(userId)).(model.Preferences); len([]model.Preference(prefs)) != 2 { 357 t.Fatal("should've returned 2 preferences") 358 } 359 360 if result := <-ss.Preference().DeleteCategory(userId, category); result.Err != nil { 361 t.Fatal(result.Err) 362 } 363 364 if prefs := store.Must(ss.Preference().GetAll(userId)).(model.Preferences); len([]model.Preference(prefs)) != 0 { 365 t.Fatal("should've returned no preferences") 366 } 367 } 368 369 func testPreferenceDeleteCategoryAndName(t *testing.T, ss store.Store) { 370 category := model.NewId() 371 name := model.NewId() 372 userId := model.NewId() 373 userId2 := model.NewId() 374 375 preference1 := model.Preference{ 376 UserId: userId, 377 Category: category, 378 Name: name, 379 Value: "value1a", 380 } 381 382 preference2 := model.Preference{ 383 UserId: userId2, 384 Category: category, 385 Name: name, 386 Value: "value1a", 387 } 388 389 store.Must(ss.Preference().Save(&model.Preferences{preference1, preference2})) 390 391 if prefs := store.Must(ss.Preference().GetAll(userId)).(model.Preferences); len([]model.Preference(prefs)) != 1 { 392 t.Fatal("should've returned 1 preference") 393 } 394 395 if prefs := store.Must(ss.Preference().GetAll(userId2)).(model.Preferences); len([]model.Preference(prefs)) != 1 { 396 t.Fatal("should've returned 1 preference") 397 } 398 399 if result := <-ss.Preference().DeleteCategoryAndName(category, name); result.Err != nil { 400 t.Fatal(result.Err) 401 } 402 403 if prefs := store.Must(ss.Preference().GetAll(userId)).(model.Preferences); len([]model.Preference(prefs)) != 0 { 404 t.Fatal("should've returned no preferences") 405 } 406 407 if prefs := store.Must(ss.Preference().GetAll(userId2)).(model.Preferences); len([]model.Preference(prefs)) != 0 { 408 t.Fatal("should've returned no preferences") 409 } 410 } 411 412 func testPreferenceCleanupFlagsBatch(t *testing.T, ss store.Store) { 413 category := model.PREFERENCE_CATEGORY_FLAGGED_POST 414 userId := model.NewId() 415 416 o1 := &model.Post{} 417 o1.ChannelId = model.NewId() 418 o1.UserId = userId 419 o1.Message = "zz" + model.NewId() + "AAAAAAAAAAA" 420 o1.CreateAt = 1000 421 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 422 423 preference1 := model.Preference{ 424 UserId: userId, 425 Category: category, 426 Name: o1.Id, 427 Value: "true", 428 } 429 430 preference2 := model.Preference{ 431 UserId: userId, 432 Category: category, 433 Name: model.NewId(), 434 Value: "true", 435 } 436 437 store.Must(ss.Preference().Save(&model.Preferences{preference1, preference2})) 438 439 result := <-ss.Preference().CleanupFlagsBatch(10000) 440 assert.Nil(t, result.Err) 441 442 result = <-ss.Preference().Get(userId, category, preference1.Name) 443 assert.Nil(t, result.Err) 444 445 result = <-ss.Preference().Get(userId, category, preference2.Name) 446 assert.NotNil(t, result.Err) 447 }