2017-04-12 08:27:57 -04:00
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
2017-01-31 07:59:36 -05:00
// See License.txt for license information.
package api4
import (
2017-04-03 18:38:26 +02:00
"encoding/binary"
2017-03-24 18:13:27 +09:00
"fmt"
2017-01-31 07:59:36 -05:00
"net/http"
"strconv"
2017-04-03 18:38:26 +02:00
"strings"
2017-01-31 07:59:36 -05:00
"testing"
2017-07-14 17:06:59 -04:00
"encoding/base64"
2017-08-15 23:03:39 +08:00
2018-04-18 22:46:10 +02:00
"github.com/mattermost/mattermost-server/app"
2017-09-06 23:05:10 -07:00
"github.com/mattermost/mattermost-server/model"
2018-09-20 19:07:03 +02:00
"github.com/mattermost/mattermost-server/services/mailservice"
2017-09-06 23:05:10 -07:00
"github.com/mattermost/mattermost-server/utils"
2018-09-04 08:33:29 -04:00
"github.com/mattermost/mattermost-server/utils/testutils"
2018-03-01 20:11:44 +01:00
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2017-01-31 07:59:36 -05:00
)
func TestCreateTeam ( t * testing . T ) {
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-01-31 07:59:36 -05:00
Client := th . Client
team := & model . Team { Name : GenerateTestUsername ( ) , DisplayName : "Some Team" , Type : model . TEAM_OPEN }
rteam , resp := Client . CreateTeam ( team )
CheckNoError ( t , resp )
2017-03-31 09:56:20 -04:00
CheckCreatedStatus ( t , resp )
2017-01-31 07:59:36 -05:00
if rteam . Name != team . Name {
t . Fatal ( "names did not match" )
}
if rteam . DisplayName != team . DisplayName {
t . Fatal ( "display names did not match" )
}
if rteam . Type != team . Type {
t . Fatal ( "types did not match" )
}
_ , resp = Client . CreateTeam ( rteam )
CheckBadRequestStatus ( t , resp )
rteam . Id = ""
_ , resp = Client . CreateTeam ( rteam )
2017-01-31 09:31:53 -05:00
CheckErrorMessage ( t , resp , "store.sql_team.save.domain_exists.app_error" )
2017-01-31 07:59:36 -05:00
CheckBadRequestStatus ( t , resp )
rteam . Name = ""
_ , resp = Client . CreateTeam ( rteam )
2017-01-31 09:31:53 -05:00
CheckErrorMessage ( t , resp , "model.team.is_valid.characters.app_error" )
2017-01-31 07:59:36 -05:00
CheckBadRequestStatus ( t , resp )
if r , err := Client . DoApiPost ( "/teams" , "garbage" ) ; err == nil {
t . Fatal ( "should have errored" )
} else {
if r . StatusCode != http . StatusBadRequest {
t . Log ( "actual: " + strconv . Itoa ( r . StatusCode ) )
t . Log ( "expected: " + strconv . Itoa ( http . StatusBadRequest ) )
t . Fatal ( "wrong status code" )
}
}
Client . Logout ( )
_ , resp = Client . CreateTeam ( rteam )
CheckUnauthorizedStatus ( t , resp )
2018-02-06 15:34:08 +00:00
// Check the appropriate permissions are enforced.
defaultRolePermissions := th . SaveDefaultRolePermissions ( )
2017-01-31 07:59:36 -05:00
defer func ( ) {
2018-02-06 15:34:08 +00:00
th . RestoreDefaultRolePermissions ( defaultRolePermissions )
2017-01-31 07:59:36 -05:00
} ( )
2018-02-06 15:34:08 +00:00
th . RemovePermissionFromRole ( model . PERMISSION_CREATE_TEAM . Id , model . SYSTEM_USER_ROLE_ID )
th . AddPermissionToRole ( model . PERMISSION_CREATE_TEAM . Id , model . SYSTEM_ADMIN_ROLE_ID )
2017-01-31 07:59:36 -05:00
th . LoginBasic ( )
_ , resp = Client . CreateTeam ( team )
CheckForbiddenStatus ( t , resp )
}
2017-02-07 08:57:41 -08:00
2017-10-09 13:30:59 -04:00
func TestCreateTeamSanitization ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-09 13:30:59 -04:00
defer th . TearDown ( )
// Non-admin users can create a team, but they become a team admin by doing so
t . Run ( "team admin" , func ( t * testing . T ) {
team := & model . Team {
DisplayName : t . Name ( ) + "_1" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
}
rteam , resp := th . Client . CreateTeam ( team )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
} )
t . Run ( "system admin" , func ( t * testing . T ) {
team := & model . Team {
DisplayName : t . Name ( ) + "_2" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
}
rteam , resp := th . SystemAdminClient . CreateTeam ( team )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
} )
}
2017-02-07 08:57:41 -08:00
func TestGetTeam ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-07 08:57:41 -08:00
Client := th . Client
team := th . BasicTeam
rteam , resp := Client . GetTeam ( team . Id , "" )
CheckNoError ( t , resp )
if rteam . Id != team . Id {
t . Fatal ( "wrong team" )
}
_ , resp = Client . GetTeam ( "junk" , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeam ( "" , "" )
CheckNotFoundStatus ( t , resp )
_ , resp = Client . GetTeam ( model . NewId ( ) , "" )
CheckNotFoundStatus ( t , resp )
th . LoginTeamAdmin ( )
2018-01-17 12:38:37 -06:00
team2 := & model . Team { DisplayName : "Name" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_OPEN , AllowOpenInvite : false }
2017-02-07 08:57:41 -08:00
rteam2 , _ := Client . CreateTeam ( team2 )
2018-01-17 12:38:37 -06:00
team3 := & model . Team { DisplayName : "Name" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_INVITE , AllowOpenInvite : true }
2017-08-08 16:20:07 -04:00
rteam3 , _ := Client . CreateTeam ( team3 )
2017-02-07 08:57:41 -08:00
th . LoginBasic ( )
2017-08-08 16:20:07 -04:00
// AllowInviteOpen is false and team is open, and user is not on team
2017-02-07 08:57:41 -08:00
_ , resp = Client . GetTeam ( rteam2 . Id , "" )
CheckForbiddenStatus ( t , resp )
2017-08-08 16:20:07 -04:00
// AllowInviteOpen is true and team is invite, and user is not on team
_ , resp = Client . GetTeam ( rteam3 . Id , "" )
CheckForbiddenStatus ( t , resp )
2017-02-07 08:57:41 -08:00
Client . Logout ( )
_ , resp = Client . GetTeam ( team . Id , "" )
CheckUnauthorizedStatus ( t , resp )
_ , resp = th . SystemAdminClient . GetTeam ( rteam2 . Id , "" )
CheckNoError ( t , resp )
}
2017-10-09 13:30:59 -04:00
func TestGetTeamSanitization ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-09 13:30:59 -04:00
defer th . TearDown ( )
team , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_1" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
} )
CheckNoError ( t , resp )
t . Run ( "team user" , func ( t * testing . T ) {
th . LinkUserToTeam ( th . BasicUser2 , team )
client := th . CreateClient ( )
th . LoginBasic2WithClient ( client )
rteam , resp := client . GetTeam ( team . Id , "" )
CheckNoError ( t , resp )
if rteam . Email != "" {
t . Fatal ( "should've sanitized email" )
}
} )
t . Run ( "team admin" , func ( t * testing . T ) {
rteam , resp := th . Client . GetTeam ( team . Id , "" )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
} )
t . Run ( "system admin" , func ( t * testing . T ) {
rteam , resp := th . SystemAdminClient . GetTeam ( team . Id , "" )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
} )
}
2017-03-13 09:46:28 -04:00
func TestGetTeamUnread ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-03-13 09:46:28 -04:00
Client := th . Client
teamUnread , resp := Client . GetTeamUnread ( th . BasicTeam . Id , th . BasicUser . Id )
CheckNoError ( t , resp )
if teamUnread . TeamId != th . BasicTeam . Id {
t . Fatal ( "wrong team id returned for regular user call" )
}
_ , resp = Client . GetTeamUnread ( "junk" , th . BasicUser . Id )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamUnread ( th . BasicTeam . Id , "junk" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamUnread ( model . NewId ( ) , th . BasicUser . Id )
CheckForbiddenStatus ( t , resp )
_ , resp = Client . GetTeamUnread ( th . BasicTeam . Id , model . NewId ( ) )
CheckForbiddenStatus ( t , resp )
Client . Logout ( )
_ , resp = Client . GetTeamUnread ( th . BasicTeam . Id , th . BasicUser . Id )
CheckUnauthorizedStatus ( t , resp )
teamUnread , resp = th . SystemAdminClient . GetTeamUnread ( th . BasicTeam . Id , th . BasicUser . Id )
CheckNoError ( t , resp )
if teamUnread . TeamId != th . BasicTeam . Id {
t . Fatal ( "wrong team id returned" )
}
}
func TestUpdateTeam ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-03-13 09:46:28 -04:00
Client := th . Client
team := & model . Team { DisplayName : "Name" , Description : "Some description" , AllowOpenInvite : false , InviteId : "inviteid0" , Name : "z-z-" + model . NewId ( ) + "a" , Email : "success+" + model . NewId ( ) + "@simulator.amazonses.com" , Type : model . TEAM_OPEN }
team , _ = Client . CreateTeam ( team )
team . Description = "updated description"
uteam , resp := Client . UpdateTeam ( team )
CheckNoError ( t , resp )
if uteam . Description != "updated description" {
t . Fatal ( "Update failed" )
}
team . DisplayName = "Updated Name"
uteam , resp = Client . UpdateTeam ( team )
CheckNoError ( t , resp )
if uteam . DisplayName != "Updated Name" {
t . Fatal ( "Update failed" )
}
team . AllowOpenInvite = true
uteam , resp = Client . UpdateTeam ( team )
CheckNoError ( t , resp )
2017-10-30 11:57:24 -05:00
if ! uteam . AllowOpenInvite {
2017-03-13 09:46:28 -04:00
t . Fatal ( "Update failed" )
}
team . InviteId = "inviteid1"
uteam , resp = Client . UpdateTeam ( team )
CheckNoError ( t , resp )
if uteam . InviteId != "inviteid1" {
t . Fatal ( "Update failed" )
}
2017-10-09 13:30:59 -04:00
team . AllowedDomains = "domain"
uteam , resp = Client . UpdateTeam ( team )
CheckNoError ( t , resp )
if uteam . AllowedDomains != "domain" {
t . Fatal ( "Update failed" )
}
2017-03-13 09:46:28 -04:00
team . Name = "Updated name"
uteam , resp = Client . UpdateTeam ( team )
CheckNoError ( t , resp )
if uteam . Name == "Updated name" {
t . Fatal ( "Should not update name" )
}
team . Email = "test@domain.com"
uteam , resp = Client . UpdateTeam ( team )
CheckNoError ( t , resp )
if uteam . Email == "test@domain.com" {
t . Fatal ( "Should not update email" )
}
team . Type = model . TEAM_INVITE
uteam , resp = Client . UpdateTeam ( team )
CheckNoError ( t , resp )
if uteam . Type == model . TEAM_INVITE {
t . Fatal ( "Should not update type" )
}
originalTeamId := team . Id
team . Id = model . NewId ( )
2018-09-14 16:21:05 +01:00
r , _ := Client . DoApiPut ( Client . GetTeamRoute ( originalTeamId ) , team . ToJson ( ) )
assert . Equal ( t , http . StatusBadRequest , r . StatusCode )
2017-03-13 09:46:28 -04:00
if uteam . Id != originalTeamId {
t . Fatal ( "wrong team id" )
}
team . Id = "fake"
_ , resp = Client . UpdateTeam ( team )
CheckBadRequestStatus ( t , resp )
Client . Logout ( )
_ , resp = Client . UpdateTeam ( team )
CheckUnauthorizedStatus ( t , resp )
team . Id = originalTeamId
_ , resp = th . SystemAdminClient . UpdateTeam ( team )
CheckNoError ( t , resp )
}
2017-10-09 13:30:59 -04:00
func TestUpdateTeamSanitization ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-09 13:30:59 -04:00
defer th . TearDown ( )
team , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_1" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
} )
CheckNoError ( t , resp )
// Non-admin users cannot update the team
t . Run ( "team admin" , func ( t * testing . T ) {
rteam , resp := th . Client . UpdateTeam ( team )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email for admin" )
}
} )
t . Run ( "system admin" , func ( t * testing . T ) {
rteam , resp := th . SystemAdminClient . UpdateTeam ( team )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email for admin" )
}
} )
}
2017-03-24 21:17:46 +09:00
func TestPatchTeam ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-03-24 21:17:46 +09:00
Client := th . Client
team := & model . Team { DisplayName : "Name" , Description : "Some description" , CompanyName : "Some company name" , AllowOpenInvite : false , InviteId : "inviteid0" , Name : "z-z-" + model . NewId ( ) + "a" , Email : "success+" + model . NewId ( ) + "@simulator.amazonses.com" , Type : model . TEAM_OPEN }
team , _ = Client . CreateTeam ( team )
patch := & model . TeamPatch { }
2017-10-23 09:40:35 -07:00
patch . DisplayName = model . NewString ( "Other name" )
patch . Description = model . NewString ( "Other description" )
patch . CompanyName = model . NewString ( "Other company name" )
patch . InviteId = model . NewString ( "inviteid1" )
patch . AllowOpenInvite = model . NewBool ( true )
2017-03-24 21:17:46 +09:00
rteam , resp := Client . PatchTeam ( team . Id , patch )
CheckNoError ( t , resp )
if rteam . DisplayName != "Other name" {
t . Fatal ( "DisplayName did not update properly" )
}
if rteam . Description != "Other description" {
t . Fatal ( "Description did not update properly" )
}
if rteam . CompanyName != "Other company name" {
t . Fatal ( "CompanyName did not update properly" )
}
if rteam . InviteId != "inviteid1" {
t . Fatal ( "InviteId did not update properly" )
}
2017-10-30 11:57:24 -05:00
if ! rteam . AllowOpenInvite {
2017-03-24 21:17:46 +09:00
t . Fatal ( "AllowOpenInvite did not update properly" )
}
_ , resp = Client . PatchTeam ( "junk" , patch )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . PatchTeam ( GenerateTestId ( ) , patch )
CheckForbiddenStatus ( t , resp )
if r , err := Client . DoApiPut ( "/teams/" + team . Id + "/patch" , "garbage" ) ; err == nil {
t . Fatal ( "should have errored" )
} else {
if r . StatusCode != http . StatusBadRequest {
t . Log ( "actual: " + strconv . Itoa ( r . StatusCode ) )
t . Log ( "expected: " + strconv . Itoa ( http . StatusBadRequest ) )
t . Fatal ( "wrong status code" )
}
}
Client . Logout ( )
_ , resp = Client . PatchTeam ( team . Id , patch )
CheckUnauthorizedStatus ( t , resp )
th . LoginBasic2 ( )
_ , resp = Client . PatchTeam ( team . Id , patch )
CheckForbiddenStatus ( t , resp )
_ , resp = th . SystemAdminClient . PatchTeam ( team . Id , patch )
CheckNoError ( t , resp )
}
2017-10-09 13:30:59 -04:00
func TestPatchTeamSanitization ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-09 13:30:59 -04:00
defer th . TearDown ( )
team , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_1" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
} )
CheckNoError ( t , resp )
// Non-admin users cannot update the team
t . Run ( "team admin" , func ( t * testing . T ) {
rteam , resp := th . Client . PatchTeam ( team . Id , & model . TeamPatch { } )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email for admin" )
}
} )
t . Run ( "system admin" , func ( t * testing . T ) {
rteam , resp := th . SystemAdminClient . PatchTeam ( team . Id , & model . TeamPatch { } )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email for admin" )
}
} )
}
2017-04-04 02:35:29 +09:00
func TestSoftDeleteTeam ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-04-04 02:35:29 +09:00
Client := th . Client
2018-01-17 12:38:37 -06:00
team := & model . Team { DisplayName : "DisplayName" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_OPEN }
2017-04-04 02:35:29 +09:00
team , _ = Client . CreateTeam ( team )
ok , resp := Client . SoftDeleteTeam ( team . Id )
CheckNoError ( t , resp )
if ! ok {
t . Fatal ( "should have returned true" )
}
2017-09-06 17:12:54 -05:00
rteam , err := th . App . GetTeam ( team . Id )
2017-04-04 02:35:29 +09:00
if err != nil {
t . Fatal ( "should have returned archived team" )
}
if rteam . DeleteAt == 0 {
t . Fatal ( "should have not set to zero" )
}
ok , resp = Client . SoftDeleteTeam ( "junk" )
CheckBadRequestStatus ( t , resp )
if ok {
t . Fatal ( "should have returned false" )
}
otherTeam := th . BasicTeam
_ , resp = Client . SoftDeleteTeam ( otherTeam . Id )
CheckForbiddenStatus ( t , resp )
Client . Logout ( )
_ , resp = Client . SoftDeleteTeam ( otherTeam . Id )
CheckUnauthorizedStatus ( t , resp )
_ , resp = th . SystemAdminClient . SoftDeleteTeam ( otherTeam . Id )
CheckNoError ( t , resp )
}
2017-06-15 14:13:18 +02:00
func TestPermanentDeleteTeam ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-06-15 14:13:18 +02:00
Client := th . Client
2018-01-17 12:38:37 -06:00
team := & model . Team { DisplayName : "DisplayName" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_OPEN }
2017-06-15 14:13:18 +02:00
team , _ = Client . CreateTeam ( team )
2018-07-11 12:58:16 +02:00
enableAPITeamDeletion := * th . App . Config ( ) . ServiceSettings . EnableAPITeamDeletion
defer func ( ) {
th . App . UpdateConfig ( func ( cfg * model . Config ) { cfg . ServiceSettings . EnableAPITeamDeletion = & enableAPITeamDeletion } )
} ( )
2018-05-18 09:13:23 -04:00
th . App . UpdateConfig ( func ( cfg * model . Config ) { * cfg . ServiceSettings . EnableAPITeamDeletion = false } )
// Does not error when deletion is disabled, just soft deletes
2017-06-15 14:13:18 +02:00
ok , resp := Client . PermanentDeleteTeam ( team . Id )
CheckNoError ( t , resp )
2018-05-18 09:13:23 -04:00
assert . True ( t , ok )
2017-06-15 14:13:18 +02:00
2017-09-06 17:12:54 -05:00
rteam , err := th . App . GetTeam ( team . Id )
2018-05-18 09:13:23 -04:00
assert . Nil ( t , err )
assert . True ( t , rteam . DeleteAt > 0 )
th . App . UpdateConfig ( func ( cfg * model . Config ) { * cfg . ServiceSettings . EnableAPITeamDeletion = true } )
ok , resp = Client . PermanentDeleteTeam ( team . Id )
CheckNoError ( t , resp )
assert . True ( t , ok )
_ , err = th . App . GetTeam ( team . Id )
assert . NotNil ( t , err )
2017-06-15 14:13:18 +02:00
ok , resp = Client . PermanentDeleteTeam ( "junk" )
CheckBadRequestStatus ( t , resp )
if ok {
t . Fatal ( "should have returned false" )
}
}
2017-02-28 10:41:38 +02:00
func TestGetAllTeams ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-28 10:41:38 +02:00
Client := th . Client
2018-01-17 12:38:37 -06:00
team := & model . Team { DisplayName : "Name" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_OPEN , AllowOpenInvite : true }
2017-02-28 10:41:38 +02:00
_ , resp := Client . CreateTeam ( team )
CheckNoError ( t , resp )
2018-03-21 11:33:47 -04:00
team2 := & model . Team { DisplayName : "Name2" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_OPEN , AllowOpenInvite : true }
_ , resp = Client . CreateTeam ( team2 )
CheckNoError ( t , resp )
2017-03-13 08:29:41 -04:00
rrteams , resp := Client . GetAllTeams ( "" , 0 , 1 )
2017-02-28 10:41:38 +02:00
CheckNoError ( t , resp )
2017-03-08 01:30:33 +01:00
if len ( rrteams ) != 1 {
2017-03-13 08:29:41 -04:00
t . Log ( len ( rrteams ) )
2017-02-28 10:41:38 +02:00
t . Fatal ( "wrong number of teams - should be 1" )
}
2017-08-24 00:19:15 +08:00
for _ , rt := range rrteams {
if ! rt . AllowOpenInvite {
2017-02-28 10:41:38 +02:00
t . Fatal ( "not all teams are open" )
}
2017-08-24 00:19:15 +08:00
}
rrteams , resp = Client . GetAllTeams ( "" , 0 , 10 )
CheckNoError ( t , resp )
for _ , rt := range rrteams {
if ! rt . AllowOpenInvite {
t . Fatal ( "not all teams are open" )
}
}
2017-02-28 10:41:38 +02:00
rrteams1 , resp := Client . GetAllTeams ( "" , 1 , 0 )
CheckNoError ( t , resp )
2017-03-08 01:30:33 +01:00
if len ( rrteams1 ) != 0 {
2017-02-28 10:41:38 +02:00
t . Fatal ( "wrong number of teams - should be 0" )
}
rrteams2 , resp := th . SystemAdminClient . GetAllTeams ( "" , 1 , 1 )
CheckNoError ( t , resp )
2017-03-08 01:30:33 +01:00
if len ( rrteams2 ) != 1 {
2017-02-28 10:41:38 +02:00
t . Fatal ( "wrong number of teams - should be 1" )
}
rrteams2 , resp = Client . GetAllTeams ( "" , 1 , 0 )
CheckNoError ( t , resp )
2017-03-08 01:30:33 +01:00
if len ( rrteams2 ) != 0 {
2017-02-28 10:41:38 +02:00
t . Fatal ( "wrong number of teams - should be 0" )
}
2018-03-21 11:33:47 -04:00
rrteams , resp = Client . GetAllTeams ( "" , 0 , 2 )
CheckNoError ( t , resp )
rrteams2 , resp = Client . GetAllTeams ( "" , 1 , 2 )
CheckNoError ( t , resp )
for _ , t1 := range rrteams {
for _ , t2 := range rrteams2 {
assert . NotEqual ( t , t1 . Id , t2 . Id , "different pages should not have the same teams" )
}
}
2017-02-28 10:41:38 +02:00
Client . Logout ( )
_ , resp = Client . GetAllTeams ( "" , 1 , 10 )
CheckUnauthorizedStatus ( t , resp )
}
2017-10-09 13:30:59 -04:00
func TestGetAllTeamsSanitization ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-09 13:30:59 -04:00
defer th . TearDown ( )
team , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_1" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
AllowOpenInvite : true ,
} )
CheckNoError ( t , resp )
team2 , resp := th . SystemAdminClient . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_2" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
AllowOpenInvite : true ,
} )
CheckNoError ( t , resp )
// This may not work if the server has over 1000 open teams on it
t . Run ( "team admin/non-admin" , func ( t * testing . T ) {
teamFound := false
team2Found := false
rteams , resp := th . Client . GetAllTeams ( "" , 0 , 1000 )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Id == team . Id {
teamFound = true
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email for team admin" )
}
} else if rteam . Id == team2 . Id {
team2Found = true
if rteam . Email != "" {
t . Fatal ( "should've sanitized email for non-admin" )
}
}
}
if ! teamFound || ! team2Found {
t . Fatal ( "wasn't returned the expected teams so the test wasn't run correctly" )
}
} )
t . Run ( "system admin" , func ( t * testing . T ) {
rteams , resp := th . SystemAdminClient . GetAllTeams ( "" , 0 , 1000 )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Id != team . Id && rteam . Id != team2 . Id {
continue
}
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
}
} )
}
2017-02-21 01:27:57 +09:00
func TestGetTeamByName ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-21 01:27:57 +09:00
Client := th . Client
team := th . BasicTeam
rteam , resp := Client . GetTeamByName ( team . Name , "" )
CheckNoError ( t , resp )
if rteam . Name != team . Name {
t . Fatal ( "wrong team" )
}
_ , resp = Client . GetTeamByName ( "junk" , "" )
CheckNotFoundStatus ( t , resp )
_ , resp = Client . GetTeamByName ( "" , "" )
CheckNotFoundStatus ( t , resp )
2018-01-12 15:01:45 +01:00
_ , resp = th . SystemAdminClient . GetTeamByName ( strings . ToUpper ( team . Name ) , "" )
CheckNoError ( t , resp )
2017-02-21 01:27:57 +09:00
Client . Logout ( )
_ , resp = Client . GetTeamByName ( team . Name , "" )
CheckUnauthorizedStatus ( t , resp )
_ , resp = th . SystemAdminClient . GetTeamByName ( team . Name , "" )
CheckNoError ( t , resp )
th . LoginTeamAdmin ( )
2018-01-17 12:38:37 -06:00
team2 := & model . Team { DisplayName : "Name" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_OPEN , AllowOpenInvite : false }
2017-02-21 01:27:57 +09:00
rteam2 , _ := Client . CreateTeam ( team2 )
2018-01-17 12:38:37 -06:00
team3 := & model . Team { DisplayName : "Name" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_INVITE , AllowOpenInvite : true }
2017-08-08 16:20:07 -04:00
rteam3 , _ := Client . CreateTeam ( team3 )
2017-02-21 01:27:57 +09:00
th . LoginBasic ( )
2017-08-08 16:20:07 -04:00
// AllowInviteOpen is false and team is open, and user is not on team
2017-02-21 01:27:57 +09:00
_ , resp = Client . GetTeamByName ( rteam2 . Name , "" )
CheckForbiddenStatus ( t , resp )
2017-08-08 16:20:07 -04:00
// AllowInviteOpen is true and team is invite only, and user is not on team
_ , resp = Client . GetTeamByName ( rteam3 . Name , "" )
CheckForbiddenStatus ( t , resp )
2017-02-21 01:27:57 +09:00
}
2017-10-09 13:30:59 -04:00
func TestGetTeamByNameSanitization ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-09 13:30:59 -04:00
defer th . TearDown ( )
team , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_1" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
} )
CheckNoError ( t , resp )
t . Run ( "team user" , func ( t * testing . T ) {
th . LinkUserToTeam ( th . BasicUser2 , team )
client := th . CreateClient ( )
th . LoginBasic2WithClient ( client )
rteam , resp := client . GetTeamByName ( team . Name , "" )
CheckNoError ( t , resp )
if rteam . Email != "" {
t . Fatal ( "should've sanitized email" )
}
} )
t . Run ( "team admin/non-admin" , func ( t * testing . T ) {
rteam , resp := th . Client . GetTeamByName ( team . Name , "" )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
} )
t . Run ( "system admin" , func ( t * testing . T ) {
rteam , resp := th . SystemAdminClient . GetTeamByName ( team . Name , "" )
CheckNoError ( t , resp )
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
} )
}
2017-04-04 02:34:14 +09:00
func TestSearchAllTeams ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-04-04 02:34:14 +09:00
Client := th . Client
oTeam := th . BasicTeam
2017-08-09 09:33:30 -04:00
oTeam . AllowOpenInvite = true
2017-10-09 13:30:59 -04:00
if updatedTeam , err := th . App . UpdateTeam ( oTeam ) ; err != nil {
t . Fatal ( err )
} else {
oTeam . UpdateAt = updatedTeam . UpdateAt
}
2017-04-04 02:34:14 +09:00
2018-01-17 12:38:37 -06:00
pTeam := & model . Team { DisplayName : "PName" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_INVITE }
2017-04-04 02:34:14 +09:00
Client . CreateTeam ( pTeam )
rteams , resp := Client . SearchTeams ( & model . TeamSearch { Term : oTeam . Name } )
CheckNoError ( t , resp )
if len ( rteams ) != 1 {
t . Fatal ( "should have returned 1 team" )
}
2017-10-09 13:30:59 -04:00
if oTeam . Id != rteams [ 0 ] . Id {
2017-04-04 02:34:14 +09:00
t . Fatal ( "invalid team" )
}
rteams , resp = Client . SearchTeams ( & model . TeamSearch { Term : oTeam . DisplayName } )
CheckNoError ( t , resp )
if len ( rteams ) != 1 {
t . Fatal ( "should have returned 1 team" )
}
2017-10-09 13:30:59 -04:00
if rteams [ 0 ] . Id != oTeam . Id {
2017-04-04 02:34:14 +09:00
t . Fatal ( "invalid team" )
}
rteams , resp = Client . SearchTeams ( & model . TeamSearch { Term : pTeam . Name } )
CheckNoError ( t , resp )
if len ( rteams ) != 0 {
t . Fatal ( "should have not returned team" )
}
rteams , resp = Client . SearchTeams ( & model . TeamSearch { Term : pTeam . DisplayName } )
CheckNoError ( t , resp )
if len ( rteams ) != 0 {
t . Fatal ( "should have not returned team" )
}
rteams , resp = th . SystemAdminClient . SearchTeams ( & model . TeamSearch { Term : oTeam . Name } )
CheckNoError ( t , resp )
if len ( rteams ) != 1 {
t . Fatal ( "should have returned 1 team" )
}
rteams , resp = th . SystemAdminClient . SearchTeams ( & model . TeamSearch { Term : pTeam . DisplayName } )
CheckNoError ( t , resp )
if len ( rteams ) != 1 {
t . Fatal ( "should have returned 1 team" )
}
rteams , resp = Client . SearchTeams ( & model . TeamSearch { Term : "junk" } )
CheckNoError ( t , resp )
if len ( rteams ) != 0 {
t . Fatal ( "should have not returned team" )
}
Client . Logout ( )
2018-09-03 14:08:40 +02:00
_ , resp = Client . SearchTeams ( & model . TeamSearch { Term : pTeam . Name } )
2017-04-04 02:34:14 +09:00
CheckUnauthorizedStatus ( t , resp )
2018-09-03 14:08:40 +02:00
_ , resp = Client . SearchTeams ( & model . TeamSearch { Term : pTeam . DisplayName } )
2017-04-04 02:34:14 +09:00
CheckUnauthorizedStatus ( t , resp )
}
2017-10-09 13:30:59 -04:00
func TestSearchAllTeamsSanitization ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-09 13:30:59 -04:00
defer th . TearDown ( )
team , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_1" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
} )
CheckNoError ( t , resp )
team2 , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_2" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
} )
CheckNoError ( t , resp )
t . Run ( "non-team user" , func ( t * testing . T ) {
client := th . CreateClient ( )
th . LoginBasic2WithClient ( client )
rteams , resp := client . SearchTeams ( & model . TeamSearch { Term : t . Name ( ) } )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Email != "" {
t . Fatal ( "should've sanitized email" )
} else if rteam . AllowedDomains != "" {
t . Fatal ( "should've sanitized allowed domains" )
}
}
} )
t . Run ( "team user" , func ( t * testing . T ) {
th . LinkUserToTeam ( th . BasicUser2 , team )
client := th . CreateClient ( )
th . LoginBasic2WithClient ( client )
rteams , resp := client . SearchTeams ( & model . TeamSearch { Term : t . Name ( ) } )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Email != "" {
t . Fatal ( "should've sanitized email" )
} else if rteam . AllowedDomains != "" {
t . Fatal ( "should've sanitized allowed domains" )
}
}
} )
t . Run ( "team admin" , func ( t * testing . T ) {
rteams , resp := th . Client . SearchTeams ( & model . TeamSearch { Term : t . Name ( ) } )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Id == team . Id || rteam . Id == team2 . Id || rteam . Id == th . BasicTeam . Id {
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
}
}
} )
t . Run ( "system admin" , func ( t * testing . T ) {
rteams , resp := th . SystemAdminClient . SearchTeams ( & model . TeamSearch { Term : t . Name ( ) } )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
}
} )
}
2017-02-07 08:57:41 -08:00
func TestGetTeamsForUser ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-07 08:57:41 -08:00
Client := th . Client
2018-01-17 12:38:37 -06:00
team2 := & model . Team { DisplayName : "Name" , Name : GenerateTestTeamName ( ) , Email : th . GenerateTestEmail ( ) , Type : model . TEAM_INVITE }
2017-02-07 08:57:41 -08:00
rteam2 , _ := Client . CreateTeam ( team2 )
teams , resp := Client . GetTeamsForUser ( th . BasicUser . Id , "" )
CheckNoError ( t , resp )
if len ( teams ) != 2 {
t . Fatal ( "wrong number of teams" )
}
found1 := false
found2 := false
for _ , t := range teams {
if t . Id == th . BasicTeam . Id {
found1 = true
} else if t . Id == rteam2 . Id {
found2 = true
}
}
if ! found1 || ! found2 {
t . Fatal ( "missing team" )
}
_ , resp = Client . GetTeamsForUser ( "junk" , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamsForUser ( model . NewId ( ) , "" )
CheckForbiddenStatus ( t , resp )
_ , resp = Client . GetTeamsForUser ( th . BasicUser2 . Id , "" )
CheckForbiddenStatus ( t , resp )
_ , resp = th . SystemAdminClient . GetTeamsForUser ( th . BasicUser2 . Id , "" )
CheckNoError ( t , resp )
}
2017-10-09 13:30:59 -04:00
func TestGetTeamsForUserSanitization ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-09 13:30:59 -04:00
defer th . TearDown ( )
team , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_1" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
} )
CheckNoError ( t , resp )
team2 , resp := th . Client . CreateTeam ( & model . Team {
DisplayName : t . Name ( ) + "_2" ,
Name : GenerateTestTeamName ( ) ,
2018-01-17 12:38:37 -06:00
Email : th . GenerateTestEmail ( ) ,
2017-10-09 13:30:59 -04:00
Type : model . TEAM_OPEN ,
2018-08-28 08:06:57 -07:00
AllowedDomains : "simulator.amazonses.com,dockerhost" ,
2017-10-09 13:30:59 -04:00
} )
CheckNoError ( t , resp )
t . Run ( "team user" , func ( t * testing . T ) {
th . LinkUserToTeam ( th . BasicUser2 , team )
th . LinkUserToTeam ( th . BasicUser2 , team2 )
client := th . CreateClient ( )
th . LoginBasic2WithClient ( client )
rteams , resp := client . GetTeamsForUser ( th . BasicUser2 . Id , "" )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Id != team . Id && rteam . Id != team2 . Id {
continue
}
if rteam . Email != "" {
t . Fatal ( "should've sanitized email" )
}
}
} )
t . Run ( "team admin" , func ( t * testing . T ) {
rteams , resp := th . Client . GetTeamsForUser ( th . BasicUser . Id , "" )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Id != team . Id && rteam . Id != team2 . Id {
continue
}
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
}
} )
t . Run ( "system admin" , func ( t * testing . T ) {
rteams , resp := th . SystemAdminClient . GetTeamsForUser ( th . BasicUser . Id , "" )
CheckNoError ( t , resp )
for _ , rteam := range rteams {
if rteam . Id != team . Id && rteam . Id != team2 . Id {
continue
}
if rteam . Email == "" {
t . Fatal ( "should not have sanitized email" )
}
}
} )
}
2017-02-07 08:57:41 -08:00
func TestGetTeamMember ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-07 08:57:41 -08:00
Client := th . Client
team := th . BasicTeam
user := th . BasicUser
rmember , resp := Client . GetTeamMember ( team . Id , user . Id , "" )
CheckNoError ( t , resp )
if rmember . TeamId != team . Id {
t . Fatal ( "wrong team id" )
}
if rmember . UserId != user . Id {
t . Fatal ( "wrong team id" )
}
_ , resp = Client . GetTeamMember ( "junk" , user . Id , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamMember ( team . Id , "junk" , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamMember ( "junk" , "junk" , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamMember ( team . Id , model . NewId ( ) , "" )
CheckNotFoundStatus ( t , resp )
_ , resp = Client . GetTeamMember ( model . NewId ( ) , user . Id , "" )
CheckForbiddenStatus ( t , resp )
_ , resp = th . SystemAdminClient . GetTeamMember ( team . Id , user . Id , "" )
CheckNoError ( t , resp )
}
2017-02-18 05:50:17 +09:00
2017-02-23 08:55:31 +09:00
func TestGetTeamMembers ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-23 08:55:31 +09:00
Client := th . Client
team := th . BasicTeam
userNotMember := th . CreateUser ( )
rmembers , resp := Client . GetTeamMembers ( team . Id , 0 , 100 , "" )
CheckNoError ( t , resp )
t . Logf ( "rmembers count %v\n" , len ( rmembers ) )
if len ( rmembers ) == 0 {
t . Fatal ( "should have results" )
}
for _ , rmember := range rmembers {
if rmember . TeamId != team . Id || rmember . UserId == userNotMember . Id {
t . Fatal ( "user should be a member of team" )
}
}
rmembers , resp = Client . GetTeamMembers ( team . Id , 0 , 1 , "" )
CheckNoError ( t , resp )
if len ( rmembers ) != 1 {
t . Fatal ( "should be 1 per page" )
}
rmembers , resp = Client . GetTeamMembers ( team . Id , 1 , 1 , "" )
CheckNoError ( t , resp )
if len ( rmembers ) != 1 {
t . Fatal ( "should be 1 per page" )
}
rmembers , resp = Client . GetTeamMembers ( team . Id , 10000 , 100 , "" )
CheckNoError ( t , resp )
if len ( rmembers ) != 0 {
t . Fatal ( "should be no member" )
}
2018-03-21 11:33:47 -04:00
rmembers , resp = Client . GetTeamMembers ( team . Id , 0 , 2 , "" )
CheckNoError ( t , resp )
rmembers2 , resp := Client . GetTeamMembers ( team . Id , 1 , 2 , "" )
CheckNoError ( t , resp )
for _ , tm1 := range rmembers {
for _ , tm2 := range rmembers2 {
assert . NotEqual ( t , tm1 . UserId + tm1 . TeamId , tm2 . UserId + tm2 . TeamId , "different pages should not have the same members" )
}
}
2017-02-23 08:55:31 +09:00
_ , resp = Client . GetTeamMembers ( "junk" , 0 , 100 , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamMembers ( model . NewId ( ) , 0 , 100 , "" )
CheckForbiddenStatus ( t , resp )
Client . Logout ( )
2018-09-03 14:08:40 +02:00
_ , resp = Client . GetTeamMembers ( team . Id , 0 , 1 , "" )
2017-02-23 08:55:31 +09:00
CheckUnauthorizedStatus ( t , resp )
2018-09-03 14:08:40 +02:00
_ , resp = th . SystemAdminClient . GetTeamMembers ( team . Id , 0 , 100 , "" )
2017-02-23 08:55:31 +09:00
CheckNoError ( t , resp )
}
2017-03-25 02:38:24 -04:00
func TestGetTeamMembersForUser ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-03-25 02:38:24 -04:00
Client := th . Client
members , resp := Client . GetTeamMembersForUser ( th . BasicUser . Id , "" )
CheckNoError ( t , resp )
found := false
for _ , m := range members {
if m . TeamId == th . BasicTeam . Id {
found = true
}
}
if ! found {
t . Fatal ( "missing team member" )
}
_ , resp = Client . GetTeamMembersForUser ( "junk" , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamMembersForUser ( model . NewId ( ) , "" )
CheckForbiddenStatus ( t , resp )
Client . Logout ( )
_ , resp = Client . GetTeamMembersForUser ( th . BasicUser . Id , "" )
CheckUnauthorizedStatus ( t , resp )
user := th . CreateUser ( )
Client . Login ( user . Email , user . Password )
_ , resp = Client . GetTeamMembersForUser ( th . BasicUser . Id , "" )
CheckForbiddenStatus ( t , resp )
_ , resp = th . SystemAdminClient . GetTeamMembersForUser ( th . BasicUser . Id , "" )
CheckNoError ( t , resp )
}
2017-03-13 09:46:28 -04:00
func TestGetTeamMembersByIds ( t * testing . T ) {
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-03-13 09:46:28 -04:00
Client := th . Client
tm , resp := Client . GetTeamMembersByIds ( th . BasicTeam . Id , [ ] string { th . BasicUser . Id } )
CheckNoError ( t , resp )
if tm [ 0 ] . UserId != th . BasicUser . Id {
t . Fatal ( "returned wrong user" )
}
_ , resp = Client . GetTeamMembersByIds ( th . BasicTeam . Id , [ ] string { } )
CheckBadRequestStatus ( t , resp )
tm1 , resp := Client . GetTeamMembersByIds ( th . BasicTeam . Id , [ ] string { "junk" } )
CheckNoError ( t , resp )
if len ( tm1 ) > 0 {
t . Fatal ( "no users should be returned" )
}
tm1 , resp = Client . GetTeamMembersByIds ( th . BasicTeam . Id , [ ] string { "junk" , th . BasicUser . Id } )
CheckNoError ( t , resp )
if len ( tm1 ) != 1 {
t . Fatal ( "1 user should be returned" )
}
2018-09-03 14:08:40 +02:00
_ , resp = Client . GetTeamMembersByIds ( "junk" , [ ] string { th . BasicUser . Id } )
2017-03-13 09:46:28 -04:00
CheckBadRequestStatus ( t , resp )
2018-09-03 14:08:40 +02:00
_ , resp = Client . GetTeamMembersByIds ( model . NewId ( ) , [ ] string { th . BasicUser . Id } )
2017-03-13 09:46:28 -04:00
CheckForbiddenStatus ( t , resp )
Client . Logout ( )
_ , resp = Client . GetTeamMembersByIds ( th . BasicTeam . Id , [ ] string { th . BasicUser . Id } )
CheckUnauthorizedStatus ( t , resp )
}
2017-03-24 18:13:27 +09:00
func TestAddTeamMember ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-03-24 18:13:27 +09:00
Client := th . Client
team := th . BasicTeam
otherUser := th . CreateUser ( )
2017-11-20 18:15:33 +03:00
if err := th . App . RemoveUserFromTeam ( th . BasicTeam . Id , th . BasicUser2 . Id , "" ) ; err != nil {
2017-03-26 14:37:39 +01:00
t . Fatalf ( err . Error ( ) )
}
2017-03-24 18:13:27 +09:00
2017-03-26 14:37:39 +01:00
// Regular user can't add a member to a team they don't belong to.
th . LoginBasic2 ( )
2018-09-03 14:08:40 +02:00
_ , resp := Client . AddTeamMember ( team . Id , otherUser . Id )
2017-03-26 14:37:39 +01:00
CheckForbiddenStatus ( t , resp )
if resp . Error == nil {
2018-02-12 09:16:17 -05:00
t . Fatalf ( "Error is nil" )
2017-03-26 14:37:39 +01:00
}
Client . Logout ( )
// Regular user can add a member to a team they belong to.
th . LoginBasic ( )
2018-09-03 14:08:40 +02:00
tm , resp := Client . AddTeamMember ( team . Id , otherUser . Id )
2017-03-24 18:13:27 +09:00
CheckNoError ( t , resp )
2017-03-31 09:56:20 -04:00
CheckCreatedStatus ( t , resp )
2017-03-24 18:13:27 +09:00
2017-03-26 14:37:39 +01:00
// Check all the returned data.
2017-03-24 18:13:27 +09:00
if tm == nil {
t . Fatal ( "should have returned team member" )
}
if tm . UserId != otherUser . Id {
t . Fatal ( "user ids should have matched" )
}
if tm . TeamId != team . Id {
t . Fatal ( "team ids should have matched" )
}
2017-03-26 14:37:39 +01:00
// Check with various invalid requests.
2017-06-26 08:16:57 -04:00
tm , resp = Client . AddTeamMember ( team . Id , "junk" )
2017-03-24 18:13:27 +09:00
CheckBadRequestStatus ( t , resp )
if tm != nil {
t . Fatal ( "should have not returned team member" )
}
2017-06-26 08:16:57 -04:00
_ , resp = Client . AddTeamMember ( "junk" , otherUser . Id )
2017-03-24 18:13:27 +09:00
CheckBadRequestStatus ( t , resp )
2017-06-26 08:16:57 -04:00
_ , resp = Client . AddTeamMember ( GenerateTestId ( ) , otherUser . Id )
2017-03-24 18:13:27 +09:00
CheckForbiddenStatus ( t , resp )
2017-06-26 08:16:57 -04:00
_ , resp = Client . AddTeamMember ( team . Id , GenerateTestId ( ) )
2017-03-24 18:13:27 +09:00
CheckNotFoundStatus ( t , resp )
2017-03-26 14:37:39 +01:00
Client . Logout ( )
2018-02-06 15:34:08 +00:00
// Check the appropriate permissions are enforced.
defaultRolePermissions := th . SaveDefaultRolePermissions ( )
2017-03-26 14:37:39 +01:00
defer func ( ) {
2018-02-06 15:34:08 +00:00
th . RestoreDefaultRolePermissions ( defaultRolePermissions )
2017-03-26 14:37:39 +01:00
} ( )
// Set the config so that only team admins can add a user to a team.
2018-02-06 15:34:08 +00:00
th . AddPermissionToRole ( model . PERMISSION_INVITE_USER . Id , model . TEAM_ADMIN_ROLE_ID )
th . AddPermissionToRole ( model . PERMISSION_ADD_USER_TO_TEAM . Id , model . TEAM_ADMIN_ROLE_ID )
th . RemovePermissionFromRole ( model . PERMISSION_INVITE_USER . Id , model . TEAM_USER_ROLE_ID )
th . RemovePermissionFromRole ( model . PERMISSION_ADD_USER_TO_TEAM . Id , model . TEAM_USER_ROLE_ID )
2017-03-26 14:37:39 +01:00
2017-03-24 18:13:27 +09:00
th . LoginBasic ( )
2017-03-26 14:37:39 +01:00
// Check that a regular user can't add someone to the team.
2017-06-26 08:16:57 -04:00
_ , resp = Client . AddTeamMember ( team . Id , otherUser . Id )
2017-03-24 18:13:27 +09:00
CheckForbiddenStatus ( t , resp )
2017-03-26 14:37:39 +01:00
// Update user to team admin
2017-10-02 03:50:56 -05:00
th . UpdateUserToTeamAdmin ( th . BasicUser , th . BasicTeam )
2017-09-06 17:12:54 -05:00
th . App . InvalidateAllCaches ( )
2017-03-26 14:37:39 +01:00
th . LoginBasic ( )
2017-03-24 18:13:27 +09:00
2017-03-26 14:37:39 +01:00
// Should work as a team admin.
2017-06-26 08:16:57 -04:00
_ , resp = Client . AddTeamMember ( team . Id , otherUser . Id )
2017-03-26 14:37:39 +01:00
CheckNoError ( t , resp )
2018-02-06 15:34:08 +00:00
// Change permission level to team user
th . AddPermissionToRole ( model . PERMISSION_INVITE_USER . Id , model . TEAM_USER_ROLE_ID )
th . AddPermissionToRole ( model . PERMISSION_ADD_USER_TO_TEAM . Id , model . TEAM_USER_ROLE_ID )
th . RemovePermissionFromRole ( model . PERMISSION_INVITE_USER . Id , model . TEAM_ADMIN_ROLE_ID )
th . RemovePermissionFromRole ( model . PERMISSION_ADD_USER_TO_TEAM . Id , model . TEAM_ADMIN_ROLE_ID )
2017-03-26 14:37:39 +01:00
2017-10-02 03:50:56 -05:00
th . UpdateUserToNonTeamAdmin ( th . BasicUser , th . BasicTeam )
2017-09-06 17:12:54 -05:00
th . App . InvalidateAllCaches ( )
2017-03-26 14:37:39 +01:00
th . LoginBasic ( )
// Should work as a regular user.
2017-06-26 08:16:57 -04:00
_ , resp = Client . AddTeamMember ( team . Id , otherUser . Id )
2017-03-26 14:37:39 +01:00
CheckNoError ( t , resp )
2018-04-18 22:46:10 +02:00
// by token
2017-03-24 18:13:27 +09:00
Client . Login ( otherUser . Email , otherUser . Password )
2018-04-18 22:46:10 +02:00
token := model . NewToken (
app . TOKEN_TYPE_TEAM_INVITATION ,
model . MapToJson ( map [ string ] string { "teamId" : team . Id } ) ,
)
<- th . App . Srv . Store . Token ( ) . Save ( token )
2017-03-24 18:13:27 +09:00
2018-04-18 22:46:10 +02:00
tm , resp = Client . AddTeamMemberFromInvite ( token . Token , "" )
2017-03-24 18:13:27 +09:00
CheckNoError ( t , resp )
if tm == nil {
t . Fatal ( "should have returned team member" )
}
if tm . UserId != otherUser . Id {
t . Fatal ( "user ids should have matched" )
}
if tm . TeamId != team . Id {
t . Fatal ( "team ids should have matched" )
}
2018-04-18 22:46:10 +02:00
if result := <- th . App . Srv . Store . Token ( ) . GetByToken ( token . Token ) ; result . Err == nil {
t . Fatal ( "The token must be deleted after be used" )
}
tm , resp = Client . AddTeamMemberFromInvite ( "junk" , "" )
2017-06-26 13:25:43 -04:00
CheckBadRequestStatus ( t , resp )
2017-03-24 18:13:27 +09:00
if tm != nil {
t . Fatal ( "should have not returned team member" )
}
2018-04-18 22:46:10 +02:00
// expired token of more than 50 hours
token = model . NewToken ( app . TOKEN_TYPE_TEAM_INVITATION , "" )
token . CreateAt = model . GetMillis ( ) - 1000 * 60 * 60 * 50
<- th . App . Srv . Store . Token ( ) . Save ( token )
2017-03-24 18:13:27 +09:00
2018-09-03 14:08:40 +02:00
_ , resp = Client . AddTeamMemberFromInvite ( token . Token , "" )
2017-06-26 13:25:43 -04:00
CheckBadRequestStatus ( t , resp )
2018-04-18 22:46:10 +02:00
th . App . DeleteToken ( token )
2017-03-24 18:13:27 +09:00
// invalid team id
2018-04-18 22:46:10 +02:00
testId := GenerateTestId ( )
token = model . NewToken (
app . TOKEN_TYPE_TEAM_INVITATION ,
model . MapToJson ( map [ string ] string { "teamId" : testId } ) ,
)
<- th . App . Srv . Store . Token ( ) . Save ( token )
2018-09-03 14:08:40 +02:00
_ , resp = Client . AddTeamMemberFromInvite ( token . Token , "" )
2018-04-18 22:46:10 +02:00
CheckNotFoundStatus ( t , resp )
th . App . DeleteToken ( token )
2017-03-24 18:13:27 +09:00
// by invite_id
Client . Login ( otherUser . Email , otherUser . Password )
2018-04-18 22:46:10 +02:00
tm , resp = Client . AddTeamMemberFromInvite ( "" , team . InviteId )
2017-03-24 18:13:27 +09:00
CheckNoError ( t , resp )
if tm == nil {
t . Fatal ( "should have returned team member" )
}
if tm . UserId != otherUser . Id {
t . Fatal ( "user ids should have matched" )
}
if tm . TeamId != team . Id {
t . Fatal ( "team ids should have matched" )
}
2018-04-18 22:46:10 +02:00
tm , resp = Client . AddTeamMemberFromInvite ( "" , "junk" )
2017-06-28 07:56:29 -04:00
CheckNotFoundStatus ( t , resp )
2017-03-24 18:13:27 +09:00
if tm != nil {
t . Fatal ( "should have not returned team member" )
}
}
2017-04-03 19:32:57 +01:00
func TestAddTeamMembers ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-04-03 19:32:57 +01:00
Client := th . Client
team := th . BasicTeam
otherUser := th . CreateUser ( )
userList := [ ] string {
otherUser . Id ,
}
2017-11-20 18:15:33 +03:00
if err := th . App . RemoveUserFromTeam ( th . BasicTeam . Id , th . BasicUser2 . Id , "" ) ; err != nil {
2017-04-03 19:32:57 +01:00
t . Fatalf ( err . Error ( ) )
}
// Regular user can't add a member to a team they don't belong to.
th . LoginBasic2 ( )
2018-09-03 14:08:40 +02:00
_ , resp := Client . AddTeamMembers ( team . Id , userList )
2017-04-03 19:32:57 +01:00
CheckForbiddenStatus ( t , resp )
Client . Logout ( )
// Regular user can add a member to a team they belong to.
th . LoginBasic ( )
2018-09-03 14:08:40 +02:00
tm , resp := Client . AddTeamMembers ( team . Id , userList )
2017-04-03 19:32:57 +01:00
CheckNoError ( t , resp )
CheckCreatedStatus ( t , resp )
// Check all the returned data.
if tm [ 0 ] == nil {
t . Fatal ( "should have returned team member" )
}
if tm [ 0 ] . UserId != otherUser . Id {
t . Fatal ( "user ids should have matched" )
}
if tm [ 0 ] . TeamId != team . Id {
t . Fatal ( "team ids should have matched" )
}
// Check with various invalid requests.
_ , resp = Client . AddTeamMembers ( "junk" , userList )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . AddTeamMembers ( GenerateTestId ( ) , userList )
CheckForbiddenStatus ( t , resp )
testUserList := append ( userList , GenerateTestId ( ) )
_ , resp = Client . AddTeamMembers ( team . Id , testUserList )
CheckNotFoundStatus ( t , resp )
// Test with many users.
for i := 0 ; i < 25 ; i ++ {
testUserList = append ( testUserList , GenerateTestId ( ) )
}
_ , resp = Client . AddTeamMembers ( team . Id , testUserList )
CheckBadRequestStatus ( t , resp )
Client . Logout ( )
2018-02-06 15:34:08 +00:00
// Check the appropriate permissions are enforced.
defaultRolePermissions := th . SaveDefaultRolePermissions ( )
2017-04-03 19:32:57 +01:00
defer func ( ) {
2018-02-06 15:34:08 +00:00
th . RestoreDefaultRolePermissions ( defaultRolePermissions )
2017-04-03 19:32:57 +01:00
} ( )
// Set the config so that only team admins can add a user to a team.
2018-02-06 15:34:08 +00:00
th . AddPermissionToRole ( model . PERMISSION_INVITE_USER . Id , model . TEAM_ADMIN_ROLE_ID )
th . AddPermissionToRole ( model . PERMISSION_ADD_USER_TO_TEAM . Id , model . TEAM_ADMIN_ROLE_ID )
th . RemovePermissionFromRole ( model . PERMISSION_INVITE_USER . Id , model . TEAM_USER_ROLE_ID )
th . RemovePermissionFromRole ( model . PERMISSION_ADD_USER_TO_TEAM . Id , model . TEAM_USER_ROLE_ID )
2017-04-03 19:32:57 +01:00
th . LoginBasic ( )
// Check that a regular user can't add someone to the team.
_ , resp = Client . AddTeamMembers ( team . Id , userList )
CheckForbiddenStatus ( t , resp )
// Update user to team admin
2017-10-02 03:50:56 -05:00
th . UpdateUserToTeamAdmin ( th . BasicUser , th . BasicTeam )
2017-09-06 17:12:54 -05:00
th . App . InvalidateAllCaches ( )
2017-04-03 19:32:57 +01:00
th . LoginBasic ( )
// Should work as a team admin.
_ , resp = Client . AddTeamMembers ( team . Id , userList )
CheckNoError ( t , resp )
2018-02-06 15:34:08 +00:00
// Change permission level to team user
th . AddPermissionToRole ( model . PERMISSION_INVITE_USER . Id , model . TEAM_USER_ROLE_ID )
th . AddPermissionToRole ( model . PERMISSION_ADD_USER_TO_TEAM . Id , model . TEAM_USER_ROLE_ID )
th . RemovePermissionFromRole ( model . PERMISSION_INVITE_USER . Id , model . TEAM_ADMIN_ROLE_ID )
th . RemovePermissionFromRole ( model . PERMISSION_ADD_USER_TO_TEAM . Id , model . TEAM_ADMIN_ROLE_ID )
2017-04-03 19:32:57 +01:00
2017-10-02 03:50:56 -05:00
th . UpdateUserToNonTeamAdmin ( th . BasicUser , th . BasicTeam )
2017-09-06 17:12:54 -05:00
th . App . InvalidateAllCaches ( )
2017-04-03 19:32:57 +01:00
th . LoginBasic ( )
// Should work as a regular user.
_ , resp = Client . AddTeamMembers ( team . Id , userList )
CheckNoError ( t , resp )
}
2017-03-25 02:38:24 -04:00
func TestRemoveTeamMember ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-03-25 02:38:24 -04:00
Client := th . Client
pass , resp := Client . RemoveTeamMember ( th . BasicTeam . Id , th . BasicUser . Id )
CheckNoError ( t , resp )
if ! pass {
t . Fatal ( "should have passed" )
}
2017-06-26 08:16:57 -04:00
_ , resp = th . SystemAdminClient . AddTeamMember ( th . BasicTeam . Id , th . BasicUser . Id )
2017-03-25 02:38:24 -04:00
CheckNoError ( t , resp )
_ , resp = Client . RemoveTeamMember ( th . BasicTeam . Id , "junk" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . RemoveTeamMember ( "junk" , th . BasicUser2 . Id )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . RemoveTeamMember ( th . BasicTeam . Id , th . BasicUser2 . Id )
CheckForbiddenStatus ( t , resp )
_ , resp = Client . RemoveTeamMember ( model . NewId ( ) , th . BasicUser . Id )
CheckNotFoundStatus ( t , resp )
_ , resp = th . SystemAdminClient . RemoveTeamMember ( th . BasicTeam . Id , th . BasicUser . Id )
CheckNoError ( t , resp )
}
2017-02-18 05:50:17 +09:00
func TestGetTeamStats ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-18 05:50:17 +09:00
Client := th . Client
team := th . BasicTeam
rstats , resp := Client . GetTeamStats ( team . Id , "" )
CheckNoError ( t , resp )
if rstats . TeamId != team . Id {
t . Fatal ( "wrong team id" )
}
if rstats . TotalMemberCount != 3 {
t . Fatal ( "wrong count" )
}
if rstats . ActiveMemberCount != 3 {
t . Fatal ( "wrong count" )
}
_ , resp = Client . GetTeamStats ( "junk" , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamStats ( model . NewId ( ) , "" )
CheckForbiddenStatus ( t , resp )
_ , resp = th . SystemAdminClient . GetTeamStats ( team . Id , "" )
CheckNoError ( t , resp )
// deactivate BasicUser2
th . UpdateActiveUser ( th . BasicUser2 , false )
rstats , resp = th . SystemAdminClient . GetTeamStats ( team . Id , "" )
CheckNoError ( t , resp )
if rstats . TotalMemberCount != 3 {
t . Fatal ( "wrong count" )
}
if rstats . ActiveMemberCount != 2 {
t . Fatal ( "wrong count" )
}
// login with different user and test if forbidden
user := th . CreateUser ( )
Client . Login ( user . Email , user . Password )
_ , resp = Client . GetTeamStats ( th . BasicTeam . Id , "" )
CheckForbiddenStatus ( t , resp )
2017-02-20 15:35:02 -05:00
Client . Logout ( )
_ , resp = Client . GetTeamStats ( th . BasicTeam . Id , "" )
CheckUnauthorizedStatus ( t , resp )
2017-02-18 05:50:17 +09:00
}
2017-02-21 21:13:26 +09:00
func TestUpdateTeamMemberRoles ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-21 21:13:26 +09:00
Client := th . Client
SystemAdminClient := th . SystemAdminClient
const TEAM_MEMBER = "team_user"
const TEAM_ADMIN = "team_user team_admin"
// user 1 tries to promote user 2
ok , resp := Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser2 . Id , TEAM_ADMIN )
CheckForbiddenStatus ( t , resp )
if ok {
t . Fatal ( "should have returned false" )
}
// user 1 tries to promote himself
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser . Id , TEAM_ADMIN )
CheckForbiddenStatus ( t , resp )
// user 1 tries to demote someone
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . SystemAdminUser . Id , TEAM_MEMBER )
CheckForbiddenStatus ( t , resp )
// system admin promotes user 1
ok , resp = SystemAdminClient . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser . Id , TEAM_ADMIN )
CheckNoError ( t , resp )
if ! ok {
t . Fatal ( "should have returned true" )
}
// user 1 (team admin) promotes user 2
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser2 . Id , TEAM_ADMIN )
CheckNoError ( t , resp )
// user 1 (team admin) demotes user 2 (team admin)
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser2 . Id , TEAM_MEMBER )
CheckNoError ( t , resp )
// user 1 (team admin) tries to demote system admin (not member of a team)
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . SystemAdminUser . Id , TEAM_MEMBER )
2018-04-20 19:49:13 +01:00
CheckNotFoundStatus ( t , resp )
2017-02-21 21:13:26 +09:00
// user 1 (team admin) demotes system admin (member of a team)
2017-10-02 03:50:56 -05:00
th . LinkUserToTeam ( th . SystemAdminUser , th . BasicTeam )
2017-02-21 21:13:26 +09:00
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . SystemAdminUser . Id , TEAM_MEMBER )
CheckNoError ( t , resp )
// Note from API v3
// Note to anyone who thinks this (above) test is wrong:
// This operation will not affect the system admin's permissions because they have global access to all teams.
2018-03-29 16:04:54 +02:00
// Their team level permissions are irrelevant. A team admin should be able to manage team level permissions.
2017-02-21 21:13:26 +09:00
// System admins should be able to manipulate permission no matter what their team level permissions are.
// system admin promotes user 2
_ , resp = SystemAdminClient . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser2 . Id , TEAM_ADMIN )
CheckNoError ( t , resp )
// system admin demotes user 2 (team admin)
_ , resp = SystemAdminClient . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser2 . Id , TEAM_MEMBER )
CheckNoError ( t , resp )
// user 1 (team admin) tries to promote himself to a random team
_ , resp = Client . UpdateTeamMemberRoles ( model . NewId ( ) , th . BasicUser . Id , TEAM_ADMIN )
CheckForbiddenStatus ( t , resp )
// user 1 (team admin) tries to promote a random user
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , model . NewId ( ) , TEAM_ADMIN )
2018-04-20 19:49:13 +01:00
CheckNotFoundStatus ( t , resp )
2017-02-21 21:13:26 +09:00
// user 1 (team admin) tries to promote invalid team permission
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser . Id , "junk" )
CheckBadRequestStatus ( t , resp )
// user 1 (team admin) demotes himself
_ , resp = Client . UpdateTeamMemberRoles ( th . BasicTeam . Id , th . BasicUser . Id , TEAM_MEMBER )
CheckNoError ( t , resp )
}
2017-02-28 17:47:30 +02:00
2018-06-05 12:41:03 +01:00
func TestUpdateTeamMemberSchemeRoles ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2018-06-05 12:41:03 +01:00
defer th . TearDown ( )
SystemAdminClient := th . SystemAdminClient
th . LoginBasic ( )
s1 := & model . SchemeRoles {
SchemeAdmin : false ,
SchemeUser : false ,
}
_ , r1 := SystemAdminClient . UpdateTeamMemberSchemeRoles ( th . BasicTeam . Id , th . BasicUser . Id , s1 )
CheckNoError ( t , r1 )
tm1 , rtm1 := SystemAdminClient . GetTeamMember ( th . BasicTeam . Id , th . BasicUser . Id , "" )
CheckNoError ( t , rtm1 )
assert . Equal ( t , false , tm1 . SchemeUser )
assert . Equal ( t , false , tm1 . SchemeAdmin )
s2 := & model . SchemeRoles {
SchemeAdmin : false ,
SchemeUser : true ,
}
_ , r2 := SystemAdminClient . UpdateTeamMemberSchemeRoles ( th . BasicTeam . Id , th . BasicUser . Id , s2 )
CheckNoError ( t , r2 )
tm2 , rtm2 := SystemAdminClient . GetTeamMember ( th . BasicTeam . Id , th . BasicUser . Id , "" )
CheckNoError ( t , rtm2 )
assert . Equal ( t , true , tm2 . SchemeUser )
assert . Equal ( t , false , tm2 . SchemeAdmin )
s3 := & model . SchemeRoles {
SchemeAdmin : true ,
SchemeUser : false ,
}
_ , r3 := SystemAdminClient . UpdateTeamMemberSchemeRoles ( th . BasicTeam . Id , th . BasicUser . Id , s3 )
CheckNoError ( t , r3 )
tm3 , rtm3 := SystemAdminClient . GetTeamMember ( th . BasicTeam . Id , th . BasicUser . Id , "" )
CheckNoError ( t , rtm3 )
assert . Equal ( t , false , tm3 . SchemeUser )
assert . Equal ( t , true , tm3 . SchemeAdmin )
s4 := & model . SchemeRoles {
SchemeAdmin : true ,
SchemeUser : true ,
}
_ , r4 := SystemAdminClient . UpdateTeamMemberSchemeRoles ( th . BasicTeam . Id , th . BasicUser . Id , s4 )
CheckNoError ( t , r4 )
tm4 , rtm4 := SystemAdminClient . GetTeamMember ( th . BasicTeam . Id , th . BasicUser . Id , "" )
CheckNoError ( t , rtm4 )
assert . Equal ( t , true , tm4 . SchemeUser )
assert . Equal ( t , true , tm4 . SchemeAdmin )
_ , resp := SystemAdminClient . UpdateTeamMemberSchemeRoles ( model . NewId ( ) , th . BasicUser . Id , s4 )
CheckNotFoundStatus ( t , resp )
_ , resp = SystemAdminClient . UpdateTeamMemberSchemeRoles ( th . BasicTeam . Id , model . NewId ( ) , s4 )
CheckNotFoundStatus ( t , resp )
_ , resp = SystemAdminClient . UpdateTeamMemberSchemeRoles ( "ASDF" , th . BasicUser . Id , s4 )
CheckBadRequestStatus ( t , resp )
_ , resp = SystemAdminClient . UpdateTeamMemberSchemeRoles ( th . BasicTeam . Id , "ASDF" , s4 )
CheckBadRequestStatus ( t , resp )
th . LoginBasic2 ( )
_ , resp = th . Client . UpdateTeamMemberSchemeRoles ( th . BasicTeam . Id , th . BasicUser . Id , s4 )
CheckForbiddenStatus ( t , resp )
SystemAdminClient . Logout ( )
_ , resp = SystemAdminClient . UpdateTeamMemberSchemeRoles ( th . BasicTeam . Id , th . SystemAdminUser . Id , s4 )
CheckUnauthorizedStatus ( t , resp )
}
2017-02-28 17:47:30 +02:00
func TestGetMyTeamsUnread ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-02-28 17:47:30 +02:00
Client := th . Client
user := th . BasicUser
Client . Login ( user . Email , user . Password )
teams , resp := Client . GetTeamsUnreadForUser ( user . Id , "" )
CheckNoError ( t , resp )
if len ( teams ) == 0 {
t . Fatal ( "should have results" )
}
teams , resp = Client . GetTeamsUnreadForUser ( user . Id , th . BasicTeam . Id )
CheckNoError ( t , resp )
if len ( teams ) != 0 {
t . Fatal ( "should not have results" )
}
_ , resp = Client . GetTeamsUnreadForUser ( "fail" , "" )
CheckBadRequestStatus ( t , resp )
_ , resp = Client . GetTeamsUnreadForUser ( model . NewId ( ) , "" )
CheckForbiddenStatus ( t , resp )
Client . Logout ( )
_ , resp = Client . GetTeamsUnreadForUser ( user . Id , "" )
CheckUnauthorizedStatus ( t , resp )
2017-03-08 01:30:33 +01:00
}
func TestTeamExists ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-03-08 01:30:33 +01:00
Client := th . Client
team := th . BasicTeam
th . LoginBasic ( )
exists , resp := Client . TeamExists ( team . Name , "" )
CheckNoError ( t , resp )
2017-10-30 11:57:24 -05:00
if ! exists {
2017-03-08 01:30:33 +01:00
t . Fatal ( "team should exist" )
}
exists , resp = Client . TeamExists ( "testingteam" , "" )
CheckNoError ( t , resp )
2017-10-30 11:57:24 -05:00
if exists {
2017-03-08 01:30:33 +01:00
t . Fatal ( "team should not exist" )
}
Client . Logout ( )
_ , resp = Client . TeamExists ( team . Name , "" )
CheckUnauthorizedStatus ( t , resp )
}
2017-04-03 18:38:26 +02:00
func TestImportTeam ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-04-03 18:38:26 +02:00
t . Run ( "ImportTeam" , func ( t * testing . T ) {
var data [ ] byte
var err error
2018-09-04 08:33:29 -04:00
data , err = testutils . ReadTestFile ( "Fake_Team_Import.zip" )
2017-04-03 18:38:26 +02:00
if err != nil && len ( data ) == 0 {
t . Fatal ( "Error while reading the test file." )
}
// Import the channels/users/posts
fileResp , resp := th . SystemAdminClient . ImportTeam ( data , binary . Size ( data ) , "slack" , "Fake_Team_Import.zip" , th . BasicTeam . Id )
CheckNoError ( t , resp )
2017-07-12 14:13:25 +01:00
fileData , err := base64 . StdEncoding . DecodeString ( fileResp [ "results" ] )
if err != nil {
t . Fatal ( "failed to decode base64 results data" )
}
fileReturned := fmt . Sprintf ( "%s" , fileData )
2017-04-03 18:38:26 +02:00
if ! strings . Contains ( fileReturned , "darth.vader@stardeath.com" ) {
t . Log ( fileReturned )
t . Fatal ( "failed to report the user was imported" )
}
// Checking the imported users
importedUser , resp := th . SystemAdminClient . GetUserByUsername ( "bot_test" , "" )
CheckNoError ( t , resp )
if importedUser . Username != "bot_test" {
t . Fatal ( "username should match with the imported user" )
}
importedUser , resp = th . SystemAdminClient . GetUserByUsername ( "lordvader" , "" )
CheckNoError ( t , resp )
if importedUser . Username != "lordvader" {
t . Fatal ( "username should match with the imported user" )
}
// Checking the imported Channels
importedChannel , resp := th . SystemAdminClient . GetChannelByName ( "testchannel" , th . BasicTeam . Id , "" )
CheckNoError ( t , resp )
if importedChannel . Name != "testchannel" {
t . Fatal ( "names did not match expected: testchannel" )
}
importedChannel , resp = th . SystemAdminClient . GetChannelByName ( "general" , th . BasicTeam . Id , "" )
CheckNoError ( t , resp )
if importedChannel . Name != "general" {
t . Fatal ( "names did not match expected: general" )
}
posts , resp := th . SystemAdminClient . GetPostsForChannel ( importedChannel . Id , 0 , 60 , "" )
CheckNoError ( t , resp )
if posts . Posts [ posts . Order [ 3 ] ] . Message != "This is a test post to test the import process" {
t . Fatal ( "missing posts in the import process" )
}
} )
t . Run ( "MissingFile" , func ( t * testing . T ) {
_ , resp := th . SystemAdminClient . ImportTeam ( nil , 4343 , "slack" , "Fake_Team_Import.zip" , th . BasicTeam . Id )
CheckBadRequestStatus ( t , resp )
} )
t . Run ( "WrongPermission" , func ( t * testing . T ) {
var data [ ] byte
var err error
2018-09-04 08:33:29 -04:00
data , err = testutils . ReadTestFile ( "Fake_Team_Import.zip" )
2017-04-03 18:38:26 +02:00
if err != nil && len ( data ) == 0 {
t . Fatal ( "Error while reading the test file." )
}
// Import the channels/users/posts
_ , resp := th . Client . ImportTeam ( data , binary . Size ( data ) , "slack" , "Fake_Team_Import.zip" , th . BasicTeam . Id )
CheckForbiddenStatus ( t , resp )
} )
}
2017-04-04 03:32:09 +02:00
func TestInviteUsersToTeam ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-04-04 03:32:09 +02:00
2018-01-17 12:38:37 -06:00
user1 := th . GenerateTestEmail ( )
user2 := th . GenerateTestEmail ( )
2017-04-04 03:32:09 +02:00
emailList := [ ] string { user1 , user2 }
//Delete all the messages before check the sample email
2018-09-20 19:07:03 +02:00
mailservice . DeleteMailBox ( user1 )
mailservice . DeleteMailBox ( user2 )
2017-04-04 03:32:09 +02:00
2018-07-11 12:58:16 +02:00
enableEmailInvitations := * th . App . Config ( ) . ServiceSettings . EnableEmailInvitations
restrictCreationToDomains := th . App . Config ( ) . TeamSettings . RestrictCreationToDomains
defer func ( ) {
th . App . UpdateConfig ( func ( cfg * model . Config ) { cfg . ServiceSettings . EnableEmailInvitations = & enableEmailInvitations } )
th . App . UpdateConfig ( func ( cfg * model . Config ) { cfg . TeamSettings . RestrictCreationToDomains = restrictCreationToDomains } )
} ( )
2018-07-10 01:54:25 -07:00
2018-07-11 12:58:16 +02:00
th . App . UpdateConfig ( func ( cfg * model . Config ) { * cfg . ServiceSettings . EnableEmailInvitations = false } )
2018-07-10 01:54:25 -07:00
_ , resp := th . SystemAdminClient . InviteUsersToTeam ( th . BasicTeam . Id , emailList )
if resp . Error == nil {
t . Fatal ( "Should be disabled" )
}
th . App . UpdateConfig ( func ( cfg * model . Config ) { * cfg . ServiceSettings . EnableEmailInvitations = true } )
2017-04-04 03:32:09 +02:00
okMsg , resp := th . SystemAdminClient . InviteUsersToTeam ( th . BasicTeam . Id , emailList )
CheckNoError ( t , resp )
2017-10-30 11:57:24 -05:00
if ! okMsg {
2017-04-04 03:32:09 +02:00
t . Fatal ( "should return true" )
}
2017-10-18 15:36:43 -07:00
nameFormat := * th . App . Config ( ) . TeamSettings . TeammateNameDisplay
2018-01-02 05:46:31 -08:00
expectedSubject := utils . T ( "api.templates.invite_subject" ,
map [ string ] interface { } { "SenderName" : th . SystemAdminUser . GetDisplayName ( nameFormat ) ,
"TeamDisplayName" : th . BasicTeam . DisplayName ,
2018-01-05 16:17:57 -06:00
"SiteName" : th . App . ClientConfig ( ) [ "SiteName" ] } )
2018-01-02 05:46:31 -08:00
2017-04-04 03:32:09 +02:00
//Check if the email was send to the rigth email address
for _ , email := range emailList {
2018-09-20 19:07:03 +02:00
var resultsMailbox mailservice . JSONMessageHeaderInbucket
err := mailservice . RetryInbucket ( 5 , func ( ) error {
2017-04-04 03:32:09 +02:00
var err error
2018-09-20 19:07:03 +02:00
resultsMailbox , err = mailservice . GetMailBox ( email )
2017-04-04 03:32:09 +02:00
return err
} )
if err != nil {
t . Log ( err )
t . Log ( "No email was received, maybe due load on the server. Disabling this verification" )
}
if err == nil && len ( resultsMailbox ) > 0 {
2017-04-27 13:50:49 +02:00
if ! strings . ContainsAny ( resultsMailbox [ len ( resultsMailbox ) - 1 ] . To [ 0 ] , email ) {
2017-04-04 03:32:09 +02:00
t . Fatal ( "Wrong To recipient" )
} else {
2018-09-20 19:07:03 +02:00
if resultsEmail , err := mailservice . GetMessageFromMailbox ( email , resultsMailbox [ len ( resultsMailbox ) - 1 ] . ID ) ; err == nil {
2017-04-04 03:32:09 +02:00
if resultsEmail . Subject != expectedSubject {
t . Log ( resultsEmail . Subject )
t . Log ( expectedSubject )
t . Fatal ( "Wrong Subject" )
}
}
}
}
}
2017-06-29 15:04:14 +02:00
2018-08-28 08:06:57 -07:00
th . App . UpdateConfig ( func ( cfg * model . Config ) { cfg . TeamSettings . RestrictCreationToDomains = "@global.com,@common.com" } )
2017-06-29 15:04:14 +02:00
2018-08-28 08:06:57 -07:00
t . Run ( "restricted domains" , func ( t * testing . T ) {
err := th . App . InviteNewUsersToTeam ( emailList , th . BasicTeam . Id , th . BasicUser . Id )
2017-06-29 15:04:14 +02:00
2018-08-28 08:06:57 -07:00
if err == nil {
t . Fatal ( "Adding users with non-restricted domains was allowed" )
}
if err . Where != "InviteNewUsersToTeam" || err . Id != "api.team.invite_members.invalid_email.app_error" {
t . Log ( err )
t . Fatal ( "Got wrong error message!" )
}
} )
t . Run ( "override restricted domains" , func ( t * testing . T ) {
th . BasicTeam . AllowedDomains = "invalid.com,common.com"
if _ , err := th . App . UpdateTeam ( th . BasicTeam ) ; err == nil {
t . Fatal ( "Should not update the team" )
}
th . BasicTeam . AllowedDomains = "common.com"
if _ , err := th . App . UpdateTeam ( th . BasicTeam ) ; err != nil {
t . Log ( err )
t . Fatal ( "Should update the team" )
}
if err := th . App . InviteNewUsersToTeam ( [ ] string { "test@global.com" } , th . BasicTeam . Id , th . BasicUser . Id ) ; err == nil || err . Where != "InviteNewUsersToTeam" {
t . Log ( err )
t . Fatal ( "Per team restriction should take precedence over the global restriction" )
}
if err := th . App . InviteNewUsersToTeam ( [ ] string { "test@common.com" } , th . BasicTeam . Id , th . BasicUser . Id ) ; err != nil {
t . Log ( err )
t . Fatal ( "Failed to invite user which was common between team and global domain restriction" )
}
if err := th . App . InviteNewUsersToTeam ( [ ] string { "test@invalid.com" } , th . BasicTeam . Id , th . BasicUser . Id ) ; err == nil {
t . Log ( err )
t . Fatal ( "Should not invite user" )
}
} )
2017-04-04 03:32:09 +02:00
}
2017-06-20 09:55:43 -04:00
func TestGetTeamInviteInfo ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2017-10-02 03:50:56 -05:00
defer th . TearDown ( )
2017-06-20 09:55:43 -04:00
Client := th . Client
team := th . BasicTeam
team , resp := Client . GetTeamInviteInfo ( team . InviteId )
CheckNoError ( t , resp )
if team . DisplayName == "" {
t . Fatal ( "should not be empty" )
}
if team . Email != "" {
t . Fatal ( "should be empty" )
}
2017-07-14 17:06:59 -04:00
team . InviteId = "12345678901234567890123456789012"
team , resp = th . SystemAdminClient . UpdateTeam ( team )
CheckNoError ( t , resp )
2018-09-03 14:08:40 +02:00
_ , resp = Client . GetTeamInviteInfo ( team . InviteId )
2017-07-14 17:06:59 -04:00
CheckNoError ( t , resp )
2017-06-20 09:55:43 -04:00
_ , resp = Client . GetTeamInviteInfo ( "junk" )
2017-07-14 17:06:59 -04:00
CheckNotFoundStatus ( t , resp )
2017-06-20 09:55:43 -04:00
}
2018-03-01 20:11:44 +01:00
func TestSetTeamIcon ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2018-03-01 20:11:44 +01:00
defer th . TearDown ( )
Client := th . Client
team := th . BasicTeam
2018-09-04 08:33:29 -04:00
data , err := testutils . ReadTestFile ( "test.png" )
2018-03-01 20:11:44 +01:00
if err != nil {
t . Fatal ( err )
}
th . LoginTeamAdmin ( )
ok , resp := Client . SetTeamIcon ( team . Id , data )
if ! ok {
t . Fatal ( resp . Error )
}
CheckNoError ( t , resp )
ok , resp = Client . SetTeamIcon ( model . NewId ( ) , data )
if ok {
t . Fatal ( "Should return false, set team icon not allowed" )
}
CheckForbiddenStatus ( t , resp )
th . LoginBasic ( )
_ , resp = Client . SetTeamIcon ( team . Id , data )
if resp . StatusCode == http . StatusForbidden {
CheckForbiddenStatus ( t , resp )
} else if resp . StatusCode == http . StatusUnauthorized {
CheckUnauthorizedStatus ( t , resp )
} else {
t . Fatal ( "Should have failed either forbidden or unauthorized" )
}
Client . Logout ( )
_ , resp = Client . SetTeamIcon ( team . Id , data )
if resp . StatusCode == http . StatusForbidden {
CheckForbiddenStatus ( t , resp )
} else if resp . StatusCode == http . StatusUnauthorized {
CheckUnauthorizedStatus ( t , resp )
} else {
t . Fatal ( "Should have failed either forbidden or unauthorized" )
}
teamBefore , err := th . App . GetTeam ( team . Id )
require . Nil ( t , err )
_ , resp = th . SystemAdminClient . SetTeamIcon ( team . Id , data )
CheckNoError ( t , resp )
teamAfter , err := th . App . GetTeam ( team . Id )
require . Nil ( t , err )
assert . True ( t , teamBefore . LastTeamIconUpdate < teamAfter . LastTeamIconUpdate , "LastTeamIconUpdate should have been updated for team" )
info := & model . FileInfo { Path : "teams/" + team . Id + "/teamIcon.png" }
if err := th . cleanupTestFile ( info ) ; err != nil {
t . Fatal ( err )
}
}
func TestGetTeamIcon ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2018-03-01 20:11:44 +01:00
defer th . TearDown ( )
Client := th . Client
team := th . BasicTeam
// should always fail because no initial image and no auto creation
_ , resp := Client . GetTeamIcon ( team . Id , "" )
CheckNotFoundStatus ( t , resp )
Client . Logout ( )
_ , resp = Client . GetTeamIcon ( team . Id , "" )
CheckUnauthorizedStatus ( t , resp )
}
2018-04-30 17:57:57 +08:00
func TestRemoveTeamIcon ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2018-04-30 17:57:57 +08:00
defer th . TearDown ( )
Client := th . Client
team := th . BasicTeam
th . LoginTeamAdmin ( )
2018-09-04 08:33:29 -04:00
data , _ := testutils . ReadTestFile ( "test.png" )
2018-04-30 17:57:57 +08:00
Client . SetTeamIcon ( team . Id , data )
_ , resp := Client . RemoveTeamIcon ( team . Id )
CheckNoError ( t , resp )
teamAfter , _ := th . App . GetTeam ( team . Id )
if teamAfter . LastTeamIconUpdate != 0 {
t . Fatal ( "should update LastTeamIconUpdate to 0" )
}
Client . SetTeamIcon ( team . Id , data )
_ , resp = th . SystemAdminClient . RemoveTeamIcon ( team . Id )
CheckNoError ( t , resp )
teamAfter , _ = th . App . GetTeam ( team . Id )
if teamAfter . LastTeamIconUpdate != 0 {
t . Fatal ( "should update LastTeamIconUpdate to 0" )
}
Client . SetTeamIcon ( team . Id , data )
Client . Logout ( )
_ , resp = Client . RemoveTeamIcon ( team . Id )
CheckUnauthorizedStatus ( t , resp )
th . LoginBasic ( )
_ , resp = Client . RemoveTeamIcon ( team . Id )
CheckForbiddenStatus ( t , resp )
}
2018-05-02 07:31:14 -04:00
func TestUpdateTeamScheme ( t * testing . T ) {
2018-11-20 20:16:25 -05:00
th := Setup ( ) . InitBasic ( )
2018-05-02 07:31:14 -04:00
defer th . TearDown ( )
th . App . SetLicense ( model . NewTestLicense ( "" ) )
2018-05-21 06:10:26 -04:00
th . App . SetPhase2PermissionsMigrationStatus ( true )
2018-05-14 15:59:04 +01:00
2018-05-02 07:31:14 -04:00
team := & model . Team {
DisplayName : "Name" ,
Description : "Some description" ,
CompanyName : "Some company name" ,
AllowOpenInvite : false ,
InviteId : "inviteid0" ,
Name : "z-z-" + model . NewId ( ) + "a" ,
Email : "success+" + model . NewId ( ) + "@simulator.amazonses.com" ,
Type : model . TEAM_OPEN ,
}
team , _ = th . SystemAdminClient . CreateTeam ( team )
teamScheme := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : "DisplayName" ,
Name : model . NewId ( ) ,
2018-05-02 07:31:14 -04:00
Description : "Some description" ,
Scope : model . SCHEME_SCOPE_TEAM ,
}
teamScheme , _ = th . SystemAdminClient . CreateScheme ( teamScheme )
channelScheme := & model . Scheme {
2018-05-17 11:37:00 -04:00
DisplayName : "DisplayName" ,
Name : model . NewId ( ) ,
2018-05-02 07:31:14 -04:00
Description : "Some description" ,
Scope : model . SCHEME_SCOPE_CHANNEL ,
}
channelScheme , _ = th . SystemAdminClient . CreateScheme ( channelScheme )
// Test the setup/base case.
_ , resp := th . SystemAdminClient . UpdateTeamScheme ( team . Id , teamScheme . Id )
CheckNoError ( t , resp )
2018-05-29 10:32:07 +02:00
// Test the return to default scheme
_ , resp = th . SystemAdminClient . UpdateTeamScheme ( team . Id , "" )
CheckNoError ( t , resp )
2018-05-02 07:31:14 -04:00
// Test various invalid team and scheme id combinations.
_ , resp = th . SystemAdminClient . UpdateTeamScheme ( team . Id , "x" )
CheckBadRequestStatus ( t , resp )
_ , resp = th . SystemAdminClient . UpdateTeamScheme ( "x" , teamScheme . Id )
CheckBadRequestStatus ( t , resp )
_ , resp = th . SystemAdminClient . UpdateTeamScheme ( "x" , "x" )
CheckBadRequestStatus ( t , resp )
// Test that permissions are required.
_ , resp = th . Client . UpdateTeamScheme ( team . Id , teamScheme . Id )
CheckForbiddenStatus ( t , resp )
// Test that a license is requried.
th . App . SetLicense ( nil )
_ , resp = th . SystemAdminClient . UpdateTeamScheme ( team . Id , teamScheme . Id )
CheckNotImplementedStatus ( t , resp )
th . App . SetLicense ( model . NewTestLicense ( "" ) )
// Test an invalid scheme scope.
_ , resp = th . SystemAdminClient . UpdateTeamScheme ( team . Id , channelScheme . Id )
fmt . Printf ( "resp: %+v\n" , resp )
CheckBadRequestStatus ( t , resp )
// Test that an unauthenticated user gets rejected.
th . SystemAdminClient . Logout ( )
_ , resp = th . SystemAdminClient . UpdateTeamScheme ( team . Id , teamScheme . Id )
CheckUnauthorizedStatus ( t , resp )
}