github.com/jfrerich/mattermost-server@v5.8.0-rc2+incompatible/web/web_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package web
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  
    10  	"github.com/mattermost/mattermost-server/app"
    11  	"github.com/mattermost/mattermost-server/model"
    12  )
    13  
    14  var ApiClient *model.Client4
    15  var URL string
    16  
    17  type TestHelper struct {
    18  	App    *app.App
    19  	Server *app.Server
    20  
    21  	BasicUser    *model.User
    22  	BasicChannel *model.Channel
    23  	BasicTeam    *model.Team
    24  
    25  	SystemAdminUser *model.User
    26  }
    27  
    28  func Setup() *TestHelper {
    29  	mainHelper.Store.DropAllTables()
    30  
    31  	s, err := app.NewServer(app.StoreOverride(mainHelper.Store), app.DisableConfigWatch)
    32  	if err != nil {
    33  		panic(err)
    34  	}
    35  	a := s.FakeApp()
    36  	prevListenAddress := *a.Config().ServiceSettings.ListenAddress
    37  	a.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.ListenAddress = ":0" })
    38  	serverErr := s.Start()
    39  	if serverErr != nil {
    40  		panic(serverErr)
    41  	}
    42  	a.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.ListenAddress = prevListenAddress })
    43  
    44  	New(s, s.AppOptions, s.Router)
    45  	URL = fmt.Sprintf("http://localhost:%v", a.Srv.ListenAddr.Port)
    46  	ApiClient = model.NewAPIv4Client(URL)
    47  
    48  	a.DoAdvancedPermissionsMigration()
    49  	a.DoEmojisPermissionsMigration()
    50  
    51  	a.Srv.Store.MarkSystemRanUnitTests()
    52  
    53  	a.UpdateConfig(func(cfg *model.Config) {
    54  		*cfg.TeamSettings.EnableOpenServer = true
    55  	})
    56  
    57  	th := &TestHelper{
    58  		App:    a,
    59  		Server: s,
    60  	}
    61  
    62  	return th
    63  }
    64  
    65  func (th *TestHelper) InitBasic() *TestHelper {
    66  	th.SystemAdminUser, _ = th.App.CreateUser(&model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", EmailVerified: true, Roles: model.SYSTEM_ADMIN_ROLE_ID})
    67  
    68  	user, _ := th.App.CreateUser(&model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", EmailVerified: true, Roles: model.SYSTEM_USER_ROLE_ID})
    69  
    70  	team, _ := th.App.CreateTeam(&model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: user.Email, Type: model.TEAM_OPEN})
    71  
    72  	th.App.JoinUserToTeam(team, user, "")
    73  
    74  	channel, _ := th.App.CreateChannel(&model.Channel{DisplayName: "Test API Name", Name: "zz" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id, CreatorId: user.Id}, true)
    75  
    76  	th.BasicUser = user
    77  	th.BasicChannel = channel
    78  	th.BasicTeam = team
    79  
    80  	return th
    81  }
    82  
    83  func (th *TestHelper) TearDown() {
    84  	th.Server.Shutdown()
    85  	if err := recover(); err != nil {
    86  		panic(err)
    87  	}
    88  }
    89  
    90  /* Test disabled for now so we don't requrie the client to build. Maybe re-enable after client gets moved out.
    91  func TestStatic(t *testing.T) {
    92  	Setup()
    93  
    94  	// add a short delay to make sure the server is ready to receive requests
    95  	time.Sleep(1 * time.Second)
    96  
    97  	resp, err := http.Get(URL + "/static/root.html")
    98  
    99  	if err != nil {
   100  		t.Fatalf("got error while trying to get static files %v", err)
   101  	} else if resp.StatusCode != http.StatusOK {
   102  		t.Fatalf("couldn't get static files %v", resp.StatusCode)
   103  	}
   104  }
   105  */
   106  
   107  func TestCheckClientCompatability(t *testing.T) {
   108  	//Browser Name, UA String, expected result (if the browser should fail the test false and if it should pass the true)
   109  	type uaTest struct {
   110  		Name      string // Name of Browser
   111  		UserAgent string // Useragent of Browser
   112  		Result    bool   // Expected result (true if browser should be compatible, false if browser shouldn't be compatible)
   113  	}
   114  	var uaTestParameters = []uaTest{
   115  		{"Mozilla 40.1", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1", true},
   116  		{"Chrome 60", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36", true},
   117  		{"Chrome Mobile", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Mobile Safari/537.36", true},
   118  		{"MM Classic App", "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR6.170623.013; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.81 Mobile Safari/537.36 Web-Atoms-Mobile-WebView", true},
   119  		{"MM App 3.7.1", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Mattermost/3.7.1 Chrome/56.0.2924.87 Electron/1.6.11 Safari/537.36", true},
   120  		{"Franz 4.0.4", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Franz/4.0.4 Chrome/52.0.2743.82 Electron/1.3.1 Safari/537.36", true},
   121  		{"Edge 14", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393", true},
   122  		{"Internet Explorer 9", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0", false},
   123  		{"Internet Explorer 11", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko", true},
   124  		{"Internet Explorer 11 2", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Zoom 3.6.0; rv:11.0) like Gecko", true},
   125  		{"Internet Explorer 11 (Compatibility Mode) 1", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET CLR 1.1.4322; InfoPath.3; Zoom 3.6.0)", false},
   126  		{"Internet Explorer 11 (Compatibility Mode) 2", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Zoom 3.6.0)", false},
   127  		{"Safari 9", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Safari/604.1.38", true},
   128  		{"Safari 8", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12", false},
   129  		{"Safari Mobile", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1", true},
   130  	}
   131  	for _, browser := range uaTestParameters {
   132  		t.Run(browser.Name, func(t *testing.T) {
   133  			if result := CheckClientCompatability(browser.UserAgent); result != browser.Result {
   134  				t.Fatalf("%s User Agent Test failed!", browser.Name)
   135  			}
   136  		})
   137  	}
   138  }