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