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  }