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  }