github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/store/storetest/role_store_test.go (about)

     1  package storetest
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/masterhung0112/hk_server/v5/model"
     8  	"github.com/stretchr/testify/suite"
     9  )
    10  
    11  // type RoleStoreTestSuite struct {
    12  // 	suite.Suite
    13  // 	StoreTestSuite
    14  // }
    15  
    16  func TestRoleStoreTestSuite(t *testing.T) {
    17  	StoreTestSuiteWithSqlSupplier(t, &RoleStoreTestSuite{}, func(t *testing.T, testSuite StoreTestBaseSuite) {
    18  		suite.Run(t, testSuite)
    19  	})
    20  }
    21  
    22  func (s *RoleStoreTestSuite) TestRoleStoreSave() {
    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  	d1, err := s.Store().Role().Save(r1)
    37  	if s.Nil(err) && s.NotNil(d1) {
    38  		s.Len(d1.Id, 26)
    39  		s.Equal(r1.Name, d1.Name)
    40  		s.Equal(r1.DisplayName, d1.DisplayName)
    41  		s.Equal(r1.Description, d1.Description)
    42  		s.Equal(r1.Permissions, d1.Permissions)
    43  		s.Equal(r1.SchemeManaged, d1.SchemeManaged)
    44  	}
    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  	d2, err := s.Store().Role().Save(d1)
    54  	if s.Nil(err) && s.NotNil(d2) {
    55  		s.Len(d2.Id, 26)
    56  		s.Equal(r1.Name, d2.Name)
    57  		s.Equal(r1.DisplayName, d2.DisplayName)
    58  		s.Equal(r1.Description, d2.Description)
    59  		s.Equal(d1.Permissions, d2.Permissions)
    60  		s.Equal(r1.SchemeManaged, d2.SchemeManaged)
    61  	}
    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  	_, err = s.Store().Role().Save(r3)
    78  	s.NotNil(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  	_, err = s.Store().Role().Save(r4)
    94  	s.NotNil(err)
    95  
    96  	r5 := &model.Role{
    97  		Name:        model.NewId(),
    98  		DisplayName: model.NewId(),
    99  		Description: model.NewId(),
   100  		Permissions: []string{
   101  			"invalid_permission",
   102  		},
   103  		SchemeManaged: false,
   104  	}
   105  
   106  	_, err = s.Store().Role().Save(r5)
   107  	if s.NotNil(err) {
   108  		s.Contains(err.Error(), "invalid_permission")
   109  	}
   110  }
   111  
   112  func (s *RoleStoreTestSuite) TestRoleStoreGetAll() {
   113  	prev, err := s.Store().Role().GetAll()
   114  	if s.Nil(err) {
   115  		prevCount := len(prev)
   116  
   117  		// Save a role to test with.
   118  		r1 := &model.Role{
   119  			Name:        model.NewId(),
   120  			DisplayName: model.NewId(),
   121  			Description: model.NewId(),
   122  			Permissions: []string{
   123  				"invite_user",
   124  				"create_public_channel",
   125  				"add_user_to_team",
   126  			},
   127  			SchemeManaged: false,
   128  		}
   129  
   130  		_, err = s.Store().Role().Save(r1)
   131  		s.Nil(err)
   132  
   133  		r2 := &model.Role{
   134  			Name:        model.NewId(),
   135  			DisplayName: model.NewId(),
   136  			Description: model.NewId(),
   137  			Permissions: []string{
   138  				"invite_user",
   139  				"create_public_channel",
   140  				"add_user_to_team",
   141  			},
   142  			SchemeManaged: false,
   143  		}
   144  		_, err = s.Store().Role().Save(r2)
   145  		s.Nil(err)
   146  
   147  		data, err := s.Store().Role().GetAll()
   148  		s.Nil(err)
   149  		s.Len(data, prevCount+2)
   150  	}
   151  }
   152  
   153  func (s *RoleStoreTestSuite) TestRoleStoreGetByName() {
   154  	// Save a role to test with.
   155  	r1 := &model.Role{
   156  		Name:        model.NewId(),
   157  		DisplayName: model.NewId(),
   158  		Description: model.NewId(),
   159  		Permissions: []string{
   160  			"invite_user",
   161  			"create_public_channel",
   162  			"add_user_to_team",
   163  		},
   164  		SchemeManaged: false,
   165  	}
   166  
   167  	d1, err := s.Store().Role().Save(r1)
   168  	s.Require().Nil(err)
   169  	s.Require().Len(d1.Id, 26)
   170  
   171  	// Get a valid role
   172  	d2, err := s.Store().Role().GetByName(context.Background(), d1.Name)
   173  	s.Require().Nil(err)
   174  	s.Require().Equal(d1.Id, d2.Id)
   175  	s.Require().Equal(r1.Name, d2.Name)
   176  	s.Require().Equal(r1.DisplayName, d2.DisplayName)
   177  	s.Require().Equal(r1.Description, d2.Description)
   178  	s.Require().Equal(r1.Permissions, d2.Permissions)
   179  	s.Require().Equal(r1.SchemeManaged, d2.SchemeManaged)
   180  
   181  	// Get an invalid role
   182  	_, err = s.Store().Role().GetByName(context.Background(), model.NewId())
   183  	s.Require().NotNil(err)
   184  }