2019-11-29 12:59:40 +01:00
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
2018-05-03 14:00:26 +01:00
package api4
import (
2021-04-29 15:19:57 -04:00
"context"
2018-05-03 14:00:26 +01:00
"strings"
"testing"
"github.com/stretchr/testify/assert"
2019-04-30 01:19:06 -07:00
"github.com/stretchr/testify/require"
2018-05-03 14:00:26 +01:00
2023-06-11 10:54:35 +05:30
"github.com/mattermost/mattermost/server/public/model"
2018-05-03 14:00:26 +01:00
)
func TestCreateScheme ( t * testing . T ) {
2020-07-22 13:50:33 +05:30
th := Setup ( t )
2018-05-03 14:00:26 +01:00
defer th . TearDown ( )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2018-05-03 14:00:26 +01:00
// Basic test of creating a team scheme.
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
s1 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2018-05-17 11:37:00 -04:00
assert . Equal ( t , s1 . DisplayName , scheme1 . DisplayName )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s1 . Name , scheme1 . Name )
assert . Equal ( t , s1 . Description , scheme1 . Description )
assert . NotZero ( t , s1 . CreateAt )
assert . Equal ( t , s1 . CreateAt , s1 . UpdateAt )
assert . Zero ( t , s1 . DeleteAt )
assert . Equal ( t , s1 . Scope , scheme1 . Scope )
assert . NotZero ( t , len ( s1 . DefaultTeamAdminRole ) )
assert . NotZero ( t , len ( s1 . DefaultTeamUserRole ) )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , len ( s1 . DefaultTeamGuestRole ) )
2018-05-03 14:00:26 +01:00
assert . NotZero ( t , len ( s1 . DefaultChannelAdminRole ) )
assert . NotZero ( t , len ( s1 . DefaultChannelUserRole ) )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , len ( s1 . DefaultChannelGuestRole ) )
2018-05-03 14:00:26 +01:00
// Check the default roles have been created.
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Basic Test of a Channel scheme.
scheme2 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeChannel ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
s2 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme2 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2018-05-17 11:37:00 -04:00
assert . Equal ( t , s2 . DisplayName , scheme2 . DisplayName )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s2 . Name , scheme2 . Name )
assert . Equal ( t , s2 . Description , scheme2 . Description )
assert . NotZero ( t , s2 . CreateAt )
assert . Equal ( t , s2 . CreateAt , s2 . UpdateAt )
assert . Zero ( t , s2 . DeleteAt )
assert . Equal ( t , s2 . Scope , scheme2 . Scope )
assert . Zero ( t , len ( s2 . DefaultTeamAdminRole ) )
assert . Zero ( t , len ( s2 . DefaultTeamUserRole ) )
2019-04-30 20:36:21 +02:00
assert . Zero ( t , len ( s2 . DefaultTeamGuestRole ) )
2018-05-03 14:00:26 +01:00
assert . NotZero ( t , len ( s2 . DefaultChannelAdminRole ) )
assert . NotZero ( t , len ( s2 . DefaultChannelUserRole ) )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , len ( s2 . DefaultChannelGuestRole ) )
2018-05-03 14:00:26 +01:00
// Check the default roles have been created.
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s2 . DefaultChannelAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s2 . DefaultChannelUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s2 . DefaultChannelGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Try and create a scheme with an invalid scope.
scheme3 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
Scope : model . NewId ( ) ,
}
2023-06-06 23:29:29 +02:00
_ , r3 , _ := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme3 )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , r3 )
2018-05-17 11:37:00 -04:00
// Try and create a scheme with an invalid display name.
2018-05-03 14:00:26 +01:00
scheme4 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : strings . Repeat ( model . NewId ( ) , 100 ) ,
Name : "Name" ,
2018-05-03 14:00:26 +01:00
Description : model . NewId ( ) ,
Scope : model . NewId ( ) ,
}
2023-06-06 23:29:29 +02:00
_ , r4 , _ := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme4 )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , r4 )
2018-05-17 11:37:00 -04:00
// Try and create a scheme with an invalid name.
scheme8 := & model . Scheme {
DisplayName : "DisplayName" ,
Name : strings . Repeat ( model . NewId ( ) , 100 ) ,
Description : model . NewId ( ) ,
Scope : model . NewId ( ) ,
}
2023-06-06 23:29:29 +02:00
_ , r8 , _ := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme8 )
2018-05-17 11:37:00 -04:00
CheckBadRequestStatus ( t , r8 )
2018-05-03 14:00:26 +01:00
// Try and create a scheme without the appropriate permissions.
scheme5 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
_ , r5 , err := th . Client . CreateScheme ( context . Background ( ) , scheme5 )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckForbiddenStatus ( t , r5 )
// Try and create a scheme without a license.
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( nil )
2018-05-03 14:00:26 +01:00
scheme6 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
_ , r6 , _ := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme6 )
2018-05-03 14:00:26 +01:00
CheckNotImplementedStatus ( t , r6 )
2018-05-14 15:59:04 +01:00
2022-11-28 11:19:58 -05:00
// Create scheme with a Professional SKU license but no explicit 'custom_permissions_schemes' license feature.
lic := & model . License {
Features : & model . Features {
CustomPermissionsSchemes : model . NewBool ( false ) ,
} ,
Customer : & model . Customer {
Name : "TestName" ,
Email : "test@example.com" ,
} ,
SkuName : "SKU NAME" ,
SkuShortName : model . LicenseShortSkuProfessional ,
StartsAt : model . GetMillis ( ) - 1000 ,
ExpiresAt : model . GetMillis ( ) + 100000 ,
}
th . App . Srv ( ) . SetLicense ( lic )
scheme6b := & model . Scheme {
DisplayName : model . NewId ( ) ,
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
Scope : model . SchemeScopeTeam ,
}
2023-06-06 23:29:29 +02:00
_ , resp , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme6b )
2022-11-28 11:19:58 -05:00
require . NoError ( t , err )
CheckCreatedStatus ( t , resp )
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( false )
2018-05-14 15:59:04 +01:00
th . LoginSystemAdmin ( )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-14 15:59:04 +01:00
scheme7 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-14 15:59:04 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-14 15:59:04 +01:00
}
2023-06-06 23:29:29 +02:00
_ , r7 , _ := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme7 )
2018-05-17 12:48:18 +01:00
CheckNotImplementedStatus ( t , r7 )
2018-05-03 14:00:26 +01:00
}
func TestGetScheme ( t * testing . T ) {
2020-02-10 19:31:41 +01:00
th := Setup ( t ) . InitBasic ( )
2018-05-03 14:00:26 +01:00
defer th . TearDown ( )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
// Basic test of creating a team scheme.
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2023-06-06 23:29:29 +02:00
s1 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2018-05-17 11:37:00 -04:00
assert . Equal ( t , s1 . DisplayName , scheme1 . DisplayName )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s1 . Name , scheme1 . Name )
assert . Equal ( t , s1 . Description , scheme1 . Description )
assert . NotZero ( t , s1 . CreateAt )
assert . Equal ( t , s1 . CreateAt , s1 . UpdateAt )
assert . Zero ( t , s1 . DeleteAt )
assert . Equal ( t , s1 . Scope , scheme1 . Scope )
assert . NotZero ( t , len ( s1 . DefaultTeamAdminRole ) )
assert . NotZero ( t , len ( s1 . DefaultTeamUserRole ) )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , len ( s1 . DefaultTeamGuestRole ) )
2018-05-03 14:00:26 +01:00
assert . NotZero ( t , len ( s1 . DefaultChannelAdminRole ) )
assert . NotZero ( t , len ( s1 . DefaultChannelUserRole ) )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , len ( s1 . DefaultChannelGuestRole ) )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
s2 , _ , err := th . SystemAdminClient . GetScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s1 , s2 )
2023-06-06 23:29:29 +02:00
_ , r3 , _ := th . SystemAdminClient . GetScheme ( context . Background ( ) , model . NewId ( ) )
2018-05-03 14:00:26 +01:00
CheckNotFoundStatus ( t , r3 )
2023-06-06 23:29:29 +02:00
_ , r4 , _ := th . SystemAdminClient . GetScheme ( context . Background ( ) , "12345" )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , r4 )
2023-06-06 23:29:29 +02:00
th . SystemAdminClient . Logout ( context . Background ( ) )
_ , r5 , _ := th . SystemAdminClient . GetScheme ( context . Background ( ) , s1 . Id )
2018-05-03 14:00:26 +01:00
CheckUnauthorizedStatus ( t , r5 )
2023-06-06 23:29:29 +02:00
th . SystemAdminClient . Login ( context . Background ( ) , th . SystemAdminUser . Username , th . SystemAdminUser . Password )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( nil )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . GetScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
_ , r7 , err := th . Client . GetScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckForbiddenStatus ( t , r7 )
2018-05-17 12:48:18 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( false )
2018-05-17 12:48:18 +01:00
2023-06-06 23:29:29 +02:00
_ , r8 , _ := th . SystemAdminClient . GetScheme ( context . Background ( ) , s1 . Id )
2018-05-17 12:48:18 +01:00
CheckNotImplementedStatus ( t , r8 )
2018-05-03 14:00:26 +01:00
}
func TestGetSchemes ( t * testing . T ) {
2020-02-10 19:31:41 +01:00
th := Setup ( t ) . InitBasic ( )
2018-05-03 14:00:26 +01:00
defer th . TearDown ( )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
scheme2 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeChannel ,
2018-05-03 14:00:26 +01:00
}
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2023-06-06 23:29:29 +02:00
_ , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme2 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
l3 , _ , err := th . SystemAdminClient . GetSchemes ( context . Background ( ) , "" , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . NotZero ( t , len ( l3 ) )
2023-06-06 23:29:29 +02:00
l4 , _ , err := th . SystemAdminClient . GetSchemes ( context . Background ( ) , "team" , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
for _ , s := range l4 {
assert . Equal ( t , "team" , s . Scope )
}
2023-06-06 23:29:29 +02:00
l5 , _ , err := th . SystemAdminClient . GetSchemes ( context . Background ( ) , "channel" , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
for _ , s := range l5 {
assert . Equal ( t , "channel" , s . Scope )
}
2023-06-06 23:29:29 +02:00
_ , r6 , _ := th . SystemAdminClient . GetSchemes ( context . Background ( ) , "asdf" , 0 , 100 )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , r6 )
2023-06-06 23:29:29 +02:00
th . Client . Logout ( context . Background ( ) )
_ , r7 , _ := th . Client . GetSchemes ( context . Background ( ) , "" , 0 , 100 )
2018-05-03 14:00:26 +01:00
CheckUnauthorizedStatus ( t , r7 )
2023-06-06 23:29:29 +02:00
th . Client . Login ( context . Background ( ) , th . BasicUser . Username , th . BasicUser . Password )
_ , r8 , err := th . Client . GetSchemes ( context . Background ( ) , "" , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckForbiddenStatus ( t , r8 )
2018-05-17 12:48:18 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( false )
2018-05-17 12:48:18 +01:00
2023-06-06 23:29:29 +02:00
_ , r9 , _ := th . SystemAdminClient . GetSchemes ( context . Background ( ) , "" , 0 , 100 )
2018-05-17 12:48:18 +01:00
CheckNotImplementedStatus ( t , r9 )
2018-05-03 14:00:26 +01:00
}
func TestGetTeamsForScheme ( t * testing . T ) {
2020-02-10 19:31:41 +01:00
th := Setup ( t ) . InitBasic ( )
2018-05-03 14:00:26 +01:00
defer th . TearDown ( )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2018-05-03 14:00:26 +01:00
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
scheme1 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
team1 := & model . Team {
Name : GenerateTestUsername ( ) ,
DisplayName : "A Test Team" ,
2021-07-12 20:05:36 +02:00
Type : model . TeamOpen ,
2018-05-03 14:00:26 +01:00
}
2022-10-06 11:04:21 +03:00
team1 , err = th . App . Srv ( ) . Store ( ) . Team ( ) . Save ( team1 )
2021-02-17 09:52:18 +01:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
l2 , _ , err := th . SystemAdminClient . GetTeamsForScheme ( context . Background ( ) , scheme1 . Id , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Zero ( t , len ( l2 ) )
team1 . SchemeId = & scheme1 . Id
2022-10-06 11:04:21 +03:00
team1 , err = th . App . Srv ( ) . Store ( ) . Team ( ) . Update ( team1 )
2021-02-17 09:52:18 +01:00
assert . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
l3 , _ , err := th . SystemAdminClient . GetTeamsForScheme ( context . Background ( ) , scheme1 . Id , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Len ( t , l3 , 1 )
assert . Equal ( t , team1 . Id , l3 [ 0 ] . Id )
team2 := & model . Team {
Name : GenerateTestUsername ( ) ,
DisplayName : "B Test Team" ,
2021-07-12 20:05:36 +02:00
Type : model . TeamOpen ,
2018-05-03 14:00:26 +01:00
SchemeId : & scheme1 . Id ,
}
2022-10-06 11:04:21 +03:00
team2 , err = th . App . Srv ( ) . Store ( ) . Team ( ) . Save ( team2 )
2021-02-17 09:52:18 +01:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
l4 , _ , err := th . SystemAdminClient . GetTeamsForScheme ( context . Background ( ) , scheme1 . Id , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Len ( t , l4 , 2 )
assert . Equal ( t , team1 . Id , l4 [ 0 ] . Id )
assert . Equal ( t , team2 . Id , l4 [ 1 ] . Id )
2023-06-06 23:29:29 +02:00
l5 , _ , err := th . SystemAdminClient . GetTeamsForScheme ( context . Background ( ) , scheme1 . Id , 1 , 1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Len ( t , l5 , 1 )
assert . Equal ( t , team2 . Id , l5 [ 0 ] . Id )
// Check various error cases.
2023-06-06 23:29:29 +02:00
_ , ri1 , _ := th . SystemAdminClient . GetTeamsForScheme ( context . Background ( ) , model . NewId ( ) , 0 , 100 )
2018-05-03 14:00:26 +01:00
CheckNotFoundStatus ( t , ri1 )
2023-06-06 23:29:29 +02:00
_ , ri2 , _ := th . SystemAdminClient . GetTeamsForScheme ( context . Background ( ) , "" , 0 , 100 )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , ri2 )
2023-06-06 23:29:29 +02:00
th . Client . Logout ( context . Background ( ) )
_ , ri3 , _ := th . Client . GetTeamsForScheme ( context . Background ( ) , model . NewId ( ) , 0 , 100 )
2018-05-03 14:00:26 +01:00
CheckUnauthorizedStatus ( t , ri3 )
2023-06-06 23:29:29 +02:00
th . Client . Login ( context . Background ( ) , th . BasicUser . Username , th . BasicUser . Password )
_ , ri4 , err := th . Client . GetTeamsForScheme ( context . Background ( ) , model . NewId ( ) , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckForbiddenStatus ( t , ri4 )
scheme2 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeChannel ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
scheme2 , _ , err = th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme2 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
_ , ri5 , _ := th . SystemAdminClient . GetTeamsForScheme ( context . Background ( ) , scheme2 . Id , 0 , 100 )
2018-05-17 12:48:18 +01:00
CheckBadRequestStatus ( t , ri5 )
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( false )
2018-05-14 15:59:04 +01:00
2023-06-06 23:29:29 +02:00
_ , ri6 , _ := th . SystemAdminClient . GetTeamsForScheme ( context . Background ( ) , scheme1 . Id , 0 , 100 )
2018-05-17 12:48:18 +01:00
CheckNotImplementedStatus ( t , ri6 )
2018-05-03 14:00:26 +01:00
}
func TestGetChannelsForScheme ( t * testing . T ) {
2020-02-10 19:31:41 +01:00
th := Setup ( t ) . InitBasic ( )
2018-05-03 14:00:26 +01:00
defer th . TearDown ( )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2018-05-03 14:00:26 +01:00
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeChannel ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
scheme1 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
channel1 := & model . Channel {
TeamId : model . NewId ( ) ,
DisplayName : "A Name" ,
Name : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Type : model . ChannelTypeOpen ,
2018-05-03 14:00:26 +01:00
}
2022-10-06 11:04:21 +03:00
channel1 , errCh := th . App . Srv ( ) . Store ( ) . Channel ( ) . Save ( channel1 , 1000000 )
2021-02-17 09:52:18 +01:00
assert . NoError ( t , errCh )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
l2 , _ , err := th . SystemAdminClient . GetChannelsForScheme ( context . Background ( ) , scheme1 . Id , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Zero ( t , len ( l2 ) )
channel1 . SchemeId = & scheme1 . Id
2023-12-04 18:34:57 +01:00
channel1 , err = th . App . Srv ( ) . Store ( ) . Channel ( ) . Update ( th . Context , channel1 )
2021-02-17 09:52:18 +01:00
assert . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
l3 , _ , err := th . SystemAdminClient . GetChannelsForScheme ( context . Background ( ) , scheme1 . Id , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Len ( t , l3 , 1 )
assert . Equal ( t , channel1 . Id , l3 [ 0 ] . Id )
channel2 := & model . Channel {
TeamId : model . NewId ( ) ,
DisplayName : "B Name" ,
Name : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Type : model . ChannelTypeOpen ,
2018-05-03 14:00:26 +01:00
SchemeId : & scheme1 . Id ,
}
2022-10-06 11:04:21 +03:00
channel2 , err = th . App . Srv ( ) . Store ( ) . Channel ( ) . Save ( channel2 , 1000000 )
2021-08-13 13:12:16 +02:00
assert . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
l4 , _ , err := th . SystemAdminClient . GetChannelsForScheme ( context . Background ( ) , scheme1 . Id , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Len ( t , l4 , 2 )
assert . Equal ( t , channel1 . Id , l4 [ 0 ] . Id )
assert . Equal ( t , channel2 . Id , l4 [ 1 ] . Id )
2023-06-06 23:29:29 +02:00
l5 , _ , err := th . SystemAdminClient . GetChannelsForScheme ( context . Background ( ) , scheme1 . Id , 1 , 1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Len ( t , l5 , 1 )
assert . Equal ( t , channel2 . Id , l5 [ 0 ] . Id )
// Check various error cases.
2023-06-06 23:29:29 +02:00
_ , ri1 , _ := th . SystemAdminClient . GetChannelsForScheme ( context . Background ( ) , model . NewId ( ) , 0 , 100 )
2018-05-03 14:00:26 +01:00
CheckNotFoundStatus ( t , ri1 )
2023-06-06 23:29:29 +02:00
_ , ri2 , _ := th . SystemAdminClient . GetChannelsForScheme ( context . Background ( ) , "" , 0 , 100 )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , ri2 )
2023-06-06 23:29:29 +02:00
th . Client . Logout ( context . Background ( ) )
_ , ri3 , _ := th . Client . GetChannelsForScheme ( context . Background ( ) , model . NewId ( ) , 0 , 100 )
2018-05-03 14:00:26 +01:00
CheckUnauthorizedStatus ( t , ri3 )
2023-06-06 23:29:29 +02:00
th . Client . Login ( context . Background ( ) , th . BasicUser . Username , th . BasicUser . Password )
_ , ri4 , err := th . Client . GetChannelsForScheme ( context . Background ( ) , model . NewId ( ) , 0 , 100 )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckForbiddenStatus ( t , ri4 )
scheme2 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
scheme2 , _ , err = th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme2 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
_ , ri5 , _ := th . SystemAdminClient . GetChannelsForScheme ( context . Background ( ) , scheme2 . Id , 0 , 100 )
2018-05-17 12:48:18 +01:00
CheckBadRequestStatus ( t , ri5 )
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( false )
2018-05-14 15:59:04 +01:00
2023-06-06 23:29:29 +02:00
_ , ri6 , _ := th . SystemAdminClient . GetChannelsForScheme ( context . Background ( ) , scheme1 . Id , 0 , 100 )
2018-05-17 12:48:18 +01:00
CheckNotImplementedStatus ( t , ri6 )
2018-05-03 14:00:26 +01:00
}
func TestPatchScheme ( t * testing . T ) {
2020-07-22 13:50:33 +05:30
th := Setup ( t )
2018-05-03 14:00:26 +01:00
defer th . TearDown ( )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2018-05-03 14:00:26 +01:00
// Basic test of creating a team scheme.
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
s1 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2018-05-17 11:37:00 -04:00
assert . Equal ( t , s1 . DisplayName , scheme1 . DisplayName )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s1 . Name , scheme1 . Name )
assert . Equal ( t , s1 . Description , scheme1 . Description )
assert . NotZero ( t , s1 . CreateAt )
assert . Equal ( t , s1 . CreateAt , s1 . UpdateAt )
assert . Zero ( t , s1 . DeleteAt )
assert . Equal ( t , s1 . Scope , scheme1 . Scope )
assert . NotZero ( t , len ( s1 . DefaultTeamAdminRole ) )
assert . NotZero ( t , len ( s1 . DefaultTeamUserRole ) )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , len ( s1 . DefaultTeamGuestRole ) )
2018-05-03 14:00:26 +01:00
assert . NotZero ( t , len ( s1 . DefaultChannelAdminRole ) )
assert . NotZero ( t , len ( s1 . DefaultChannelUserRole ) )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , len ( s1 . DefaultChannelGuestRole ) )
2018-05-03 14:00:26 +01:00
2023-06-06 23:29:29 +02:00
s2 , _ , err := th . SystemAdminClient . GetScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s1 , s2 )
// Test with a valid patch.
schemePatch := & model . SchemePatch {
2018-05-17 11:37:00 -04:00
DisplayName : new ( string ) ,
2018-05-03 14:00:26 +01:00
Name : new ( string ) ,
Description : new ( string ) ,
}
2018-05-17 11:37:00 -04:00
* schemePatch . DisplayName = model . NewId ( )
2018-05-03 14:00:26 +01:00
* schemePatch . Name = model . NewId ( )
* schemePatch . Description = model . NewId ( )
2023-06-06 23:29:29 +02:00
s3 , _ , err := th . SystemAdminClient . PatchScheme ( context . Background ( ) , s2 . Id , schemePatch )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s3 . Id , s2 . Id )
2018-05-17 11:37:00 -04:00
assert . Equal ( t , s3 . DisplayName , * schemePatch . DisplayName )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s3 . Name , * schemePatch . Name )
assert . Equal ( t , s3 . Description , * schemePatch . Description )
2023-06-06 23:29:29 +02:00
s4 , _ , err := th . SystemAdminClient . GetScheme ( context . Background ( ) , s3 . Id )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s3 , s4 )
// Test with a partial patch.
* schemePatch . Name = model . NewId ( )
2018-05-17 11:37:00 -04:00
* schemePatch . DisplayName = model . NewId ( )
2018-05-03 14:00:26 +01:00
schemePatch . Description = nil
2023-06-06 23:29:29 +02:00
s5 , _ , err := th . SystemAdminClient . PatchScheme ( context . Background ( ) , s4 . Id , schemePatch )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s5 . Id , s4 . Id )
2018-05-17 11:37:00 -04:00
assert . Equal ( t , s5 . DisplayName , * schemePatch . DisplayName )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s5 . Name , * schemePatch . Name )
assert . Equal ( t , s5 . Description , s4 . Description )
2023-06-06 23:29:29 +02:00
s6 , _ , err := th . SystemAdminClient . GetScheme ( context . Background ( ) , s5 . Id )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Equal ( t , s5 , s6 )
// Test with invalid patch.
* schemePatch . Name = strings . Repeat ( model . NewId ( ) , 20 )
2023-06-06 23:29:29 +02:00
_ , r7 , _ := th . SystemAdminClient . PatchScheme ( context . Background ( ) , s6 . Id , schemePatch )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , r7 )
// Test with unknown ID.
* schemePatch . Name = model . NewId ( )
2023-06-06 23:29:29 +02:00
_ , r8 , _ := th . SystemAdminClient . PatchScheme ( context . Background ( ) , model . NewId ( ) , schemePatch )
2018-05-03 14:00:26 +01:00
CheckNotFoundStatus ( t , r8 )
// Test with invalid ID.
2023-06-06 23:29:29 +02:00
_ , r9 , _ := th . SystemAdminClient . PatchScheme ( context . Background ( ) , "12345" , schemePatch )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , r9 )
// Test without required permissions.
2023-06-06 23:29:29 +02:00
_ , r10 , err := th . Client . PatchScheme ( context . Background ( ) , s6 . Id , schemePatch )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckForbiddenStatus ( t , r10 )
// Test without license.
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( nil )
2023-06-06 23:29:29 +02:00
_ , r11 , _ := th . SystemAdminClient . PatchScheme ( context . Background ( ) , s6 . Id , schemePatch )
2018-05-03 14:00:26 +01:00
CheckNotImplementedStatus ( t , r11 )
2018-05-14 15:59:04 +01:00
2022-11-28 11:19:58 -05:00
// Patch scheme with a Professional SKU license but no explicit 'custom_permissions_schemes' license feature.
lic := & model . License {
Features : & model . Features {
CustomPermissionsSchemes : model . NewBool ( false ) ,
} ,
Customer : & model . Customer {
Name : "TestName" ,
Email : "test@example.com" ,
} ,
SkuName : "SKU NAME" ,
SkuShortName : model . LicenseShortSkuProfessional ,
StartsAt : model . GetMillis ( ) - 1000 ,
ExpiresAt : model . GetMillis ( ) + 100000 ,
}
th . App . Srv ( ) . SetLicense ( lic )
2023-06-06 23:29:29 +02:00
_ , _ , err = th . SystemAdminClient . PatchScheme ( context . Background ( ) , s6 . Id , schemePatch )
2022-11-28 11:19:58 -05:00
require . NoError ( t , err )
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( false )
2018-05-14 15:59:04 +01:00
th . LoginSystemAdmin ( )
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-14 15:59:04 +01:00
2023-06-06 23:29:29 +02:00
_ , r12 , _ := th . SystemAdminClient . PatchScheme ( context . Background ( ) , s6 . Id , schemePatch )
2018-05-17 12:48:18 +01:00
CheckNotImplementedStatus ( t , r12 )
2018-05-03 14:00:26 +01:00
}
func TestDeleteScheme ( t * testing . T ) {
2020-07-22 13:50:33 +05:30
th := Setup ( t )
2018-05-03 14:00:26 +01:00
defer th . TearDown ( )
t . Run ( "ValidTeamScheme" , func ( t * testing . T ) {
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2018-05-03 14:00:26 +01:00
// Create a team scheme.
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeTeam ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
s1 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Retrieve the roles and check they are not deleted.
2023-06-06 23:29:29 +02:00
role1 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role2 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role3 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role4 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role5 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role6 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Zero ( t , role1 . DeleteAt )
assert . Zero ( t , role2 . DeleteAt )
assert . Zero ( t , role3 . DeleteAt )
assert . Zero ( t , role4 . DeleteAt )
2019-04-30 20:36:21 +02:00
assert . Zero ( t , role5 . DeleteAt )
assert . Zero ( t , role6 . DeleteAt )
2018-05-03 14:00:26 +01:00
// Make sure this scheme is in use by a team.
2022-10-06 11:04:21 +03:00
team , err := th . App . Srv ( ) . Store ( ) . Team ( ) . Save ( & model . Team {
2020-02-13 09:36:21 +01:00
Name : "zz" + model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
DisplayName : model . NewId ( ) ,
Email : model . NewId ( ) + "@nowhere.com" ,
2021-07-12 20:05:36 +02:00
Type : model . TeamOpen ,
2018-05-03 14:00:26 +01:00
SchemeId : & s1 . Id ,
} )
2021-02-17 09:52:18 +01:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Delete the Scheme.
2023-06-06 23:29:29 +02:00
_ , err = th . SystemAdminClient . DeleteScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Check the roles were deleted.
2023-06-06 23:29:29 +02:00
role1 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role2 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role3 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role4 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role5 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultTeamGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role6 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . NotZero ( t , role1 . DeleteAt )
assert . NotZero ( t , role2 . DeleteAt )
assert . NotZero ( t , role3 . DeleteAt )
assert . NotZero ( t , role4 . DeleteAt )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , role5 . DeleteAt )
assert . NotZero ( t , role6 . DeleteAt )
2018-05-17 12:48:31 +01:00
// Check the team now uses the default scheme
2023-06-06 23:29:29 +02:00
c2 , _ , err := th . SystemAdminClient . GetTeam ( context . Background ( ) , team . Id , "" )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-17 12:48:31 +01:00
assert . Equal ( t , "" , * c2 . SchemeId )
2018-05-03 14:00:26 +01:00
} )
t . Run ( "ValidChannelScheme" , func ( t * testing . T ) {
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2018-05-03 14:00:26 +01:00
// Create a channel scheme.
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeChannel ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
s1 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Retrieve the roles and check they are not deleted.
2023-06-06 23:29:29 +02:00
role3 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role4 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role6 , _ , err := th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . Zero ( t , role3 . DeleteAt )
assert . Zero ( t , role4 . DeleteAt )
2019-04-30 20:36:21 +02:00
assert . Zero ( t , role6 . DeleteAt )
2018-05-03 14:00:26 +01:00
// Make sure this scheme is in use by a team.
2022-10-06 11:04:21 +03:00
channel , err := th . App . Srv ( ) . Store ( ) . Channel ( ) . Save ( & model . Channel {
2018-05-03 14:00:26 +01:00
TeamId : model . NewId ( ) ,
DisplayName : model . NewId ( ) ,
Name : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Type : model . ChannelTypeOpen ,
2018-05-03 14:00:26 +01:00
SchemeId : & s1 . Id ,
} , - 1 )
2021-02-17 09:52:18 +01:00
assert . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Delete the Scheme.
2023-06-06 23:29:29 +02:00
_ , err = th . SystemAdminClient . DeleteScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Check the roles were deleted.
2023-06-06 23:29:29 +02:00
role3 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelAdminRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role4 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelUserRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2023-06-06 23:29:29 +02:00
role6 , _ , err = th . SystemAdminClient . GetRoleByName ( context . Background ( ) , s1 . DefaultChannelGuestRole )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
assert . NotZero ( t , role3 . DeleteAt )
assert . NotZero ( t , role4 . DeleteAt )
2019-04-30 20:36:21 +02:00
assert . NotZero ( t , role6 . DeleteAt )
2018-05-17 12:48:31 +01:00
// Check the channel now uses the default scheme
2023-06-06 23:29:29 +02:00
c2 , _ , err := th . SystemAdminClient . GetChannelByName ( context . Background ( ) , channel . Name , channel . TeamId , "" )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-17 12:48:31 +01:00
assert . Equal ( t , "" , * c2 . SchemeId )
2018-05-03 14:00:26 +01:00
} )
t . Run ( "FailureCases" , func ( t * testing . T ) {
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-03 14:00:26 +01:00
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2018-05-03 14:00:26 +01:00
scheme1 := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : model . NewId ( ) ,
2018-05-03 14:00:26 +01:00
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
2021-07-12 20:05:36 +02:00
Scope : model . SchemeScopeChannel ,
2018-05-03 14:00:26 +01:00
}
2023-06-06 23:29:29 +02:00
s1 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme1 )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
2022-11-28 11:19:58 -05:00
scheme2 := & model . Scheme {
DisplayName : model . NewId ( ) ,
Name : model . NewId ( ) ,
Description : model . NewId ( ) ,
Scope : model . SchemeScopeChannel ,
}
2023-06-06 23:29:29 +02:00
s2 , _ , err := th . SystemAdminClient . CreateScheme ( context . Background ( ) , scheme2 )
2022-11-28 11:19:58 -05:00
require . NoError ( t , err )
2018-05-03 14:00:26 +01:00
// Test with unknown ID.
2023-06-06 23:29:29 +02:00
r2 , err := th . SystemAdminClient . DeleteScheme ( context . Background ( ) , model . NewId ( ) )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckNotFoundStatus ( t , r2 )
// Test with invalid ID.
2023-06-06 23:29:29 +02:00
r3 , err := th . SystemAdminClient . DeleteScheme ( context . Background ( ) , "12345" )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckBadRequestStatus ( t , r3 )
// Test without required permissions.
2023-06-06 23:29:29 +02:00
r4 , err := th . Client . DeleteScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckForbiddenStatus ( t , r4 )
// Test without license.
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( nil )
2023-06-06 23:29:29 +02:00
r5 , err := th . SystemAdminClient . DeleteScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-03 14:00:26 +01:00
CheckNotImplementedStatus ( t , r5 )
2018-05-14 15:59:04 +01:00
2022-11-28 11:19:58 -05:00
// Delete scheme with a Professional SKU license but no explicit 'custom_permissions_schemes' license feature.
lic := & model . License {
Features : & model . Features {
CustomPermissionsSchemes : model . NewBool ( false ) ,
} ,
Customer : & model . Customer {
Name : "TestName" ,
Email : "test@example.com" ,
} ,
SkuName : "SKU NAME" ,
SkuShortName : model . LicenseShortSkuProfessional ,
StartsAt : model . GetMillis ( ) - 1000 ,
ExpiresAt : model . GetMillis ( ) + 100000 ,
}
th . App . Srv ( ) . SetLicense ( lic )
2023-06-06 23:29:29 +02:00
_ , err = th . SystemAdminClient . DeleteScheme ( context . Background ( ) , s2 . Id )
2022-11-28 11:19:58 -05:00
require . NoError ( t , err )
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( false )
2018-05-14 15:59:04 +01:00
2020-06-12 13:43:50 +02:00
th . App . Srv ( ) . SetLicense ( model . NewTestLicense ( "custom_permissions_schemes" ) )
2018-05-14 15:59:04 +01:00
2023-06-06 23:29:29 +02:00
r6 , err := th . SystemAdminClient . DeleteScheme ( context . Background ( ) , s1 . Id )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2018-05-17 12:48:18 +01:00
CheckNotImplementedStatus ( t , r6 )
2018-05-03 14:00:26 +01:00
} )
}
2021-04-29 15:19:57 -04:00
func TestUpdateTeamSchemeWithTeamMembers ( t * testing . T ) {
th := Setup ( t ) . InitBasic ( )
defer th . TearDown ( )
t . Run ( "Correctly invalidates team member cache" , func ( t * testing . T ) {
th . App . SetPhase2PermissionsMigrationStatus ( true )
team := th . CreateTeam ( )
2021-08-13 13:12:16 +02:00
_ , _ , appErr := th . App . AddUserToTeam ( th . Context , team . Id , th . BasicUser . Id , th . SystemAdminUser . Id )
require . Nil ( t , appErr )
2021-04-29 15:19:57 -04:00
teamScheme := th . SetupTeamScheme ( )
2021-08-13 13:12:16 +02:00
teamUserRole , appErr := th . App . GetRoleByName ( context . Background ( ) , teamScheme . DefaultTeamUserRole )
require . Nil ( t , appErr )
2021-04-29 15:19:57 -04:00
teamUserRole . Permissions = [ ] string { }
2021-08-13 13:12:16 +02:00
_ , appErr = th . App . UpdateRole ( teamUserRole )
require . Nil ( t , appErr )
2021-04-29 15:19:57 -04:00
th . LoginBasic ( )
2023-06-06 23:29:29 +02:00
_ , _ , err := th . Client . CreateChannel ( context . Background ( ) , & model . Channel { DisplayName : "Test API Name" , Name : GenerateTestChannelName ( ) , Type : model . ChannelTypeOpen , TeamId : team . Id } )
2021-08-13 13:12:16 +02:00
require . NoError ( t , err )
2021-04-29 15:19:57 -04:00
team . SchemeId = & teamScheme . Id
2021-08-13 13:12:16 +02:00
team , appErr = th . App . UpdateTeamScheme ( team )
require . Nil ( t , appErr )
2021-04-29 15:19:57 -04:00
2023-06-06 23:29:29 +02:00
_ , _ , err = th . Client . CreateChannel ( context . Background ( ) , & model . Channel { DisplayName : "Test API Name" , Name : GenerateTestChannelName ( ) , Type : model . ChannelTypeOpen , TeamId : team . Id } )
2021-08-13 13:12:16 +02:00
require . Error ( t , err )
2021-04-29 15:19:57 -04:00
} )
}