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  }