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  }