github.com/keys-pub/mattermost-server@v4.10.10+incompatible/store/storetest/role_store.go (about) 1 // Copyright (c) 2018-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package storetest 5 6 import ( 7 "github.com/stretchr/testify/require" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 12 "github.com/mattermost/mattermost-server/model" 13 "github.com/mattermost/mattermost-server/store" 14 ) 15 16 func TestRoleStore(t *testing.T, ss store.Store) { 17 t.Run("Save", func(t *testing.T) { testRoleStoreSave(t, ss) }) 18 t.Run("Get", func(t *testing.T) { testRoleStoreGet(t, ss) }) 19 t.Run("GetByName", func(t *testing.T) { testRoleStoreGetByName(t, ss) }) 20 t.Run("GetNames", func(t *testing.T) { testRoleStoreGetByNames(t, ss) }) 21 t.Run("GetAll", func(t *testing.T) { testRoleStoreGetAll(t, ss) }) 22 t.Run("PermanentDeleteAll", func(t *testing.T) { testRoleStorePermanentDeleteAll(t, ss) }) 23 } 24 25 func testRoleStoreSave(t *testing.T, ss store.Store) { 26 // Save a new role. 27 r1 := &model.Role{ 28 Name: model.NewId(), 29 DisplayName: model.NewId(), 30 Description: model.NewId(), 31 Permissions: []string{ 32 "invite_user", 33 "create_public_channel", 34 "add_user_to_team", 35 }, 36 SchemeManaged: false, 37 } 38 39 res1 := <-ss.Role().Save(r1) 40 assert.Nil(t, res1.Err) 41 d1 := res1.Data.(*model.Role) 42 assert.Len(t, d1.Id, 26) 43 assert.Equal(t, r1.Name, d1.Name) 44 assert.Equal(t, r1.DisplayName, d1.DisplayName) 45 assert.Equal(t, r1.Description, d1.Description) 46 assert.Equal(t, r1.Permissions, d1.Permissions) 47 assert.Equal(t, r1.SchemeManaged, d1.SchemeManaged) 48 49 // Change the role permissions and update. 50 d1.Permissions = []string{ 51 "invite_user", 52 "add_user_to_team", 53 "delete_public_channel", 54 } 55 56 res2 := <-ss.Role().Save(d1) 57 assert.Nil(t, res2.Err) 58 d2 := res2.Data.(*model.Role) 59 assert.Len(t, d2.Id, 26) 60 assert.Equal(t, r1.Name, d2.Name) 61 assert.Equal(t, r1.DisplayName, d2.DisplayName) 62 assert.Equal(t, r1.Description, d2.Description) 63 assert.Equal(t, d1.Permissions, d2.Permissions) 64 assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged) 65 66 // Try saving one with an invalid ID set. 67 r3 := &model.Role{ 68 Id: model.NewId(), 69 Name: model.NewId(), 70 DisplayName: model.NewId(), 71 Description: model.NewId(), 72 Permissions: []string{ 73 "invite_user", 74 "create_public_channel", 75 "add_user_to_team", 76 }, 77 SchemeManaged: false, 78 } 79 80 res3 := <-ss.Role().Save(r3) 81 assert.NotNil(t, res3.Err) 82 83 // Try saving one with a duplicate "name" field. 84 r4 := &model.Role{ 85 Name: r1.Name, 86 DisplayName: model.NewId(), 87 Description: model.NewId(), 88 Permissions: []string{ 89 "invite_user", 90 "create_public_channel", 91 "add_user_to_team", 92 }, 93 SchemeManaged: false, 94 } 95 96 res4 := <-ss.Role().Save(r4) 97 assert.NotNil(t, res4.Err) 98 } 99 100 func testRoleStoreGet(t *testing.T, ss store.Store) { 101 // Save a role to test with. 102 r1 := &model.Role{ 103 Name: model.NewId(), 104 DisplayName: model.NewId(), 105 Description: model.NewId(), 106 Permissions: []string{ 107 "invite_user", 108 "create_public_channel", 109 "add_user_to_team", 110 }, 111 SchemeManaged: false, 112 } 113 114 res1 := <-ss.Role().Save(r1) 115 assert.Nil(t, res1.Err) 116 d1 := res1.Data.(*model.Role) 117 assert.Len(t, d1.Id, 26) 118 119 // Get a valid role 120 res2 := <-ss.Role().Get(d1.Id) 121 assert.Nil(t, res2.Err) 122 d2 := res1.Data.(*model.Role) 123 assert.Equal(t, d1.Id, d2.Id) 124 assert.Equal(t, r1.Name, d2.Name) 125 assert.Equal(t, r1.DisplayName, d2.DisplayName) 126 assert.Equal(t, r1.Description, d2.Description) 127 assert.Equal(t, r1.Permissions, d2.Permissions) 128 assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged) 129 130 // Get an invalid role 131 res3 := <-ss.Role().Get(model.NewId()) 132 assert.NotNil(t, res3.Err) 133 } 134 135 func testRoleStoreGetByName(t *testing.T, ss store.Store) { 136 // Save a role to test with. 137 r1 := &model.Role{ 138 Name: model.NewId(), 139 DisplayName: model.NewId(), 140 Description: model.NewId(), 141 Permissions: []string{ 142 "invite_user", 143 "create_public_channel", 144 "add_user_to_team", 145 }, 146 SchemeManaged: false, 147 } 148 149 res1 := <-ss.Role().Save(r1) 150 assert.Nil(t, res1.Err) 151 d1 := res1.Data.(*model.Role) 152 assert.Len(t, d1.Id, 26) 153 154 // Get a valid role 155 res2 := <-ss.Role().GetByName(d1.Name) 156 assert.Nil(t, res2.Err) 157 d2 := res1.Data.(*model.Role) 158 assert.Equal(t, d1.Id, d2.Id) 159 assert.Equal(t, r1.Name, d2.Name) 160 assert.Equal(t, r1.DisplayName, d2.DisplayName) 161 assert.Equal(t, r1.Description, d2.Description) 162 assert.Equal(t, r1.Permissions, d2.Permissions) 163 assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged) 164 165 // Get an invalid role 166 res3 := <-ss.Role().GetByName(model.NewId()) 167 assert.NotNil(t, res3.Err) 168 } 169 170 func testRoleStoreGetByNames(t *testing.T, ss store.Store) { 171 // Save some roles to test with. 172 r1 := &model.Role{ 173 Name: model.NewId(), 174 DisplayName: model.NewId(), 175 Description: model.NewId(), 176 Permissions: []string{ 177 "invite_user", 178 "create_public_channel", 179 "add_user_to_team", 180 }, 181 SchemeManaged: false, 182 } 183 r2 := &model.Role{ 184 Name: model.NewId(), 185 DisplayName: model.NewId(), 186 Description: model.NewId(), 187 Permissions: []string{ 188 "read_channel", 189 "create_public_channel", 190 "add_user_to_team", 191 }, 192 SchemeManaged: false, 193 } 194 r3 := &model.Role{ 195 Name: model.NewId(), 196 DisplayName: model.NewId(), 197 Description: model.NewId(), 198 Permissions: []string{ 199 "invite_user", 200 "delete_private_channel", 201 "add_user_to_team", 202 }, 203 SchemeManaged: false, 204 } 205 206 res1 := <-ss.Role().Save(r1) 207 assert.Nil(t, res1.Err) 208 d1 := res1.Data.(*model.Role) 209 assert.Len(t, d1.Id, 26) 210 211 res2 := <-ss.Role().Save(r2) 212 assert.Nil(t, res2.Err) 213 d2 := res2.Data.(*model.Role) 214 assert.Len(t, d2.Id, 26) 215 216 res3 := <-ss.Role().Save(r3) 217 assert.Nil(t, res3.Err) 218 d3 := res3.Data.(*model.Role) 219 assert.Len(t, d3.Id, 26) 220 221 // Get two valid roles. 222 n4 := []string{r1.Name, r2.Name} 223 res4 := <-ss.Role().GetByNames(n4) 224 assert.Nil(t, res4.Err) 225 roles4 := res4.Data.([]*model.Role) 226 assert.Len(t, roles4, 2) 227 assert.Contains(t, roles4, d1) 228 assert.Contains(t, roles4, d2) 229 assert.NotContains(t, roles4, d3) 230 231 // Get two invalid roles. 232 n5 := []string{model.NewId(), model.NewId()} 233 res5 := <-ss.Role().GetByNames(n5) 234 assert.Nil(t, res5.Err) 235 roles5 := res5.Data.([]*model.Role) 236 assert.Len(t, roles5, 0) 237 238 // Get one valid one and one invalid one. 239 n6 := []string{r1.Name, model.NewId()} 240 res6 := <-ss.Role().GetByNames(n6) 241 assert.Nil(t, res6.Err) 242 roles6 := res6.Data.([]*model.Role) 243 assert.Len(t, roles6, 1) 244 assert.Contains(t, roles6, d1) 245 assert.NotContains(t, roles6, d2) 246 assert.NotContains(t, roles6, d3) 247 } 248 249 func testRoleStoreGetAll(t *testing.T, ss store.Store) { 250 prev := <-ss.Role().GetAll() 251 require.Nil(t, prev.Err) 252 prevCount := len(prev.Data.([]*model.Role)) 253 254 // Save a role to test with. 255 r1 := &model.Role{ 256 Name: model.NewId(), 257 DisplayName: model.NewId(), 258 Description: model.NewId(), 259 Permissions: []string{ 260 "invite_user", 261 "create_public_channel", 262 "add_user_to_team", 263 }, 264 SchemeManaged: false, 265 } 266 267 res1 := <-ss.Role().Save(r1) 268 require.Nil(t, res1.Err) 269 270 r2 := &model.Role{ 271 Name: model.NewId(), 272 DisplayName: model.NewId(), 273 Description: model.NewId(), 274 Permissions: []string{ 275 "invite_user", 276 "create_public_channel", 277 "add_user_to_team", 278 }, 279 SchemeManaged: false, 280 } 281 res2 := <-ss.Role().Save(r2) 282 require.Nil(t, res2.Err) 283 284 res3 := <-ss.Role().GetAll() 285 require.Nil(t, res3.Err) 286 data := res3.Data.([]*model.Role) 287 assert.Len(t, data, prevCount+2) 288 } 289 290 func testRoleStorePermanentDeleteAll(t *testing.T, ss store.Store) { 291 r1 := &model.Role{ 292 Name: model.NewId(), 293 DisplayName: model.NewId(), 294 Description: model.NewId(), 295 Permissions: []string{ 296 "invite_user", 297 "create_public_channel", 298 "add_user_to_team", 299 }, 300 SchemeManaged: false, 301 } 302 r2 := &model.Role{ 303 Name: model.NewId(), 304 DisplayName: model.NewId(), 305 Description: model.NewId(), 306 Permissions: []string{ 307 "read_channel", 308 "create_public_channel", 309 "add_user_to_team", 310 }, 311 SchemeManaged: false, 312 } 313 314 store.Must(ss.Role().Save(r1)) 315 store.Must(ss.Role().Save(r2)) 316 317 res1 := <-ss.Role().GetByNames([]string{r1.Name, r2.Name}) 318 assert.Nil(t, res1.Err) 319 assert.Len(t, res1.Data.([]*model.Role), 2) 320 321 res2 := <-ss.Role().PermanentDeleteAll() 322 assert.Nil(t, res2.Err) 323 324 res3 := <-ss.Role().GetByNames([]string{r1.Name, r2.Name}) 325 assert.Nil(t, res3.Err) 326 assert.Len(t, res3.Data.([]*model.Role), 0) 327 }