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