github.com/gigforks/mattermost-server@v4.9.1-0.20180619094218-800d97fa55d0+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 "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 TestRoleStore(t *testing.T, ss store.Store) { 16 t.Run("Save", func(t *testing.T) { testRoleStoreSave(t, ss) }) 17 t.Run("Get", func(t *testing.T) { testRoleStoreGet(t, ss) }) 18 t.Run("GetByName", func(t *testing.T) { testRoleStoreGetByName(t, ss) }) 19 t.Run("GetNames", func(t *testing.T) { testRoleStoreGetByNames(t, ss) }) 20 t.Run("PermanentDeleteAll", func(t *testing.T) { testRoleStorePermanentDeleteAll(t, ss) }) 21 } 22 23 func testRoleStoreSave(t *testing.T, ss store.Store) { 24 // Save a new role. 25 r1 := &model.Role{ 26 Name: model.NewId(), 27 DisplayName: model.NewId(), 28 Description: model.NewId(), 29 Permissions: []string{ 30 "invite_user", 31 "create_public_channel", 32 "add_user_to_team", 33 }, 34 SchemeManaged: false, 35 } 36 37 res1 := <-ss.Role().Save(r1) 38 assert.Nil(t, res1.Err) 39 d1 := res1.Data.(*model.Role) 40 assert.Len(t, d1.Id, 26) 41 assert.Equal(t, r1.Name, d1.Name) 42 assert.Equal(t, r1.DisplayName, d1.DisplayName) 43 assert.Equal(t, r1.Description, d1.Description) 44 assert.Equal(t, r1.Permissions, d1.Permissions) 45 assert.Equal(t, r1.SchemeManaged, d1.SchemeManaged) 46 47 // Change the role permissions and update. 48 d1.Permissions = []string{ 49 "invite_user", 50 "add_user_to_team", 51 "delete_public_channel", 52 } 53 54 res2 := <-ss.Role().Save(d1) 55 assert.Nil(t, res2.Err) 56 d2 := res2.Data.(*model.Role) 57 assert.Len(t, d2.Id, 26) 58 assert.Equal(t, r1.Name, d2.Name) 59 assert.Equal(t, r1.DisplayName, d2.DisplayName) 60 assert.Equal(t, r1.Description, d2.Description) 61 assert.Equal(t, d1.Permissions, d2.Permissions) 62 assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged) 63 64 // Try saving one with an invalid ID set. 65 r3 := &model.Role{ 66 Id: model.NewId(), 67 Name: model.NewId(), 68 DisplayName: model.NewId(), 69 Description: model.NewId(), 70 Permissions: []string{ 71 "invite_user", 72 "create_public_channel", 73 "add_user_to_team", 74 }, 75 SchemeManaged: false, 76 } 77 78 res3 := <-ss.Role().Save(r3) 79 assert.NotNil(t, res3.Err) 80 81 // Try saving one with a duplicate "name" field. 82 r4 := &model.Role{ 83 Name: r1.Name, 84 DisplayName: model.NewId(), 85 Description: model.NewId(), 86 Permissions: []string{ 87 "invite_user", 88 "create_public_channel", 89 "add_user_to_team", 90 }, 91 SchemeManaged: false, 92 } 93 94 res4 := <-ss.Role().Save(r4) 95 assert.NotNil(t, res4.Err) 96 } 97 98 func testRoleStoreGet(t *testing.T, ss store.Store) { 99 // Save a role to test with. 100 r1 := &model.Role{ 101 Name: model.NewId(), 102 DisplayName: model.NewId(), 103 Description: model.NewId(), 104 Permissions: []string{ 105 "invite_user", 106 "create_public_channel", 107 "add_user_to_team", 108 }, 109 SchemeManaged: false, 110 } 111 112 res1 := <-ss.Role().Save(r1) 113 assert.Nil(t, res1.Err) 114 d1 := res1.Data.(*model.Role) 115 assert.Len(t, d1.Id, 26) 116 117 // Get a valid role 118 res2 := <-ss.Role().Get(d1.Id) 119 assert.Nil(t, res2.Err) 120 d2 := res1.Data.(*model.Role) 121 assert.Equal(t, d1.Id, d2.Id) 122 assert.Equal(t, r1.Name, d2.Name) 123 assert.Equal(t, r1.DisplayName, d2.DisplayName) 124 assert.Equal(t, r1.Description, d2.Description) 125 assert.Equal(t, r1.Permissions, d2.Permissions) 126 assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged) 127 128 // Get an invalid role 129 res3 := <-ss.Role().Get(model.NewId()) 130 assert.NotNil(t, res3.Err) 131 } 132 133 func testRoleStoreGetByName(t *testing.T, ss store.Store) { 134 // Save a role to test with. 135 r1 := &model.Role{ 136 Name: model.NewId(), 137 DisplayName: model.NewId(), 138 Description: model.NewId(), 139 Permissions: []string{ 140 "invite_user", 141 "create_public_channel", 142 "add_user_to_team", 143 }, 144 SchemeManaged: false, 145 } 146 147 res1 := <-ss.Role().Save(r1) 148 assert.Nil(t, res1.Err) 149 d1 := res1.Data.(*model.Role) 150 assert.Len(t, d1.Id, 26) 151 152 // Get a valid role 153 res2 := <-ss.Role().GetByName(d1.Name) 154 assert.Nil(t, res2.Err) 155 d2 := res1.Data.(*model.Role) 156 assert.Equal(t, d1.Id, d2.Id) 157 assert.Equal(t, r1.Name, d2.Name) 158 assert.Equal(t, r1.DisplayName, d2.DisplayName) 159 assert.Equal(t, r1.Description, d2.Description) 160 assert.Equal(t, r1.Permissions, d2.Permissions) 161 assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged) 162 163 // Get an invalid role 164 res3 := <-ss.Role().GetByName(model.NewId()) 165 assert.NotNil(t, res3.Err) 166 } 167 168 func testRoleStoreGetByNames(t *testing.T, ss store.Store) { 169 // Save some roles to test with. 170 r1 := &model.Role{ 171 Name: model.NewId(), 172 DisplayName: model.NewId(), 173 Description: model.NewId(), 174 Permissions: []string{ 175 "invite_user", 176 "create_public_channel", 177 "add_user_to_team", 178 }, 179 SchemeManaged: false, 180 } 181 r2 := &model.Role{ 182 Name: model.NewId(), 183 DisplayName: model.NewId(), 184 Description: model.NewId(), 185 Permissions: []string{ 186 "read_channel", 187 "create_public_channel", 188 "add_user_to_team", 189 }, 190 SchemeManaged: false, 191 } 192 r3 := &model.Role{ 193 Name: model.NewId(), 194 DisplayName: model.NewId(), 195 Description: model.NewId(), 196 Permissions: []string{ 197 "invite_user", 198 "delete_private_channel", 199 "add_user_to_team", 200 }, 201 SchemeManaged: false, 202 } 203 204 res1 := <-ss.Role().Save(r1) 205 assert.Nil(t, res1.Err) 206 d1 := res1.Data.(*model.Role) 207 assert.Len(t, d1.Id, 26) 208 209 res2 := <-ss.Role().Save(r2) 210 assert.Nil(t, res2.Err) 211 d2 := res2.Data.(*model.Role) 212 assert.Len(t, d2.Id, 26) 213 214 res3 := <-ss.Role().Save(r3) 215 assert.Nil(t, res3.Err) 216 d3 := res3.Data.(*model.Role) 217 assert.Len(t, d3.Id, 26) 218 219 // Get two valid roles. 220 n4 := []string{r1.Name, r2.Name} 221 res4 := <-ss.Role().GetByNames(n4) 222 assert.Nil(t, res4.Err) 223 roles4 := res4.Data.([]*model.Role) 224 assert.Len(t, roles4, 2) 225 assert.Contains(t, roles4, d1) 226 assert.Contains(t, roles4, d2) 227 assert.NotContains(t, roles4, d3) 228 229 // Get two invalid roles. 230 n5 := []string{model.NewId(), model.NewId()} 231 res5 := <-ss.Role().GetByNames(n5) 232 assert.Nil(t, res5.Err) 233 roles5 := res5.Data.([]*model.Role) 234 assert.Len(t, roles5, 0) 235 236 // Get one valid one and one invalid one. 237 n6 := []string{r1.Name, model.NewId()} 238 res6 := <-ss.Role().GetByNames(n6) 239 assert.Nil(t, res6.Err) 240 roles6 := res6.Data.([]*model.Role) 241 assert.Len(t, roles6, 1) 242 assert.Contains(t, roles6, d1) 243 assert.NotContains(t, roles6, d2) 244 assert.NotContains(t, roles6, d3) 245 } 246 247 func testRoleStorePermanentDeleteAll(t *testing.T, ss store.Store) { 248 r1 := &model.Role{ 249 Name: model.NewId(), 250 DisplayName: model.NewId(), 251 Description: model.NewId(), 252 Permissions: []string{ 253 "invite_user", 254 "create_public_channel", 255 "add_user_to_team", 256 }, 257 SchemeManaged: false, 258 } 259 r2 := &model.Role{ 260 Name: model.NewId(), 261 DisplayName: model.NewId(), 262 Description: model.NewId(), 263 Permissions: []string{ 264 "read_channel", 265 "create_public_channel", 266 "add_user_to_team", 267 }, 268 SchemeManaged: false, 269 } 270 271 store.Must(ss.Role().Save(r1)) 272 store.Must(ss.Role().Save(r2)) 273 274 res1 := <-ss.Role().GetByNames([]string{r1.Name, r2.Name}) 275 assert.Nil(t, res1.Err) 276 assert.Len(t, res1.Data.([]*model.Role), 2) 277 278 res2 := <-ss.Role().PermanentDeleteAll() 279 assert.Nil(t, res2.Err) 280 281 res3 := <-ss.Role().GetByNames([]string{r1.Name, r2.Name}) 282 assert.Nil(t, res3.Err) 283 assert.Len(t, res3.Data.([]*model.Role), 0) 284 }