github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/app/slashcommands/auto_environment.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package slashcommands 5 6 import ( 7 "math/rand" 8 "time" 9 10 "github.com/mattermost/mattermost-server/v5/app" 11 "github.com/mattermost/mattermost-server/v5/model" 12 "github.com/mattermost/mattermost-server/v5/utils" 13 ) 14 15 type TestEnvironment struct { 16 Teams []*model.Team 17 Environments []TeamEnvironment 18 } 19 20 func CreateTestEnvironmentWithTeams(a *app.App, client *model.Client4, rangeTeams utils.Range, rangeChannels utils.Range, rangeUsers utils.Range, rangePosts utils.Range, fuzzy bool) (TestEnvironment, error) { 21 rand.Seed(time.Now().UTC().UnixNano()) 22 23 teamCreator := NewAutoTeamCreator(client) 24 teamCreator.Fuzzy = fuzzy 25 teams, err := teamCreator.CreateTestTeams(rangeTeams) 26 if err != nil { 27 return TestEnvironment{}, err 28 } 29 30 environment := TestEnvironment{teams, make([]TeamEnvironment, len(teams))} 31 32 for i, team := range teams { 33 userCreator := NewAutoUserCreator(a, client, team) 34 userCreator.Fuzzy = fuzzy 35 randomUser, err := userCreator.createRandomUser() 36 if err != nil { 37 return TestEnvironment{}, err 38 } 39 client.LoginById(randomUser.Id, UserPassword) 40 teamEnvironment, err := CreateTestEnvironmentInTeam(a, client, team, rangeChannels, rangeUsers, rangePosts, fuzzy) 41 if err != nil { 42 return TestEnvironment{}, err 43 } 44 environment.Environments[i] = teamEnvironment 45 } 46 47 return environment, nil 48 } 49 50 func CreateTestEnvironmentInTeam(a *app.App, client *model.Client4, team *model.Team, rangeChannels utils.Range, rangeUsers utils.Range, rangePosts utils.Range, fuzzy bool) (TeamEnvironment, error) { 51 rand.Seed(time.Now().UTC().UnixNano()) 52 53 // We need to create at least one user 54 if rangeUsers.Begin <= 0 { 55 rangeUsers.Begin = 1 56 } 57 58 userCreator := NewAutoUserCreator(a, client, team) 59 userCreator.Fuzzy = fuzzy 60 users, err := userCreator.CreateTestUsers(rangeUsers) 61 if err != nil { 62 return TeamEnvironment{}, nil 63 } 64 usernames := make([]string, len(users)) 65 for i, user := range users { 66 usernames[i] = user.Username 67 } 68 69 channelCreator := NewAutoChannelCreator(a, team, users[0].Id) 70 channelCreator.Fuzzy = fuzzy 71 channels, err := channelCreator.CreateTestChannels(rangeChannels) 72 if err != nil { 73 return TeamEnvironment{}, nil 74 } 75 76 // Have every user join every channel 77 for _, user := range users { 78 for _, channel := range channels { 79 _, resp := client.LoginById(user.Id, UserPassword) 80 if resp.Error != nil { 81 return TeamEnvironment{}, resp.Error 82 } 83 84 _, resp = client.AddChannelMember(channel.Id, user.Id) 85 if resp.Error != nil { 86 return TeamEnvironment{}, resp.Error 87 } 88 } 89 } 90 91 numPosts := utils.RandIntFromRange(rangePosts) 92 numImages := utils.RandIntFromRange(rangePosts) / 4 93 for j := 0; j < numPosts; j++ { 94 user := users[utils.RandIntFromRange(utils.Range{Begin: 0, End: len(users) - 1})] 95 _, resp := client.LoginById(user.Id, UserPassword) 96 if resp.Error != nil { 97 return TeamEnvironment{}, resp.Error 98 } 99 100 for i, channel := range channels { 101 postCreator := NewAutoPostCreator(a, channel.Id, user.Id) 102 postCreator.HasImage = i < numImages 103 postCreator.Users = usernames 104 postCreator.Fuzzy = fuzzy 105 _, err := postCreator.CreateRandomPost() 106 if err != nil { 107 return TeamEnvironment{}, err 108 } 109 } 110 } 111 112 return TeamEnvironment{users, channels}, nil 113 }