github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+incompatible/app/auto_environment.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package app
     5  
     6  import (
     7  	"math/rand"
     8  	"time"
     9  
    10  	"github.com/mattermost/mattermost-server/model"
    11  	"github.com/mattermost/mattermost-server/utils"
    12  )
    13  
    14  type TestEnvironment struct {
    15  	Teams        []*model.Team
    16  	Environments []TeamEnvironment
    17  }
    18  
    19  func CreateTestEnvironmentWithTeams(a *App, client *model.Client, rangeTeams utils.Range, rangeChannels utils.Range, rangeUsers utils.Range, rangePosts utils.Range, fuzzy bool) (TestEnvironment, bool) {
    20  	rand.Seed(time.Now().UTC().UnixNano())
    21  
    22  	teamCreator := NewAutoTeamCreator(client)
    23  	teamCreator.Fuzzy = fuzzy
    24  	teams, err := teamCreator.CreateTestTeams(rangeTeams)
    25  	if !err {
    26  		return TestEnvironment{}, false
    27  	}
    28  
    29  	environment := TestEnvironment{teams, make([]TeamEnvironment, len(teams))}
    30  
    31  	for i, team := range teams {
    32  		userCreator := NewAutoUserCreator(a, client, team)
    33  		userCreator.Fuzzy = fuzzy
    34  		randomUser, err := userCreator.createRandomUser()
    35  		if !err {
    36  			return TestEnvironment{}, false
    37  		}
    38  		client.LoginById(randomUser.Id, USER_PASSWORD)
    39  		client.SetTeamId(team.Id)
    40  		teamEnvironment, err := CreateTestEnvironmentInTeam(a, client, team, rangeChannels, rangeUsers, rangePosts, fuzzy)
    41  		if !err {
    42  			return TestEnvironment{}, false
    43  		}
    44  		environment.Environments[i] = teamEnvironment
    45  	}
    46  
    47  	return environment, true
    48  }
    49  
    50  func CreateTestEnvironmentInTeam(a *App, client *model.Client, team *model.Team, rangeChannels utils.Range, rangeUsers utils.Range, rangePosts utils.Range, fuzzy bool) (TeamEnvironment, bool) {
    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 {
    62  		return TeamEnvironment{}, false
    63  	}
    64  	usernames := make([]string, len(users))
    65  	for i, user := range users {
    66  		usernames[i] = user.Username
    67  	}
    68  
    69  	channelCreator := NewAutoChannelCreator(client, team)
    70  	channelCreator.Fuzzy = fuzzy
    71  	channels, err := channelCreator.CreateTestChannels(rangeChannels)
    72  
    73  	// Have every user join every channel
    74  	for _, user := range users {
    75  		for _, channel := range channels {
    76  			client.LoginById(user.Id, USER_PASSWORD)
    77  			client.JoinChannel(channel.Id)
    78  		}
    79  	}
    80  
    81  	if !err {
    82  		return TeamEnvironment{}, false
    83  	}
    84  
    85  	numPosts := utils.RandIntFromRange(rangePosts)
    86  	numImages := utils.RandIntFromRange(rangePosts) / 4
    87  	for j := 0; j < numPosts; j++ {
    88  		user := users[utils.RandIntFromRange(utils.Range{Begin: 0, End: len(users) - 1})]
    89  		client.LoginById(user.Id, USER_PASSWORD)
    90  		for i, channel := range channels {
    91  			postCreator := NewAutoPostCreator(client, channel.Id)
    92  			postCreator.HasImage = i < numImages
    93  			postCreator.Users = usernames
    94  			postCreator.Fuzzy = fuzzy
    95  			postCreator.CreateRandomPost()
    96  		}
    97  	}
    98  
    99  	return TeamEnvironment{users, channels}, true
   100  }