/store/sql_preference_store_test.go

https://gitlab.com/auchalet/mattermost · Go · 369 lines · 306 code · 45 blank · 18 comment · 81 complexity · 3d3dfb4b146d13d7899cbc4ba4497c54 MD5 · raw file

  1. // Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
  2. // See License.txt for license information.
  3. package store
  4. import (
  5. "github.com/mattermost/platform/model"
  6. "testing"
  7. )
  8. func TestPreferenceSave(t *testing.T) {
  9. Setup()
  10. id := model.NewId()
  11. preferences := model.Preferences{
  12. {
  13. UserId: id,
  14. Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
  15. Name: model.NewId(),
  16. Value: "value1a",
  17. },
  18. {
  19. UserId: id,
  20. Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
  21. Name: model.NewId(),
  22. Value: "value1b",
  23. },
  24. }
  25. if count := Must(store.Preference().Save(&preferences)); count != 2 {
  26. t.Fatal("got incorrect number of rows saved")
  27. }
  28. for _, preference := range preferences {
  29. if data := Must(store.Preference().Get(preference.UserId, preference.Category, preference.Name)).(model.Preference); preference != data {
  30. t.Fatal("got incorrect preference after first Save")
  31. }
  32. }
  33. preferences[0].Value = "value2a"
  34. preferences[1].Value = "value2b"
  35. if count := Must(store.Preference().Save(&preferences)); count != 2 {
  36. t.Fatal("got incorrect number of rows saved")
  37. }
  38. for _, preference := range preferences {
  39. if data := Must(store.Preference().Get(preference.UserId, preference.Category, preference.Name)).(model.Preference); preference != data {
  40. t.Fatal("got incorrect preference after second Save")
  41. }
  42. }
  43. }
  44. func TestPreferenceGet(t *testing.T) {
  45. Setup()
  46. userId := model.NewId()
  47. category := model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW
  48. name := model.NewId()
  49. preferences := model.Preferences{
  50. {
  51. UserId: userId,
  52. Category: category,
  53. Name: name,
  54. },
  55. {
  56. UserId: userId,
  57. Category: category,
  58. Name: model.NewId(),
  59. },
  60. {
  61. UserId: userId,
  62. Category: model.NewId(),
  63. Name: name,
  64. },
  65. {
  66. UserId: model.NewId(),
  67. Category: category,
  68. Name: name,
  69. },
  70. }
  71. Must(store.Preference().Save(&preferences))
  72. if result := <-store.Preference().Get(userId, category, name); result.Err != nil {
  73. t.Fatal(result.Err)
  74. } else if data := result.Data.(model.Preference); data != preferences[0] {
  75. t.Fatal("got incorrect preference")
  76. }
  77. // make sure getting a missing preference fails
  78. if result := <-store.Preference().Get(model.NewId(), model.NewId(), model.NewId()); result.Err == nil {
  79. t.Fatal("no error on getting a missing preference")
  80. }
  81. }
  82. func TestPreferenceGetCategory(t *testing.T) {
  83. Setup()
  84. userId := model.NewId()
  85. category := model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW
  86. name := model.NewId()
  87. preferences := model.Preferences{
  88. {
  89. UserId: userId,
  90. Category: category,
  91. Name: name,
  92. },
  93. // same user/category, different name
  94. {
  95. UserId: userId,
  96. Category: category,
  97. Name: model.NewId(),
  98. },
  99. // same user/name, different category
  100. {
  101. UserId: userId,
  102. Category: model.NewId(),
  103. Name: name,
  104. },
  105. // same name/category, different user
  106. {
  107. UserId: model.NewId(),
  108. Category: category,
  109. Name: name,
  110. },
  111. }
  112. Must(store.Preference().Save(&preferences))
  113. if result := <-store.Preference().GetCategory(userId, category); result.Err != nil {
  114. t.Fatal(result.Err)
  115. } else if data := result.Data.(model.Preferences); len(data) != 2 {
  116. t.Fatal("got the wrong number of preferences")
  117. } else if !((data[0] == preferences[0] && data[1] == preferences[1]) || (data[0] == preferences[1] && data[1] == preferences[0])) {
  118. t.Fatal("got incorrect preferences")
  119. }
  120. // make sure getting a missing preference category doesn't fail
  121. if result := <-store.Preference().GetCategory(model.NewId(), model.NewId()); result.Err != nil {
  122. t.Fatal(result.Err)
  123. } else if data := result.Data.(model.Preferences); len(data) != 0 {
  124. t.Fatal("shouldn't have got any preferences")
  125. }
  126. }
  127. func TestPreferenceGetAll(t *testing.T) {
  128. Setup()
  129. userId := model.NewId()
  130. category := model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW
  131. name := model.NewId()
  132. preferences := model.Preferences{
  133. {
  134. UserId: userId,
  135. Category: category,
  136. Name: name,
  137. },
  138. // same user/category, different name
  139. {
  140. UserId: userId,
  141. Category: category,
  142. Name: model.NewId(),
  143. },
  144. // same user/name, different category
  145. {
  146. UserId: userId,
  147. Category: model.NewId(),
  148. Name: name,
  149. },
  150. // same name/category, different user
  151. {
  152. UserId: model.NewId(),
  153. Category: category,
  154. Name: name,
  155. },
  156. }
  157. Must(store.Preference().Save(&preferences))
  158. if result := <-store.Preference().GetAll(userId); result.Err != nil {
  159. t.Fatal(result.Err)
  160. } else if data := result.Data.(model.Preferences); len(data) != 3 {
  161. t.Fatal("got the wrong number of preferences")
  162. } else {
  163. for i := 0; i < 3; i++ {
  164. if data[0] != preferences[i] && data[1] != preferences[i] && data[2] != preferences[i] {
  165. t.Fatal("got incorrect preferences")
  166. }
  167. }
  168. }
  169. }
  170. func TestPreferenceDelete(t *testing.T) {
  171. Setup()
  172. userId := model.NewId()
  173. category := model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW
  174. name := model.NewId()
  175. preferences := model.Preferences{
  176. {
  177. UserId: userId,
  178. Category: category,
  179. Name: name,
  180. },
  181. // same user/category, different name
  182. {
  183. UserId: userId,
  184. Category: category,
  185. Name: model.NewId(),
  186. },
  187. // same user/name, different category
  188. {
  189. UserId: userId,
  190. Category: model.NewId(),
  191. Name: name,
  192. },
  193. // same name/category, different user
  194. {
  195. UserId: model.NewId(),
  196. Category: category,
  197. Name: name,
  198. },
  199. }
  200. Must(store.Preference().Save(&preferences))
  201. if result := <-store.Preference().PermanentDeleteByUser(userId); result.Err != nil {
  202. t.Fatal(result.Err)
  203. }
  204. }
  205. func TestIsFeatureEnabled(t *testing.T) {
  206. Setup()
  207. feature1 := "testFeat1"
  208. feature2 := "testFeat2"
  209. feature3 := "testFeat3"
  210. userId := model.NewId()
  211. category := model.PREFERENCE_CATEGORY_ADVANCED_SETTINGS
  212. features := model.Preferences{
  213. {
  214. UserId: userId,
  215. Category: category,
  216. Name: FEATURE_TOGGLE_PREFIX + feature1,
  217. Value: "true",
  218. },
  219. {
  220. UserId: userId,
  221. Category: category,
  222. Name: model.NewId(),
  223. Value: "false",
  224. },
  225. {
  226. UserId: userId,
  227. Category: model.NewId(),
  228. Name: FEATURE_TOGGLE_PREFIX + feature1,
  229. Value: "false",
  230. },
  231. {
  232. UserId: model.NewId(),
  233. Category: category,
  234. Name: FEATURE_TOGGLE_PREFIX + feature2,
  235. Value: "false",
  236. },
  237. {
  238. UserId: model.NewId(),
  239. Category: category,
  240. Name: FEATURE_TOGGLE_PREFIX + feature3,
  241. Value: "foobar",
  242. },
  243. }
  244. Must(store.Preference().Save(&features))
  245. if result := <-store.Preference().IsFeatureEnabled(feature1, userId); result.Err != nil {
  246. t.Fatal(result.Err)
  247. } else if data := result.Data.(bool); data != true {
  248. t.Fatalf("got incorrect setting for feature1, %v=%v", true, data)
  249. }
  250. if result := <-store.Preference().IsFeatureEnabled(feature2, userId); result.Err != nil {
  251. t.Fatal(result.Err)
  252. } else if data := result.Data.(bool); data != false {
  253. t.Fatalf("got incorrect setting for feature2, %v=%v", false, data)
  254. }
  255. // make sure we get false if something different than "true" or "false" has been saved to database
  256. if result := <-store.Preference().IsFeatureEnabled(feature3, userId); result.Err != nil {
  257. t.Fatal(result.Err)
  258. } else if data := result.Data.(bool); data != false {
  259. t.Fatalf("got incorrect setting for feature3, %v=%v", false, data)
  260. }
  261. // make sure false is returned if a non-existent feature is queried
  262. if result := <-store.Preference().IsFeatureEnabled("someOtherFeature", userId); result.Err != nil {
  263. t.Fatal(result.Err)
  264. } else if data := result.Data.(bool); data != false {
  265. t.Fatalf("got incorrect setting for non-existent feature 'someOtherFeature', %v=%v", false, data)
  266. }
  267. }
  268. func TestDeleteUnusedFeatures(t *testing.T) {
  269. Setup()
  270. userId1 := model.NewId()
  271. userId2 := model.NewId()
  272. category := model.PREFERENCE_CATEGORY_ADVANCED_SETTINGS
  273. feature1 := "feature1"
  274. feature2 := "feature2"
  275. features := model.Preferences{
  276. {
  277. UserId: userId1,
  278. Category: category,
  279. Name: FEATURE_TOGGLE_PREFIX + feature1,
  280. Value: "true",
  281. },
  282. {
  283. UserId: userId2,
  284. Category: category,
  285. Name: FEATURE_TOGGLE_PREFIX + feature1,
  286. Value: "false",
  287. },
  288. {
  289. UserId: userId1,
  290. Category: category,
  291. Name: FEATURE_TOGGLE_PREFIX + feature2,
  292. Value: "false",
  293. },
  294. {
  295. UserId: userId2,
  296. Category: category,
  297. Name: FEATURE_TOGGLE_PREFIX + feature2,
  298. Value: "true",
  299. },
  300. }
  301. Must(store.Preference().Save(&features))
  302. store.(*SqlStore).preference.(*SqlPreferenceStore).DeleteUnusedFeatures()
  303. //make sure features with value "false" have actually been deleted from the database
  304. if val, err := store.(*SqlStore).preference.(*SqlPreferenceStore).GetReplica().SelectInt(`SELECT COUNT(*)
  305. FROM Preferences
  306. WHERE Category = :Category
  307. AND Value = :Val
  308. AND Name LIKE '`+FEATURE_TOGGLE_PREFIX+`%'`, map[string]interface{}{"Category": model.PREFERENCE_CATEGORY_ADVANCED_SETTINGS, "Val": "false"}); err != nil {
  309. t.Fatal(err)
  310. } else if val != 0 {
  311. t.Fatalf("Found %d features with value 'false', expected all to be deleted", val)
  312. }
  313. //
  314. // make sure features with value "true" remain saved
  315. if val, err := store.(*SqlStore).preference.(*SqlPreferenceStore).GetReplica().SelectInt(`SELECT COUNT(*)
  316. FROM Preferences
  317. WHERE Category = :Category
  318. AND Value = :Val
  319. AND Name LIKE '`+FEATURE_TOGGLE_PREFIX+`%'`, map[string]interface{}{"Category": model.PREFERENCE_CATEGORY_ADVANCED_SETTINGS, "Val": "true"}); err != nil {
  320. t.Fatal(err)
  321. } else if val == 0 {
  322. t.Fatalf("Found %d features with value 'true', expected to find at least %d features", val, 2)
  323. }
  324. }