From cf7a05f80f68b5b1c8bcc0089679dd497cec2506 Mon Sep 17 00:00:00 2001 From: =Corey Hulen Date: Sun, 14 Jun 2015 23:53:32 -0800 Subject: first commit --- manualtesting/manual_testing.go | 169 ++++++++++++++++++++++++++++++++++++++++ manualtesting/test_autolink.go | 38 +++++++++ 2 files changed, 207 insertions(+) create mode 100644 manualtesting/manual_testing.go create mode 100644 manualtesting/test_autolink.go (limited to 'manualtesting') diff --git a/manualtesting/manual_testing.go b/manualtesting/manual_testing.go new file mode 100644 index 000000000..ead441108 --- /dev/null +++ b/manualtesting/manual_testing.go @@ -0,0 +1,169 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +package manualtesting + +import ( + l4g "code.google.com/p/log4go" + "github.com/mattermost/platform/api" + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" + "hash/fnv" + "math/rand" + "net/http" + "net/url" + "strconv" + "time" +) + +type TestEnviroment struct { + Params map[string][]string + Client *model.Client + CreatedTeamId string + CreatedUserId string + Context *api.Context + Writer http.ResponseWriter + Request *http.Request +} + +func InitManualTesting() { + api.Srv.Router.Handle("/manualtest", api.AppHandler(manualTest)).Methods("GET") +} + +func manualTest(c *api.Context, w http.ResponseWriter, r *http.Request) { + // Let the world know + l4g.Info("Setting up for manual test...") + + // URL Parameters + params, err := url.ParseQuery(r.URL.RawQuery) + if err != nil { + c.Err = model.NewAppError("/manual", "Unable to parse URL", "") + return + } + + // Grab a uuid (if available) to seed the random number generator so we don't get conflicts. + uid, ok := params["uid"] + if ok { + hasher := fnv.New32a() + hasher.Write([]byte(uid[0] + strconv.Itoa(int(time.Now().UTC().UnixNano())))) + hash := hasher.Sum32() + rand.Seed(int64(hash)) + } else { + l4g.Debug("No uid in url") + } + + // Create a client for tests to use + client := model.NewClient("http://localhost:" + utils.Cfg.ServiceSettings.Port + "/api/v1") + + // Check for username parameter and create a user if present + username, ok1 := params["username"] + teamname, ok2 := params["teamname"] + var teamID string + var userID string + if ok1 && ok2 { + l4g.Info("Creating user and team") + // Create team for testing + team := &model.Team{ + Name: teamname[0], + Domain: utils.RandomName(utils.Range{20, 20}, utils.LOWERCASE), + Email: utils.RandomEmail(utils.Range{20, 20}, utils.LOWERCASE), + Type: model.TEAM_OPEN, + } + + if result := <-api.Srv.Store.Team().Save(team); result.Err != nil { + c.Err = result.Err + return + } else { + + createdTeam := result.Data.(*model.Team) + + channel := &model.Channel{DisplayName: "Town Square", Name: "town-square", Type: model.CHANNEL_OPEN, TeamId: createdTeam.Id} + if _, err := api.CreateChannel(c, channel, r.URL.Path, false); err != nil { + c.Err = err + return + } + + teamID = createdTeam.Id + } + + // Create user for testing + user := &model.User{ + TeamId: teamID, + Email: utils.RandomEmail(utils.Range{20, 20}, utils.LOWERCASE), + FullName: username[0], + Password: api.USER_PASSWORD} + + result, err := client.CreateUser(user, "") + if err != nil { + c.Err = err + return + } + api.Srv.Store.User().VerifyEmail(result.Data.(*model.User).Id) + newuser := result.Data.(*model.User) + userID = newuser.Id + + // Login as user to generate auth token + _, err = client.LoginById(newuser.Id, api.USER_PASSWORD) + if err != nil { + c.Err = err + return + } + + // Respond with an auth token this can be overriden by a specific test as required + sessionCookie := &http.Cookie{ + Name: model.SESSION_TOKEN, + Value: client.AuthToken, + Path: "/", + MaxAge: model.SESSION_TIME_WEB_IN_SECS, + HttpOnly: true, + } + http.SetCookie(w, sessionCookie) + http.Redirect(w, r, "/channels/town-square", http.StatusTemporaryRedirect) + } + + // Setup test enviroment + env := TestEnviroment{ + Params: params, + Client: client, + CreatedTeamId: teamID, + CreatedUserId: userID, + Context: c, + Writer: w, + Request: r, + } + + // Grab the test ID and pick the test + testname, ok := params["test"] + var err2 *model.AppError + switch testname[0] { + case "autolink": + err2 = testAutoLink(env) + // ADD YOUR NEW TEST HERE! + case "general": + err2 = nil + } + + if err != nil { + c.Err = err2 + return + } +} + +func getChannelID(channelname string, teamid string, userid string) (id string, err bool) { + // Grab all the channels + result := <-api.Srv.Store.Channel().GetChannels(teamid, userid) + if result.Err != nil { + l4g.Debug("Unable to get channels") + return "", false + } + + data := result.Data.(*model.ChannelList) + + for _, channel := range data.Channels { + if channel.Name == channelname { + return channel.Id, true + } + } + l4g.Debug("Could not find channel: " + channelname + ", " + strconv.Itoa(len(data.Channels)) + " possibilites searched") + return "", false +} diff --git a/manualtesting/test_autolink.go b/manualtesting/test_autolink.go new file mode 100644 index 000000000..5dfdadfb4 --- /dev/null +++ b/manualtesting/test_autolink.go @@ -0,0 +1,38 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +package manualtesting + +import ( + l4g "code.google.com/p/log4go" + "github.com/mattermost/platform/model" +) + +const LINK_POST_TEXT = ` +Some Links: +https://spinpunch.atlassian.net/issues/?filter=10101&jql=resolution%20in%20(Fixed%2C%20%22Won't%20Fix%22%2C%20Duplicate%2C%20%22Cannot%20Reproduce%22)%20AND%20Resolution%20%3D%20Fixed%20AND%20updated%20%3E%3D%20-7d%20ORDER%20BY%20updatedDate%20DESC + +https://www.google.com.pk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCUQFjAB&url=https%3A%2F%2Fdevelopers.google.com%2Fmaps%2Fdocumentation%2Fios%2Furlscheme&ei=HBFbVdSBN-WcygOG4oHIBw&usg=AFQjCNGI0Jg92Y7qNmyIpQyvYPut7vx5-Q&bvm=bv.93564037,d.bGg + +http://www.google.com.pk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0CC8QFjAD&url=http%3A%2F%2Fwww.quora.com%2FHow-long-will-a-Google-shortened-URL-be-available&ei=XRBbVbPLGYKcsAGqiIDQAw&usg=AFQjCNHY0Xi-GG4hgbrPUY_8Kg-55_-DNQ&bvm=bv.93564037,d.bGg + +https://medium.com/@slackhq/11-useful-tips-for-getting-the-most-of-slack-5dfb3d1af77 +` + +func testAutoLink(env TestEnviroment) *model.AppError { + l4g.Info("Manual Auto Link Test") + channelID, err := getChannelID(model.DEFAULT_CHANNEL, env.CreatedTeamId, env.CreatedUserId) + if err != true { + return model.NewAppError("/manualtest", "Unable to get channels", "") + } + + post := &model.Post{ + ChannelId: channelID, + Message: LINK_POST_TEXT} + _, err2 := env.Client.CreatePost(post) + if err2 != nil { + return err2 + } + + return nil +} -- cgit v1.2.3-1-g7c22